Compare commits

...

177 Commits

Author SHA1 Message Date
d84bc8062e Use prettier instead of prettierd
I keep having issues with prettierd not working and prettier works just
fine.
2025-12-05 13:48:28 +01:00
4e3d0500b9 Fixed pnpm setup 2025-12-03 21:32:20 +01:00
38f4c63336 Extra luals settings 2025-11-22 00:29:11 +01:00
434ff26226 Add eslint 2025-11-22 00:29:11 +01:00
af95197cb1 Update lspconfig 2025-11-22 00:29:10 +01:00
c2772d1874 Add vtsls as manual lsp 2025-11-22 00:29:10 +01:00
dd22699549 Switch default branch to main 2025-11-22 00:29:10 +01:00
b35b35731b zsh: Fix bat command availability check 2025-09-13 19:37:31 +02:00
881f99ef16 nvim: Use fork of which-key to fix border 2025-09-13 02:42:42 +02:00
0117cc612e zsh: Only start sesh-select if both sesh and sesh-select are available 2025-09-13 02:00:53 +02:00
1d3ae136be sesh: Moved sesh-select to be under sesh 2025-09-13 01:59:45 +02:00
362064b206 git: Also install git fixup on git-alten 2025-09-13 01:35:29 +02:00
c84b6b6584 nvim: Added crate plugin 2025-09-12 02:47:17 +02:00
9108f57780 nvim: Update other plugins 2025-09-12 02:21:14 +02:00
e4d4be54c6 nvim: Update schema-companion and kubernetes matcher 2025-09-12 02:21:14 +02:00
54b1090984 nvim: Switch back to fzf for fuzzy finding
Since I am now using fzf for a bunch of other things as well it made
sense to switch back in smart open as well.
2025-09-12 02:21:14 +02:00
43b0059631 nvim: Update smart-open to fix pause when opening 2025-09-12 02:21:14 +02:00
5c64115e5d tmux: Enable detach-on-destroy for scratch sessions 2025-09-12 02:21:13 +02:00
af1ddc5b3f nvim: Added keybind to cargo run in shell window 2025-09-12 02:21:13 +02:00
c2f57e070c tmux: Added plugin for selecting urls with the keyboard 2025-09-12 02:21:13 +02:00
374825559b tmux: Improve kill keybinds and pervent tmux from closing when there are still sessions 2025-09-12 02:21:13 +02:00
d8cf7121ef sesh: Created preconfigured sessions 2025-09-12 02:21:13 +02:00
1176535475 tmux: Use sesh for tmux session management
The zsh tmux plugin has been removed and instead fzf is shown to select
a session.
2025-09-12 02:21:13 +02:00
25b3a169a2 fzf: Improve border label 2025-09-12 02:21:13 +02:00
254bfd4be2 zsh: Improve how command availability is detected 2025-09-12 02:21:13 +02:00
ba282e656d nvim: Accidentally removed bufresize at some point 2025-09-12 02:21:12 +02:00
e10de143eb zsh: Update Oh-My-Zsh 2025-09-08 12:32:27 +02:00
e22f0c594c zsh: Added completion autosuggest strategy as fallback 2025-09-07 05:58:48 +02:00
b22739cb71 zsh: Add additional completions 2025-09-07 05:37:11 +02:00
a9163907be zsh: Generate text objects for quotes and brackets 2025-09-07 05:29:17 +02:00
59b2334253 readme: Added more tools 2025-09-07 05:26:23 +02:00
17a23eb7e4 zsh: Disable dirhistory plugin as I never used it 2025-09-07 05:26:20 +02:00
9a76b5071e git: Further improvements to git fixup 2025-09-07 05:26:17 +02:00
02d298a163 zsh: Configure fzf
It is now setup to look very similar to telescope.
It now uses fd for finding files.

There is a shell function `pi` to search for packages using fzf and to
then install them with paru
2025-09-07 05:26:13 +02:00
87359588e0 zsh: Added zoxide 2025-09-07 05:26:08 +02:00
98aa0593c9 Added syntax highlighting to shell 2025-09-07 04:23:04 +02:00
f96eb0e234 Turn on update-refs by default 2025-09-05 04:46:20 +02:00
026e3f9fc2 Turn on autosquash and autostash 2025-09-05 04:34:50 +02:00
b15b68fa5d Added useful fixup alias to make ammending old commits easier 2025-09-05 04:34:50 +02:00
c906025f68 Update nvim plugins 2025-09-05 04:34:12 +02:00
c1b73e5822 Added README that lists some useful tools 2025-09-05 04:34:12 +02:00
a60d4a8246 Increase tmux histroy size 2025-09-04 02:34:44 +02:00
d59b067075 Ros patch is now in upstream 2025-06-11 16:23:44 +02:00
4daa29ada3 Added more default installed treesitter parsers and enabled auto install 2025-06-11 14:44:32 +02:00
a041084bef Use prettierd for formatting json instead of jq as it does not support fake json files properly 2025-06-11 14:37:55 +02:00
5b97d37ed3 Install new version of node on legacy ubuntu 2025-06-11 14:37:13 +02:00
35803b0b03 Added comments explaining legacy ubuntu helper scripts a bit more 2025-06-11 14:36:42 +02:00
f7cc6a8c51 Fixup gitconfig inside of devcontainer 2025-06-04 11:38:53 +02:00
5d16b49967 Fixed escape delay 2025-06-04 10:39:07 +02:00
f19466063a Run nvim in devcontainer through bash in order to get the correct env 2025-06-04 10:38:52 +02:00
2f1c1460a6 Added npm to legacy ubuntu nvim 2025-06-04 02:15:56 +02:00
27d2c14665 Create .config folder if it does not exist for legacy ubuntu helper 2025-06-04 02:09:45 +02:00
73d4fbbbfb Added xclip for clipboard support in legacy ubuntu nvim 2025-06-04 01:44:21 +02:00
c146ff0f95 Make nvim pane switching work when inside devcontainer 2025-06-04 01:22:31 +02:00
d755aa90f5 Added keybindings to quickly select tmux window 2025-06-03 23:54:26 +02:00
7be1fa7a21 Added helper script for setting up neovim in legacy ubuntu devcontainer 2025-06-03 22:08:27 +02:00
90fb7736cf Turn down basedpyright strictness 2025-06-03 21:57:55 +02:00
0458cb0825 Only enable rust_analyer if it is installed 2025-06-03 21:56:19 +02:00
da7c214afe Fixed tmux stow ignore 2025-06-03 16:06:28 +02:00
ffeb4d6f45 Only install goimports if go is available 2025-06-03 15:47:18 +02:00
8026ec51d9 Fixed ALTEN gitconfig 2025-06-03 15:23:01 +02:00
b11e2ec42c Improved default less behavior 2025-06-03 13:44:03 +02:00
8d676a1e5e Specify neotree branch correctly 2025-06-03 13:43:59 +02:00
535ad35ded Added actions preview plugin 2025-06-03 13:43:57 +02:00
b4dfc6cfc0 Use delta for git diffs 2025-06-03 13:43:54 +02:00
3e786561ab Slight git config reorganization 2025-06-03 13:43:43 +02:00
c33133f7c9 Alias cat to bat if installed and use gruvbox theme 2025-06-03 02:55:16 +02:00
bcce589cc1 Adjusted font size 2025-06-02 15:23:05 +02:00
dccea7b3fd Disable todo comments signs 2025-06-02 03:16:20 +02:00
6ee3f0e346 Switch to smart open 2025-06-02 03:05:30 +02:00
322fc37df0 Switch from fzf to fzy 2025-06-02 03:04:21 +02:00
b6c9f2db01 Added eyeline 2025-06-02 02:34:18 +02:00
c8d442912f Use opts properly for gruvbox 2025-06-02 02:31:16 +02:00
b696b9addd Fixed mason tool installer startup 2025-06-01 21:50:07 +02:00
55e28be32c Handle big files better 2025-06-01 21:46:51 +02:00
320d742b41 Telescope plugins should be loaded _after_ telescope 2025-06-01 21:46:48 +02:00
5c946599bc Fixed mason-lspconfig load event 2025-06-01 20:32:24 +02:00
0505c877fe Use indent from snacks 2025-06-01 20:32:20 +02:00
6c5e5bb8c0 Inform lsp of neotree file rename 2025-06-01 19:43:50 +02:00
707010aadc Use bufdel from snacks 2025-06-01 19:43:28 +02:00
3be9780454 Added snacks.nvim 2025-06-01 19:42:41 +02:00
2bbf10c370 Added scroll eof plugin 2025-06-01 14:45:26 +02:00
39f538418b Remove symbol outline plugin 2025-05-31 05:12:20 +02:00
01cca08739 Update lazy lock 2025-05-31 05:09:48 +02:00
633df0af60 Tell blink we are using normal nerd font not mono 2025-05-31 05:09:40 +02:00
525e9099e4 Cleanup in blink config 2025-05-31 05:09:16 +02:00
1c42119291 Disable ros commands as they won't work outside the devcontainer 2025-05-31 05:07:36 +02:00
7723d66cbf Improve startup speed by properly lazy loading 2025-05-31 05:06:46 +02:00
649653ef8c Use builtin yamlls schemastore 2025-05-31 03:03:48 +02:00
18f15c5ab3 Switch back to main repo for todo comments 2025-05-31 03:03:48 +02:00
5c774bbdfb Cursor sticks to character during surround operations 2025-05-31 03:03:47 +02:00
e61c059de6 Proper lazy load fix for colorizer 2025-05-31 03:03:47 +02:00
82f6744c2f Setup treesitter folds in treesitter plugin init 2025-05-31 03:03:47 +02:00
2e4796d7a7 Moved LSP configs to new lsp/ folder, moved lsp config to seperate fiel, and simplified mason tool installer config 2025-05-31 03:03:47 +02:00
6c49b81f5a Add lua type annotation and make sure to use opts where possible 2025-05-31 03:03:43 +02:00
d2a4babb2e Remove unused whitespace plugin 2025-05-31 00:21:17 +02:00
a2335bfd1b Exit snippet when leaving insert mode 2025-05-30 21:28:30 +02:00
3efe02f0ab Disable change detection notification 2025-05-30 17:55:11 +02:00
651f32bdaf Update lazy lock 2025-05-30 17:46:57 +02:00
900e844835 More random cleanup 2025-05-30 17:46:57 +02:00
f8ad93746b Split mason configs 2025-05-30 17:46:54 +02:00
644edc8b2e Use schemastore plugin for yamlls 2025-05-30 17:38:17 +02:00
3f9ec6a29f Switch from yaml-companion to schema-companion 2025-05-30 05:59:01 +02:00
7d71427f28 Auto run geuss indent 2025-05-29 22:08:57 +02:00
a96448db09 Stay in insert mode when snippet is active 2025-05-29 22:08:57 +02:00
244c1929a3 Adjusted git keymaps to be easier to use 2025-05-29 22:08:53 +02:00
3291fb8111 Adjusted lsp based keymaps 2025-05-29 21:45:11 +02:00
9d72215ac6 Small gitsigns cleanup and made sure that git blame shows before everything else 2025-05-29 20:17:35 +02:00
e6a7dd6af5 Change how luvit is loaded in lazydev 2025-05-29 20:16:23 +02:00
dedbe6f2c8 Adjusted incremental selection keybinds 2025-05-29 20:15:34 +02:00
a5695d1e32 Adjusted git sign styling 2025-05-28 21:23:25 +02:00
703c0bb087 Highlight linenumber for diagnostics instead of using signs, switched to non-mono font to allow for larger icons 2025-05-28 21:14:01 +02:00
0c074e2aec Use treesitter to set folds 2025-05-28 19:23:06 +02:00
92f62551d9 Switched to different auto pair plugin 2025-05-28 19:07:37 +02:00
a11d93f6f4 Update ohmyzsh and zsh-autosuggestions 2025-05-28 19:07:37 +02:00
30d26ce769 Added zsh autopair plugin 2025-05-28 19:07:37 +02:00
637c15299b Removed old resize keymap 2025-05-28 19:07:02 +02:00
66d933cbb3 Adjusted diagnostic config 2025-05-28 17:58:57 +02:00
1ff53112ae Added ros plugin 2025-05-27 17:21:20 +02:00
38561b7dcc Fixed treesitter tag autoclose (#3) 2025-05-27 16:50:57 +02:00
7e46d955c7 Downgrade treesitter as the new version was causing issues (#1, #3, #4) 2025-05-27 16:50:52 +02:00
b23736c335 Leave insert mode with esc if cmp is open but nothing is selected (#2) 2025-05-26 20:56:34 +02:00
f08c4fddcd Use new border option 2025-05-26 20:56:31 +02:00
0a88d94e42 Switched to basedpywright 2025-05-26 19:07:43 +02:00
ca2a7c6462 Use mason-tool-installer to install packages for conform 2025-05-26 19:07:43 +02:00
76410a8a52 Switched to blink.cmp 2025-05-26 19:07:43 +02:00
fe7334fe81 Migrate to vim.lsp 2025-05-26 19:07:43 +02:00
b05b3bb2ef Remove cmp-lsp-rs as it broke 2025-05-26 19:07:42 +02:00
b92f5348cf Auto install conform formatters and adjusted how formatters are configured 2025-05-26 19:07:42 +02:00
fc435a934c Auto install and auto start treesitter parsers 2025-05-26 19:07:42 +02:00
380308ceb6 Start with all folds unfolded 2025-05-26 19:07:42 +02:00
7a13c688d7 Remove treesitter context 2025-05-26 19:07:36 +02:00
ede63fa3f1 Update treesitter to main 2025-05-26 14:24:38 +02:00
98d9158287 Neotree show current file on open 2025-05-26 02:00:42 +02:00
47d631ad21 Improve treesitter context 2025-05-26 01:27:15 +02:00
5ccfd77c84 Update neovim plugins 2025-05-25 19:11:11 +02:00
45c09c76e3 Fix LuaSnip jsregexpr install 2025-05-25 19:10:55 +02:00
cf94ba2e4b Add pnpm home 2025-05-25 19:09:58 +02:00
594200f88d Added devcontainer helper function 2025-05-25 19:09:40 +02:00
a0421469c0 Fixed typo 2025-05-25 18:55:19 +02:00
7be3e952fc Update neo-tree 2025-05-25 18:14:57 +02:00
bfb870d59c Disable lua rocks to silence error 2025-05-25 18:14:04 +02:00
64637b19ea Improved tmux config and pane movement/resizing 2025-05-25 18:07:16 +02:00
994c0ac0b8 Changed font to Hack 2025-03-01 05:10:03 +01:00
Tim Huizinga
243020a2c7 Fixed autosuggestions in vi mode 2025-02-27 12:12:01 +01:00
1df19a07cf Improved yaml behaviour in combination with kubernetes 2025-02-19 00:46:11 +01:00
c8377cdcf3 Added cargo install path to PATH 2025-01-26 06:15:33 +01:00
684445b4f7 Added back in schemastore support 2025-01-26 05:59:59 +01:00
bbe09a41e6 Updated which-key description + small config changed + changed file search keybind 2025-01-26 05:29:40 +01:00
53aaf53bde Fixed tabbing through telescope results 2025-01-26 04:55:20 +01:00
abba8c2901 Updated neotree config 2025-01-26 03:33:41 +01:00
5f1666094c Updated which-key config 2025-01-26 03:33:20 +01:00
d3239f37f1 Updated plugins 2025-01-26 03:31:56 +01:00
0e3ae1c346 Added git lfs 2025-01-26 01:59:39 +01:00
fa5bf51d41 Updated alacritty config 2024-11-24 14:33:06 +01:00
5c8b71ceb8 Upgraded from neodev to lazydev 2024-07-25 01:39:15 +02:00
a4a5afe3a9 Added nvim-dap 2024-07-24 16:50:38 +02:00
b3e20c39c7 Added option to use system lsp instead of mason 2024-06-28 02:07:15 +02:00
fdaa5e752d Updated plugins 2024-06-28 01:47:54 +02:00
ca6a204247 Fixed documentHighlight error after restarting LSP 2024-06-28 01:47:00 +02:00
84128270ff Turn off error when formatting fails 2024-06-28 01:46:31 +02:00
70b182d3cc Fixed ALTEN profile 2024-06-28 01:46:08 +02:00
7512d46578 Highlight tabs, trailing whitespace, and non-breaking spaces 2024-06-19 10:52:41 +02:00
24313cc9c0 Disabled nil_ls since it will fail to auto install 2024-06-14 01:44:07 +02:00
1b8d2d0a3c Improved git config 2024-06-14 01:39:20 +02:00
b45e45939a Updated omz 2024-06-14 01:00:58 +02:00
6beca4a66b Use nvimdiff for git difftool 2024-06-14 00:56:07 +02:00
8ca75d2ecc Improved gitsigns settings 2024-06-14 00:55:27 +02:00
9af50fc20b Disable numhl for diagnostics 2024-06-14 00:05:19 +02:00
c7f3f3bb17 Disabled injected formatter 2024-06-13 23:39:49 +02:00
b578e7bfd4 Fixed issue with clangd 2024-06-13 23:39:00 +02:00
327b4e03e8 Removed bufferline close icons 2024-06-13 23:37:59 +02:00
527b17f445 Updated plugins 2024-06-13 23:37:35 +02:00
7db0d085f2 Reduces alacritty font size 2024-06-13 23:35:48 +02:00
d5eba6dedb Updated omhmyzsh 2024-04-24 17:03:16 +02:00
69b57a0238 Updated neotree and tweaked some settings 2024-04-19 05:53:25 +02:00
82cae9a0eb Fix: LspInfo border is the wrong color 2024-04-19 04:10:42 +02:00
91 changed files with 1985 additions and 1131 deletions

9
.gitmodules vendored
View File

@@ -7,3 +7,12 @@
[submodule "tmux/tpm"] [submodule "tmux/tpm"]
path = tmux/tpm path = tmux/tpm
url = https://github.com/tmux-plugins/tpm url = https://github.com/tmux-plugins/tpm
[submodule "zsh/custom/plugins/zsh-autopair"]
path = zsh/custom/plugins/zsh-autopair
url = https://github.com/hlissner/zsh-autopair
[submodule "zsh/custom/plugins/fast-syntax-highlighting"]
path = zsh/custom/plugins/fast-syntax-highlighting
url = https://github.com/zdharma-continuum/fast-syntax-highlighting.git
[submodule "zsh/custom/plugins/zsh-completions"]
path = zsh/custom/plugins/zsh-completions
url = https://github.com/zsh-users/zsh-completions.git

20
README.md Normal file
View File

@@ -0,0 +1,20 @@
## Tools
### Core tools
```
bat
fd
fzf
git-delta
paru
rg
zoxide
```
### Useful
```
jq
git-cliff
```

View File

@@ -1,13 +1,12 @@
import = ["/home/tim/.config/alacritty/gruvbox_dark.toml"]
[env] [env]
TERM = "xterm-256color" TERM = "xterm-256color"
[font] [font]
size = 12.0 size = 10
[font.normal] [font.normal]
family = "SauceCodePro Nerd Font Mono" family = "Hack Nerd Font"
[window] [window]
decorations = "none" decorations = "none"
@@ -18,3 +17,6 @@ resize_increments = true
[window.dimensions] [window.dimensions]
columns = 80 columns = 80
lines = 24 lines = 24
[general]
import = ["/home/tim/.config/alacritty/gruvbox_dark.toml"]

4
git-alten/dot-gitconfig Normal file
View File

@@ -0,0 +1,4 @@
[include]
path = ~/.dotfiles/git/configs/common.gitconfig
path = ~/.dotfiles/git/profiles/ALTEN.gitconfig

1
git-alten/dot-local Symbolic link
View File

@@ -0,0 +1 @@
../git/dot-local

View File

@@ -1,2 +1,3 @@
gitignore gitignore
gitconfig profiles
configs

View File

@@ -0,0 +1,32 @@
[include]
path = ~/.dotfiles/git/configs/lfs.gitconfig
path = ~/.dotfiles/git/configs/delta.gitconfig
[push]
default = simple
[core]
excludesfile = ~/.dotfiles/git/gitignore
[color]
ui = true
[credential]
helper = store
[pull]
; If we pull we only want to fast forward, if that is not possible we should not allow pull to work
; Instead use fetch and then either rebase or merge
ff = only
; rebase = false
[diff]
tool = nvimdiff
[init]
defaultBranch = main
[rebase]
autosquash = true
autostash = true
updateRefs = true

View File

@@ -0,0 +1,54 @@
[delta "gruvmax-fang"]
# author: https://github.com/maxfangx
# Modified by: Dreaded_X
# General appearance
dark = true
syntax-theme = gruvbox-dark
# File
file-style = "#FFFFFF" bold
file-added-label = [+]
file-copied-label = [==]
file-modified-label = [*]
file-removed-label = [-]
file-renamed-label = [->]
file-decoration-style = "#434C5E" ul
file-decoration-style = "#84786A" ul
# No hunk headers
hunk-header-style = omit
# Line numbers
line-numbers = true
line-numbers-left-style = "#84786A"
line-numbers-right-style = "#84786A"
line-numbers-minus-style = "#A02A11"
line-numbers-plus-style = "#479B36"
line-numbers-zero-style = "#84786A"
line-numbers-left-format = " {nm:>3} │"
line-numbers-right-format = " {np:>3} │"
# Diff contents
inline-hint-style = syntax
minus-non-emph-style = syntax auto
plus-non-emph-style = syntax auto
whitespace-error-style = "#FB4934" reverse
# Blame
blame-code-style = syntax
# Merge conflicts
merge-conflict-begin-symbol = ⌃
merge-conflict-end-symbol = ⌄
merge-conflict-ours-diff-header-style = "#FABD2F" bold
merge-conflict-theirs-diff-header-style = "#FABD2F" bold overline
merge-conflict-ours-diff-header-decoration-style = ''
merge-conflict-theirs-diff-header-decoration-style = ''
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
features = gruvmax-fang
navigate = true
side-by-side = true
[merge]
conflictstyle = zdiff3

View File

@@ -0,0 +1,5 @@
[filter "lfs"]
process = git-lfs filter-process
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f

View File

@@ -1,28 +1,7 @@
[user] [include]
name = Dreaded_X path = ~/.dotfiles/git/configs/common.gitconfig
email = tim@huizinga.dev
signingkey = CD17A34CBFB21DE9A73D47EB76BDEC4E165D8AD9
[push] path = ~/.dotfiles/git/profiles/Dreaded_X.gitconfig
default = simple
[core]
excludesfile = ~/.dotfiles/git/gitignore
[color]
ui = true
[credential]
helper = store
[pull]
; If we pull we only want to fast forward, if that is not possible we should not allow pull to work
; Instead use fetch and then either rebase or merge
ff = only
; rebase = false
[init]
defaultBranch = master
[commit]
gpgsign = true
[includeIf "gitdir:~/Projects/ALTEN/"] [includeIf "gitdir:~/Projects/ALTEN/"]
path = ~/.dotfiles/git/gitconfig/ALTEN path = ~/.dotfiles/git/profiles/ALTEN.gitconfig

19
git/dot-local/bin/git-fixup Executable file
View File

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
TARGET=$1
if [ -z "$TARGET" ]; then
if hash fzf 2>/dev/null; then
TARGET=$(git log -n 50 --pretty=format:'%h %s' --no-merges | fzf --border-label=' Select commit ' | cut -c -7 )
else
echo "Not installed: fzf"
exit -1
fi
fi
if [ -z "$TARGET" ]; then
echo "No target specified"
exit -1
fi
git commit --fixup=$TARGET ${@:2} && GIT_SEQUENCE_EDITOR=true git rebase -i --autostash --autosquash $TARGET^

View File

@@ -1,3 +1,6 @@
[user] [user]
name = Tim Huizinga name = Tim Huizinga
email = tim.huizinga@alten.nl email = tim.huizinga@alten.nl
[commit]
gpgsign = false

View File

@@ -0,0 +1,7 @@
[user]
name = Dreaded_X
email = tim@huizinga.dev
signingkey = CD17A34CBFB21DE9A73D47EB76BDEC4E165D8AD9
[commit]
gpgsign = true

24
helpers/legacy_ubuntu_nvim.sh Executable file
View File

@@ -0,0 +1,24 @@
#!/bin/bash
set -e
# Install additional dependencies
sudo apt-get install fuse libfuse2 unzip ripgrep python3-venv xclip -y --no-install-recommends
# Install new version of node
curl -fsSL https://deb.nodesource.com/setup_23.x -o /tmp/nodesource_setup.sh
sudo -E bash /tmp/nodesource_setup.sh
sudo apt-get install -y nodejs
# Install new version of neovim
sudo rm -rf /usr/local/bin/nvim
sudo wget https://github.com/neovim/neovim-releases/releases/download/v0.11.1/nvim-linux-x86_64.appimage -O /usr/local/bin/nvim
sudo chmod +x /usr/local/bin/nvim
# Get latest version of dotfiles
rm -rf ~/.dotfiles
git clone https://git.huizinga.dev/Dreaded_X/dotfiles ~/.dotfiles
mkdir -p ~/.config
ln -s ~/.dotfiles/nvim/dot-config/nvim ~/.config/nvim
# Remove include paths from copied host gitconfig
sed -i '/path = /d' ~/.gitconfig

View File

@@ -1,8 +1,3 @@
-- Basic vim config stuff
require("keymaps")
require("options")
require("autocmds")
-- Install lazy package manager -- Install lazy package manager
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then if not vim.loop.fs_stat(lazypath) then
@@ -17,6 +12,13 @@ if not vim.loop.fs_stat(lazypath) then
end end
vim.opt.rtp:prepend(lazypath) vim.opt.rtp:prepend(lazypath)
-- Setup
require("keymaps")
require("options")
require("autocmds")
require("lsp")
-- Configure plugins
require("lazy").setup({ require("lazy").setup({
{ import = "themes" }, { import = "themes" },
{ import = "plugins" }, { import = "plugins" },
@@ -26,6 +28,12 @@ require("lazy").setup({
"gruvbox", "gruvbox",
}, },
}, },
change_detection = {
notify = false,
},
rocks = {
enabled = false,
},
ui = { ui = {
border = require("symbols.window").border, border = require("symbols.window").border,
backdrop = 100, backdrop = 100,

View File

@@ -1,49 +1,51 @@
{ {
"Comment.nvim": { "branch": "master", "commit": "0236521ea582747b58869cb72f70ccfa967d2e89" }, "Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "03c8e67eb7293c404845b3982db895d59c0d1538" }, "actions-preview.nvim": { "branch": "master", "commit": "36513ad213855d497b7dd3391a24d1d75d58e36f" },
"bufferline.nvim": { "branch": "main", "commit": "243893ba9d5d1049dd451a25cab32ec7f8f67bcf" }, "blink.cmp": { "branch": "main", "commit": "bae4bae0eedd1fa55f34b685862e94a222d5c6f8" },
"bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" },
"bufresize.nvim": { "branch": "master", "commit": "3b19527ab936d6910484dcc20fb59bdb12322d8b" }, "bufresize.nvim": { "branch": "master", "commit": "3b19527ab936d6910484dcc20fb59bdb12322d8b" },
"cmp-nvim-lsp": { "branch": "main", "commit": "5af77f54de1b16c34b23cba810150689a3a90312" }, "conform.nvim": { "branch": "master", "commit": "b4aab989db276993ea5dcb78872be494ce546521" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" }, "crates.nvim": { "branch": "main", "commit": "afcd1cc3eeceb5783676fc8464389b9216a29d05" },
"cmp_luasnip": { "branch": "master", "commit": "05a9ab28b53f71d1aece421ef32fee2cb857a843" }, "eyeliner.nvim": { "branch": "main", "commit": "8f197eb30cecdf4c2cc9988a5eecc6bc34c0c7d6" },
"conform.nvim": { "branch": "master", "commit": "a6965ac128eba75537ec2bc5ddd5d5e357062bdc" }, "fidget.nvim": { "branch": "main", "commit": "4d5858bd4c471c895060e1b9f3575f1551184dc5" },
"document-color.nvim": { "branch": "main", "commit": "74c487f0e5accfaae033755451b9e367220693fd" }, "friendly-snippets": { "branch": "main", "commit": "572f5660cf05f8cd8834e096d7b4c921ba18e175" },
"fidget.nvim": { "branch": "main", "commit": "1ba38e4cbb24683973e00c2e36f53ae64da38ef5" }, "gitsigns.nvim": { "branch": "main", "commit": "6e3c66548035e50db7bd8e360a29aec6620c3641" },
"gitsigns.nvim": { "branch": "main", "commit": "52f8da33cc0cadbf1164c4a91c8bfd6895533d67" }, "gruvbox.nvim": { "branch": "main", "commit": "5e0a460d8e0f7f669c158dedd5f9ae2bcac31437" },
"gruvbox.nvim": { "branch": "main", "commit": "6e4027ae957cddf7b193adfaec4a8f9e03b4555f" }, "guess-indent.nvim": { "branch": "main", "commit": "84a4987ff36798c2fc1169cbaff67960aed9776f" },
"guess-indent.nvim": { "branch": "main", "commit": "b8ae749fce17aa4c267eec80a6984130b94f80b2" }, "inc-rename.nvim": { "branch": "main", "commit": "8ae25b35ae16ca4bd5de3d3c472eec3b574018d4" },
"inc-rename.nvim": { "branch": "main", "commit": "5e03e986625961d1fac296d1bf332a6510c3add6" }, "kubernetes.nvim": { "branch": "main", "commit": "44daf998345628a1a7034e3aaa31f4e05e4dde7c" },
"indent-blankline.nvim": { "branch": "master", "commit": "3d08501caef2329aba5121b753e903904088f7e6" }, "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazy.nvim": { "branch": "main", "commit": "31ddbea7c10b6920c9077b66c97951ca8682d5c8" }, "lazydev.nvim": { "branch": "main", "commit": "2367a6c0a01eb9edb0464731cc0fb61ed9ab9d2c" },
"lsp_signature.nvim": { "branch": "master", "commit": "c6aeb2f1d2538bbdfdaab1664d9d4c3c75aa9db8" }, "lualine.nvim": { "branch": "master", "commit": "b8c23159c0161f4b89196f74ee3a6d02cdc3a955" },
"lspkind-nvim": { "branch": "master", "commit": "1735dd5a5054c1fb7feaf8e8658dbab925f4f0cf" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "7f9a39fcd2ac6e979001f857727d606888f5909c" },
"lualine.nvim": { "branch": "master", "commit": "0a5a66803c7407767b799067986b4dc3036e1983" }, "mason-tool-installer.nvim": { "branch": "main", "commit": "517ef5994ef9d6b738322664d5fdd948f0fdeb46" },
"mason-lspconfig.nvim": { "branch": "main", "commit": "44509689b9bf3984d729cc264aacb31cb7f41668" }, "mason.nvim": { "branch": "main", "commit": "7dc4facca9702f95353d5a1f87daf23d78e31c2a" },
"mason-tool-installer.nvim": { "branch": "main", "commit": "b129892f783740e6cf741f2ea09fa5dd512aa584" }, "neo-tree.nvim": { "branch": "v3.x", "commit": "f1deac7ecec88c28a250d890ba7bb35843e69cbd" },
"mason.nvim": { "branch": "main", "commit": "751b1fcbf3d3b783fcf8d48865264a9bcd8f9b10" }, "nui.nvim": { "branch": "main", "commit": "de740991c12411b663994b2860f1a4fd0937c130" },
"neo-tree.nvim": { "branch": "main", "commit": "b529fb2ae9206ca1d84ee72b596deecbc088ac59" }, "nvim-colorizer.lua": { "branch": "master", "commit": "51cf7c995ed1eb6642aecf19067ee634fa1b6ba2" },
"neodev.nvim": { "branch": "main", "commit": "ce9a2e8eaba5649b553529c5498acb43a6c317cd" }, "nvim-dap": { "branch": "master", "commit": "b0f983507e3702f073bfe1516846e58b56d4e42f" },
"nui.nvim": { "branch": "main", "commit": "cbd2668414331c10039278f558630ed19b93e69b" }, "nvim-dap-virtual-text": { "branch": "master", "commit": "fbdb48c2ed45f4a8293d0d483f7730d24467ccb6" },
"nvim-autopairs": { "branch": "master", "commit": "4f41e5940bc0443fdbe5f995e2a596847215cd2a" }, "nvim-lspconfig": { "branch": "master", "commit": "ac98db2f9f06a56498ec890a96928774eae412c3" },
"nvim-bufdel": { "branch": "main", "commit": "523d58e94e7212fff3e05c247b962dc8f93bcfde" }, "nvim-surround": { "branch": "main", "commit": "a868c256c861044beb9794b4dd126480dcdfbdad" },
"nvim-cmp": { "branch": "main", "commit": "ce16de5665c766f39c271705b17fff06f7bcb84f" }, "nvim-treesitter": { "branch": "master", "commit": "42fc28ba918343ebfd5565147a42a26580579482" },
"nvim-cmp-lsp-rs": { "branch": "main", "commit": "cb7681abf20b615a7ec33e3f49df3b5a382711a4" }, "nvim-treesitter-textobjects": { "branch": "master", "commit": "71385f191ec06ffc60e80e6b0c9a9d5daed4824c" },
"nvim-colorizer.lua": { "branch": "master", "commit": "85855b38011114929f4058efc97af1059ab3e41d" }, "nvim-ts-autotag": { "branch": "main", "commit": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc" },
"nvim-lspconfig": { "branch": "master", "commit": "9266dc26862d8f3556c2ca77602e811472b4c5b8" },
"nvim-surround": { "branch": "main", "commit": "a4e30d33add8a9743b4f518b3a788b3c8e5def71" },
"nvim-treesitter": { "branch": "master", "commit": "3e10cffbb2a022cd8e2aaea9f4fffb514065e77c" },
"nvim-treesitter-context": { "branch": "master", "commit": "c24a7a6dc5fde325af844d165323aa6f7082866e" },
"nvim-treesitter-textobjects": { "branch": "master", "commit": "23b820146956b3b681c19e10d3a8bc0cbd9a1d4c" },
"nvim-ts-autotag": { "branch": "main", "commit": "531f48334c422222aebc888fd36e7d109cb354cd" },
"peek.nvim": { "branch": "master", "commit": "5820d937d5414baea5f586dc2a3d912a74636e5b" }, "peek.nvim": { "branch": "master", "commit": "5820d937d5414baea5f586dc2a3d912a74636e5b" },
"plenary.nvim": { "branch": "master", "commit": "8aad4396840be7fc42896e3011751b7609ca4119" }, "plenary.nvim": { "branch": "master", "commit": "b9fd5226c2f76c951fc8ed5923d85e4de065e509" },
"schemastore.nvim": { "branch": "main", "commit": "f660f74bcaae950a77c69dda91270063c8cbd692" }, "ros-nvim": { "branch": "main", "commit": "1ad64cd3a1e144dfea67890845f9da2e82d96900" },
"smart-splits.nvim": { "branch": "master", "commit": "e11caebbe3ce8fb70aced281931f73519a060e0a" }, "schema-companion.nvim": { "branch": "main", "commit": "e94f5f8439705d772363817c9d2c6c9fc7562bd0" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "9ef21b2e6bb6ebeaf349a0781745549bbb870d27" }, "schemastore.nvim": { "branch": "main", "commit": "d522e3ed6ed2c7bed7ebe1e42615e79b3aabfe65" },
"scrollEOF.nvim": { "branch": "master", "commit": "aeedfad14e4a0cfa31b44b531c1ad8fd4696b551" },
"smart-open.nvim": { "branch": "0.3.x", "commit": "e7f27218bd43de5262d3e8e3e84a135737ca6942" },
"smart-splits.nvim": { "branch": "master", "commit": "51e400b0bb6cbfd48e56d1baca250f34028cf1d3" },
"snacks.nvim": { "branch": "main", "commit": "bc0630e43be5699bb94dadc302c0d21615421d93" },
"sqlite.lua": { "branch": "master", "commit": "50092d60feb242602d7578398c6eb53b4a8ffe7b" },
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
"telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" }, "telescope-ui-select.nvim": { "branch": "master", "commit": "6e51d7da30bd139a6950adf2a47fda6df9fa06d2" },
"telescope.nvim": { "branch": "master", "commit": "d00d9df48c00d8682c14c2b5da78bda7ef06b939" }, "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" },
"todo-comments.nvim": { "branch": "main", "commit": "a736bbe08c8eff370dfa60701f1e669816d4e3c8" }, "todo-comments.nvim": { "branch": "main", "commit": "304a8d204ee787d2544d8bc23cd38d2f929e7cc5" },
"trouble.nvim": { "branch": "main", "commit": "b9cf677f20bb2faa2dacfa870b084e568dca9572" }, "trouble.nvim": { "branch": "main", "commit": "85bedb7eb7fa331a2ccbecb9202d8abba64d37b3" },
"undotree": { "branch": "master", "commit": "56c684a805fe948936cda0d1b19505b84ad7e065" }, "ultimate-autopair.nvim": { "branch": "v0.6", "commit": "74163ac321c7d208a5bb9cdf8964114c7064d6c7" },
"which-key.nvim": { "branch": "main", "commit": "4433e5ec9a507e5097571ed55c02ea9658fb268a" } "undotree": { "branch": "master", "commit": "fe9a9d0645f0f5532360b5e5f5c550d7bb4f1869" },
"which-key.nvim": { "branch": "winborder-support", "commit": "ab1a3b0d3005a95507ba6c18b96531d430370885" }
} }

View File

@@ -0,0 +1,9 @@
return {
settings = {
basedpyright = {
analysis = {
typeCheckingMode = "standard",
},
},
},
}

View File

@@ -0,0 +1,3 @@
return {
cmd = { "clangd", "--offset-encoding=utf-16", "--clang-tidy" },
}

View File

@@ -0,0 +1,16 @@
return require("schema-companion").setup_client(
require("schema-companion").adapters.jsonls.setup({
sources = {
require("schema-companion").sources.lsp.setup(),
require("schema-companion").sources.none.setup(),
},
}),
{
settings = {
json = {
validate = { enable = true },
schemas = require("schemastore").json.schemas(),
},
},
}
)

View File

@@ -0,0 +1,23 @@
return {
settings = {
Lua = {
workspace = {
checkThirdParty = false,
library = {
"./definitions",
},
},
telemetry = { enable = false },
type = {
checkTableShape = true,
},
diagnostics = {
neededFileStatus = {
-- ["no-unknown"] = "Opened",
-- ["incomplete-signature-doc"] = "Opened",
-- ["await-in-sync"] = "Opened",
},
},
},
},
}

View File

@@ -0,0 +1,9 @@
return {
settings = {
["rust-analyzer"] = {
check = {
command = "clippy",
},
},
},
}

View File

@@ -0,0 +1,9 @@
return require("schema-companion").setup_client(
require("schema-companion").adapters.taplo.setup({
sources = {
require("schema-companion").sources.lsp.setup(),
require("schema-companion").sources.none.setup(),
},
}),
{}
)

View File

@@ -0,0 +1,5 @@
return {
init_options = {
diagnosticSeverity = "Hint",
},
}

View File

@@ -0,0 +1,10 @@
return require("schema-companion").setup_client(
require("schema-companion").adapters.yamlls.setup({
sources = {
require("matchers.kubernetes").setup({}),
require("schema-companion").sources.lsp.setup(),
require("schema-companion").sources.none.setup(),
},
}),
{}
)

View File

@@ -1,15 +1,11 @@
-- Highlight on yank -- Highlight on yank
local highlight_group = vim.api.nvim_create_augroup("YankHighlight", { clear = true })
vim.api.nvim_create_autocmd("TextYankPost", { vim.api.nvim_create_autocmd("TextYankPost", {
callback = function() callback = function()
vim.highlight.on_yank({ higroup = "YankHighlight" }) vim.highlight.on_yank({ higroup = "YankHighlight" })
end, end,
group = highlight_group,
pattern = "*",
}) })
-- show cursor line only in active window -- show cursor line only in active window
local cursor_group = vim.api.nvim_create_augroup("ActiveCursor", { clear = true })
vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, { vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
callback = function() callback = function()
local ok, cl = pcall(vim.api.nvim_win_get_var, 0, "auto-cursorline") local ok, cl = pcall(vim.api.nvim_win_get_var, 0, "auto-cursorline")
@@ -18,8 +14,6 @@ vim.api.nvim_create_autocmd({ "InsertLeave", "WinEnter" }, {
vim.api.nvim_win_del_var(0, "auto-cursorline") vim.api.nvim_win_del_var(0, "auto-cursorline")
end end
end, end,
group = cursor_group,
pattern = "*",
}) })
vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, { vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
callback = function() callback = function()
@@ -29,6 +23,4 @@ vim.api.nvim_create_autocmd({ "InsertEnter", "WinLeave" }, {
vim.wo.cursorline = false vim.wo.cursorline = false
end end
end, end,
group = cursor_group,
pattern = "*",
}) })

View File

@@ -7,17 +7,6 @@ vim.keymap.set({ "n", "v" }, "<Space>", "<Nop>", { noremap = true, silent = true
vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true }) vim.keymap.set("n", "k", "v:count == 0 ? 'gk' : 'k'", { expr = true, silent = true })
vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true }) vim.keymap.set("n", "j", "v:count == 0 ? 'gj' : 'j'", { expr = true, silent = true })
-- Keybinds for resizing windows
vim.keymap.set("n", "<S-Up>", "<cmd>resize +2<CR>")
vim.keymap.set("n", "<S-Down>", "<cmd>resize -2<CR>")
vim.keymap.set("n", "<S-Left>", "<cmd>vertical resize -2<CR>")
vim.keymap.set("n", "<S-Right>", "<cmd>vertical resize +2<CR>")
-- Diagnostic keymaps
vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, { desc = "Go to previous diagnostic message" })
vim.keymap.set("n", "]d", vim.diagnostic.goto_next, { desc = "Go to next diagnostic message" })
vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, { desc = "Open floating diagnostic message" })
-- Some nice adjustments -- Some nice adjustments
vim.keymap.set("n", "<C-d>", "<C-d>zz") vim.keymap.set("n", "<C-d>", "<C-d>zz")
vim.keymap.set("n", "<C-u>", "<C-u>zz") vim.keymap.set("n", "<C-u>", "<C-u>zz")
@@ -26,3 +15,16 @@ vim.keymap.set("n", "N", "Nzz")
-- Clear search highlight by pressing esc -- Clear search highlight by pressing esc
vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>") vim.keymap.set("n", "<Esc>", "<cmd>nohlsearch<CR>")
vim.api.nvim_create_autocmd("FileType", {
pattern = { "rust" },
callback = function(args)
local command = {
rust = "cargo run",
}
vim.keymap.set("n", "<F5>", function()
vim.system({ "tmux", "send-keys", "-t", ":shell", "c-u", command[args.match], "Enter" })
vim.system({ "tmux", "select-window", "-t", ":shell" })
end, { buffer = true })
end,
})

View File

@@ -0,0 +1,157 @@
local diagnostic = require("symbols.diagnostic")
local methods = vim.lsp.protocol.Methods
local map = function(keys, func, desc, mode, bufnr)
mode = mode or "n"
vim.keymap.set(mode, keys, func, { desc = desc, buffer = bufnr })
end
-- General keymaps
map("[d", function()
vim.diagnostic.jump({ count = -1 })
end, "Go to previous diagnostic message")
map("]d", function()
vim.diagnostic.jump({ count = 1 })
end, "Go to next diagnostic message")
map("[e", function()
vim.diagnostic.jump({ count = -1, severity = vim.diagnostic.severity.ERROR })
end, "Go to previous error message")
map("]e", function()
vim.diagnostic.jump({ count = 1, severity = vim.diagnostic.severity.ERROR })
end, "Go to next error message")
map("<leader>e", vim.diagnostic.open_float, "Open floating diagnostic message")
map("<leader>th", function()
vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled())
end, "Toggle inlay hints")
map("gra", function()
require("actions-preview").code_actions()
end, "Code actions", { "n", "x" })
map("grD", vim.lsp.buf.declaration, "Goto declaration")
map("grd", function()
require("telescope.builtin").lsp_definitions({ jump_type = "never" })
end, "Goto definition")
map("grt", function()
require("telescope.builtin").lsp_type_definitions()
end, "Type definition")
map("grr", function()
require("telescope.builtin").lsp_references()
end, "Goto references")
map("gri", function()
require("telescope.builtin").lsp_implementations()
end, "Goto implementation")
map("<leader>ss", function()
require("telescope.builtin").lsp_document_symbols()
end, "Document symbols")
map("<leader>sS", function()
require("telescope.builtin").lsp_dynamic_workspace_symbols()
end, "Workspace symbols")
-- Provide a placeholder rename keymap, otherwise the rename appears to works until you hit enter at which point it will fail
map("grn", function()
vim.api.nvim_echo({ { "Rename are not available in current buffer" } }, true, { err = true })
end, "Rename")
---@param client vim.lsp.Client
---@param bufnr integer
local function on_attach(client, bufnr)
-- Setup actual rename keymap if it is available
if client:supports_method(methods.textDocument_rename, bufnr) then
vim.keymap.set("n", "grn", function()
return ":IncRename " .. vim.fn.expand("<cword>")
end, { buffer = bufnr, expr = true, desc = "Rename" })
end
-- Disable lsp based syntax highlighting, I don't like it
-- TODO: Switch to this once it is available
-- vim.lsp.document_color.enable(false, bufnr)
if client.server_capabilities.semanticTokensProvider then
client.server_capabilities.semanticTokensProvider = nil
end
-- Highlight references under cursor
if client:supports_method(methods.textDocument_documentHighlight) then
local lsp_hover_hl = vim.api.nvim_create_augroup("LspHoverHighlight", { clear = false })
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
buffer = bufnr,
group = lsp_hover_hl,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
buffer = bufnr,
group = lsp_hover_hl,
callback = vim.lsp.buf.clear_references,
})
end
end
vim.diagnostic.config({
severity_sort = true,
signs = {
numhl = {
[vim.diagnostic.severity.ERROR] = "DiagnosticNumError",
[vim.diagnostic.severity.WARN] = "DiagnosticNumWarn",
[vim.diagnostic.severity.HINT] = "DiagnosticNumHint",
[vim.diagnostic.severity.INFO] = "DiagnosticNumInfo",
},
text = {
[vim.diagnostic.severity.ERROR] = "",
[vim.diagnostic.severity.WARN] = "",
[vim.diagnostic.severity.HINT] = "",
[vim.diagnostic.severity.INFO] = "",
},
},
float = {
severity_sort = false,
header = "",
suffix = function(d)
local code = d.code and string.format(" (%s)", d.code) or ""
return string.format("%s [%s]", code, d.source), "NormalFloat"
end,
},
virtual_text = {
prefix = function(d)
return diagnostic[d.severity]
end,
virt_text_pos = "eol_right_align",
},
})
local register_capability = vim.lsp.handlers[methods.client_registerCapability]
vim.lsp.handlers[methods.client_registerCapability] = function(err, res, ctx)
local client = vim.lsp.get_client_by_id(ctx.client_id)
if not client then
return
end
on_attach(client, vim.api.nvim_get_current_buf())
return register_capability(err, res, ctx)
end
vim.api.nvim_create_autocmd("LspAttach", {
desc = "Configure LSP keymaps",
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
if not client then
return
end
on_attach(client, args.buf)
end,
})
-- Manually enable lsps, if installed
if vim.fn.executable("rust_analyzer") then
vim.lsp.enable("rust_analyzer")
end
if vim.fn.executable("vtsls") then
vim.lsp.enable("vtsls")
end

View File

@@ -0,0 +1,57 @@
---@class schema_companion.Source
local M = {}
M.name = "Kubernetes"
M.config = {}
---@param config {}
---@return schema_companion.Source
function M.setup(config)
setmetatable(M, {})
M.config = vim.tbl_deep_extend("force", {}, M.config, config)
return M
end
function M:match(_, bufnr)
local resources = {}
local current = {}
for _, line in pairs(vim.api.nvim_buf_get_lines(bufnr, 0, -1, false)) do
local _, _, group, version = line:find([[^apiVersion:%s*["']?([^%s"'/]*)/?([^%s"']*)]])
local _, _, kind = line:find([[^kind:%s*["']?([^%s"'/]*)]])
if group and group ~= "" then
current.group = group
end
if version and version ~= "" then
current.version = version
end
if kind and kind ~= "" then
current.kind = kind
end
if current.group and current.kind then
table.insert(resources, current)
current = {}
end
end
local schemas = {}
for _, resource in pairs(resources) do
local api = resource.version and ("%s/%s"):format(resource.group, resource.version) or resource.group
local schema = {
name = ("%s@%s"):format(resource.kind, api),
source = M.name,
uri = require("kubernetes").yamlls_schema(),
}
if schema then
table.insert(schemas, schema)
end
end
return schemas
end
return M

View File

@@ -1,3 +1,5 @@
local window = require("symbols.window")
-- Set highlight on search -- Set highlight on search
vim.o.hlsearch = true vim.o.hlsearch = true
@@ -39,7 +41,7 @@ vim.o.termguicolors = true
-- Default tab settings -- Default tab settings
-- Tab settings are automatically detected by vim-sleuth -- Tab settings are automatically detected by vim-sleuth
-- Can be overriden by .editorconfig and modeline -- Can be overridden by .editorconfig and modeline
vim.o.tabstop = 4 vim.o.tabstop = 4
vim.o.softtabstop = 4 vim.o.softtabstop = 4
vim.o.shiftwidth = 4 vim.o.shiftwidth = 4
@@ -57,3 +59,13 @@ vim.o.showmode = false
-- Minimum number of screen lines above and below the cursor -- Minimum number of screen lines above and below the cursor
vim.o.scrolloff = 10 vim.o.scrolloff = 10
-- Highlight tabs and trailing whitespace
vim.o.listchars = "trail:~,tab:¦⁃,nbsp:␣"
vim.o.list = true
-- Fold settings
vim.o.foldlevelstart = 99
-- Windows borders
vim.o.winborder = window.border

View File

@@ -0,0 +1,28 @@
-- https://github.com/aznhe21/actions-preview.nvim
--- @module "lazy"
--- @type LazySpec
return {
"aznhe21/actions-preview.nvim",
opts = function()
local hl = require("actions-preview.highlight")
return {
backend = { "telescope" },
highlight_command = {
hl.delta(),
},
telescope = {
sorting_strategy = "ascending",
layout_strategy = "vertical",
layout_config = {
width = 0.8,
height = 0.9,
prompt_position = "top",
preview_cutoff = 20,
preview_height = function(_, _, max_lines)
return max_lines - 15
end,
},
},
}
end,
}

View File

@@ -1,6 +1,31 @@
-- https://github.com/windwp/nvim-autopairs -- https://github.com/altermo/ultimate-autopair.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"windwp/nvim-autopairs", "altermo/ultimate-autopair.nvim",
event = "InsertEnter", event = { "InsertEnter", "CmdlineEnter" },
config = true, branch = "v0.6",
--- @module "ultimate-autopair"
--- @type prof.def.conf
opts = {
fastwarp = {
faster = true,
},
-- Fix single quotes in rust
config_internal_pairs = {
{
"'",
"'",
multiline = false,
nft = {},
suround = true,
cond = function(fn)
if fn.get_ft() ~= "rust" then
return true
end
return not fn.in_node({ "bounded_type", "reference_type", "type_arguments", "type_parameters" })
end,
},
},
},
} }

View File

@@ -0,0 +1,115 @@
-- https://github.com/saghen/blink.cmp
--- @module "lazy"
--- @type LazySpec
return {
"saghen/blink.cmp",
dependencies = { "rafamadriz/friendly-snippets" },
event = "InsertEnter",
-- use a release tag to download pre-built binaries
version = "1.*",
--- @module "blink-cmp"
--- @type blink.cmp.Config
opts = {
keymap = {
preset = "default",
["<C-space>"] = { "show", "show_documentation", "hide_documentation" },
["<C-u>"] = { "scroll_documentation_up" },
["<C-d>"] = { "scroll_documentation_down" },
["<CR>"] = { "accept", "fallback" },
["<Esc>"] = {
function(cmp)
if cmp.is_visible() then
cmp.cancel()
if cmp.get_selected_item_idx() ~= nil or cmp.snippet_active() then
return true
end
elseif cmp.snippet_active() then
vim.snippet.stop()
end
end,
"fallback",
},
["<Tab>"] = { "select_next", "snippet_forward", "fallback" },
["<S-Tab>"] = { "select_prev", "snippet_backward", "fallback" },
["<Up>"] = { "select_prev", "fallback" },
["<Down>"] = { "select_next", "fallback" },
["<C-p>"] = { "select_prev", "fallback_to_mappings" },
["<C-n>"] = { "select_next", "fallback_to_mappings" },
["<C-k>"] = { "show_signature", "hide_signature", "fallback" },
},
appearance = {
nerd_font_variant = "normal",
},
completion = {
ghost_text = {
enabled = true,
},
list = {
selection = {
preselect = false,
},
},
documentation = {
auto_show = true,
auto_show_delay_ms = 0,
},
menu = {
auto_show = true,
draw = {
columns = {
{ "label", "label_description", gap = 1 },
{ "kind", "source_name", gap = 1 },
},
components = {
source_name = {
text = function(ctx)
if ctx.source_id ~= "snippets" then
return "[" .. ctx.source_name .. "]"
end
end,
},
},
},
},
},
signature = {
enabled = true,
trigger = {
show_on_accept = true,
show_on_insert = true,
},
},
sources = {
default = {
"lazydev",
"lsp",
"path",
"snippets",
"buffer",
},
providers = {
lazydev = {
name = "LazyDev",
module = "lazydev.integrations.blink",
score_offset = 100,
},
},
},
cmdline = {
enabled = false,
},
fuzzy = { implementation = "prefer_rust_with_warning" },
},
opts_extend = { "sources.default" },
}

View File

@@ -1,23 +0,0 @@
-- https://github.com/ojroques/nvim-bufdel
return {
'ojroques/nvim-bufdel',
cmd = { "BufDel", "BuffDelOthers" },
keys = {
{
'<leader>bd',
function()
require('bufdel').delete_buffer_expr(nil, false)
end,
silent = true,
desc = '[B]uffer [d]elete'
},
{
'<leader>bD',
function()
require('bufdel').delete_buffer_others(false)
end,
silent = true,
desc = '[B]uffer [D]elete others'
},
},
}

View File

@@ -2,61 +2,53 @@
local diagnostic = require("symbols.diagnostic") local diagnostic = require("symbols.diagnostic")
local file = require("symbols.file") local file = require("symbols.file")
--- @module "lazy"
--- @type LazySpec
return { return {
"akinsho/bufferline.nvim", "akinsho/bufferline.nvim",
version = "v3.*", --- @module "bufferline"
dependencies = { --- @type bufferline.UserConfig
"ojroques/nvim-bufdel", opts = {
options = {
show_buffer_icons = false,
show_buffer_close_icons = false,
diagnostics = "nvim_lsp",
separator_style = "thick",
left_trunc_marker = "",
right_trunc_marker = "",
sort_by = "insert_at_end",
indicator = {
style = "none",
},
modified_icon = file.modified,
---@diagnostic disable-next-line: unused-local
diagnostics_indicator = function(count, level, diagnostics_dict, context)
local s = " "
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and diagnostic.error .. " "
or (e == "warning" and diagnostic.warn .. " ")
or (e == "info" and diagnostic.info .. " " or diagnostic.hint .. " ")
s = s .. n .. sym
end
return s
end,
},
}, },
config = function() init = function()
-- Enable mousemoveevent if possible
vim.o.mousemoveevent = true
local bufferline = require("bufferline")
-- Setup keybinds to move between buffers -- Setup keybinds to move between buffers
vim.keymap.set("n", "<tab>", function() vim.keymap.set("n", "<tab>", function()
bufferline.cycle(1) require("bufferline").cycle(1)
end, { silent = true, desc = "Goto next buffer" }) end, { silent = true, desc = "Goto next buffer" })
vim.keymap.set("n", "<S-tab>", function() vim.keymap.set("n", "<S-tab>", function()
bufferline.cycle(-1) require("bufferline").cycle(-1)
end, { silent = true, desc = "Goto previous buffer" }) end, { silent = true, desc = "Goto previous buffer" })
-- Setup keybinds to move buffers around -- Setup keybinds to move buffers around
vim.keymap.set("n", "<leader>b[", function() vim.keymap.set("n", "<leader>b[", function()
bufferline.move(-1) require("bufferline").move(-1)
end, { silent = true, desc = "[B]uffer to the [ left" }) end, { silent = true, desc = "Move buffer to left" })
vim.keymap.set("n", "<leader>b]", function() vim.keymap.set("n", "<leader>b]", function()
bufferline.move(1) require("bufferline").move(1)
end, { silent = true, desc = "[B]uffer to the ] right" }) end, { silent = true, desc = "Move buffer to right" })
bufferline.setup({
options = {
show_buffer_icons = false,
show_buffer_close_icons = true,
diagnostics = "nvim_lsp",
close_command = "BufDel %d",
right_mouse_command = "BufDel %d",
separator_style = "thick",
left_trunc_marker = "",
right_trunc_marker = "",
sort_by = "insert_at_end",
indicator = {
style = "none",
},
modified_icon = file.modified,
---@diagnostic disable-next-line: unused-local
diagnostics_indicator = function(count, level, diagnostics_dict, context)
local s = " "
for e, n in pairs(diagnostics_dict) do
local sym = e == "error" and diagnostic.error .. " "
or (e == "warning" and diagnostic.warn .. " ")
or (e == "info" and diagnostic.info .. " " or diagnostic.hint .. " ")
s = s .. n .. sym
end
return s
end,
},
})
end, end,
} }

View File

@@ -1,4 +1,6 @@
-- https://github.com/kwkarlwang/bufresize.nvim -- https://github.com/kwkarlwang/bufresize.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"kwkarlwang/bufresize.nvim", "kwkarlwang/bufresize.nvim",
opts = {}, opts = {},

View File

@@ -1,115 +0,0 @@
-- https://github.com/hrsh7th/nvim-cmp
return {
{
-- Autocompletion
"hrsh7th/nvim-cmp",
dependencies = {
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-path",
"onsails/lspkind-nvim",
-- Improve sorting order for rust
"zjp-CN/nvim-cmp-lsp-rs",
-- Snippets
"L3MON4D3/LuaSnip",
"saadparwaiz1/cmp_luasnip",
},
config = function()
local cmp = require("cmp")
local luasnip = require("luasnip")
local lspkind = require("lspkind")
local border = require("symbols.window").border
local cmp_rs = require("cmp_lsp_rs")
local comparators = cmp_rs.comparators
cmp.setup({
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
completion = { completeopt = "menu,menuone,noinsert" },
window = {
completion = cmp.config.window.bordered({
border = border,
winhighlight = "CursorLine:CmpSelection",
}),
documentation = cmp.config.window.bordered({ border = border }),
},
-- Include the source of the cmp entry
formatting = {
format = lspkind.cmp_format({
mode = "text",
menu = {
nvim_lsp = "LSP",
luasnip = "LuaSnip",
path = "Path",
},
}),
},
mapping = cmp.mapping.preset.insert({
["<C-u>"] = cmp.mapping.scroll_docs(-4),
["<C-d>"] = cmp.mapping.scroll_docs(4),
["<C-Space>"] = cmp.mapping.complete({}),
["<CR>"] = cmp.mapping.confirm({
select = true,
}),
["<Esc>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.abort()
else
fallback()
end
end, { "i", "s" }),
["<Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
}),
sorting = {
comparators = {
comparators.inherent_import_inscope,
comparators.sort_by_label_but_underscore_last,
},
},
sources = {
{ name = "nvim_lsp" },
{ name = "luasnip" },
{ name = "path" },
},
})
end,
},
{
"L3MON4D3/LuaSnip",
build = function()
if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
return
end
return "make install_jsregexp"
end,
config = function()
require("luasnip").config.setup()
-- require("luasnip.loaders.from_vscode").lazy_load()
end,
dependencies = {
-- "rafamadriz/friendly-snippets",
},
},
}

View File

@@ -1,8 +1,10 @@
-- https://github.com/NvChad/nvim-colorizer.lua -- https://github.com/NvChad/nvim-colorizer.lua
--- @module "lazy"
--- @type LazySpec
return { return {
"NvChad/nvim-colorizer.lua", "NvChad/nvim-colorizer.lua",
event = "VeryLazy",
opts = { opts = {
lazy_load = true,
filetypes = { filetypes = {
"*", -- Enable color highlighting for all files "*", -- Enable color highlighting for all files
"!neo-tree", -- Exclude neo-tree "!neo-tree", -- Exclude neo-tree
@@ -17,16 +19,4 @@ return {
names = false, names = false,
}, },
}, },
-- Fix lazy loading: https://github.com/NvChad/nvim-colorizer.lua
config = function(_, opts)
local colorizer = require("colorizer")
colorizer.setup(opts)
-- nvim-colorizer doesn't work on the initial buffer if we lazy load, so force it to attach
-- on load.
local bufnr = vim.api.nvim_get_current_buf()
if bufnr and not colorizer.is_buffer_attached(bufnr) then
colorizer.attach_to_buffer(bufnr)
end
end,
} }

View File

@@ -1,6 +1,17 @@
-- https://github.com/numToStr/Comment.nvim -- https://github.com/numToStr/Comment.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
'numToStr/Comment.nvim', "numToStr/Comment.nvim",
event = "VeryLazy", event = "VeryLazy",
opts = {}, --- @module "Comment"
--- @type CommentConfig
opts = {
toggler = {
block = "gBc",
},
opleader = {
block = "gB",
},
},
} }

View File

@@ -1,11 +1,28 @@
-- https://github.com/stevearc/conform.nvim -- https://github.com/stevearc/conform.nvim
local formatters_by_ft = {
c = { "clang-format" },
cpp = { "clang-format" },
go = { "goimports" },
python = { "ruff_organize_imports", "ruff_format" },
rust = { "rustfmt" },
javascript = { "prettier" },
javascriptreact = { "prettier" },
typescript = { "prettier" },
typescriptreact = { "prettier" },
css = { "prettier" },
markdown = { "prettier" },
yaml = { "prettier" },
lua = { "stylua" },
json = { "prettier" },
toml = { "taplo" },
-- ["*"] = { "injected" },
["_"] = { "trim_whitespace", "trim_newlines" },
}
local slow_format_filetypes = {} --- @module "lazy"
--- @type LazySpec
return { return {
"stevearc/conform.nvim", "stevearc/conform.nvim",
dependencies = {
"williamboman/mason.nvim",
},
event = { "BufWritePre" }, event = { "BufWritePre" },
cmd = { "ConformInfo" }, cmd = { "ConformInfo" },
keys = { keys = {
@@ -16,35 +33,21 @@ return {
require("conform").format({ async = true, lsp_fallback = true }) require("conform").format({ async = true, lsp_fallback = true })
end, end,
mode = "", mode = "",
desc = "[F]ormat buffer", desc = "Format buffer",
}, },
}, },
--- @module "conform"
--- @type conform.setupOpts
opts = { opts = {
formatters_by_ft = require("tools").formatters, formatters_by_ft = formatters_by_ft,
notify_on_error = false,
format_on_save = function(bufnr) format_on_save = function(bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return return
end end
if slow_format_filetypes[vim.bo[bufnr].filetype] then --- @type conform.FormatOpts
return return { lsp_format = "fallback" }
end
local function on_format(err)
if err and err:match("timeout$") then
slow_format_filetypes[vim.bo[bufnr].filetype] = true
end
end
return { timeout_ms = 200, lsp_fallback = true }, on_format
end, end,
format_after_save = function(bufnr)
if vim.g.disable_autoformat or vim.b[bufnr].disable_autoformat then
return
end
if not slow_format_filetypes[vim.bo[bufnr].filetype] then
return
end
return { lsp_fallback = true }
end,
-- log_level = vim.log.levels.DEBUG,
}, },
init = function() init = function()
vim.api.nvim_create_user_command("FormatDisable", function(args) vim.api.nvim_create_user_command("FormatDisable", function(args)
@@ -58,6 +61,7 @@ return {
desc = "Disable autoformat-on-save", desc = "Disable autoformat-on-save",
bang = true, bang = true,
}) })
vim.api.nvim_create_user_command("FormatEnable", function() vim.api.nvim_create_user_command("FormatEnable", function()
vim.b.disable_autoformat = false vim.b.disable_autoformat = false
vim.g.disable_autoformat = false vim.g.disable_autoformat = false

View File

@@ -0,0 +1,21 @@
-- https://github.com/Saecki/crates.nvim
--- @module "lazy"
--- @type LazySpec
return {
"Saecki/crates.nvim",
event = { "BufRead Cargo.toml" },
tag = "stable",
--- @type crates.UserConfig
opts = {
popup = {
hide_on_select = true,
border = require("symbols.window").border,
},
lsp = {
enabled = true,
actions = true,
completion = true,
hover = true,
},
},
}

View File

@@ -0,0 +1,102 @@
-- https://github.com/mfussenegger/nvim-dap
--- @module "lazy"
--- @type LazySpec
return {
{
enabled = false,
"mfussenegger/nvim-dap",
config = function()
local dap = require("dap")
dap.adapters.cppdbg = {
id = "cppdbg",
type = "executable",
command = "OpenDebugAD7",
}
dap.configurations.cpp = {
{
name = "Launch file",
type = "cppdbg",
request = "launch",
program = function()
return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
end,
cwd = "${workspaceFolder}",
-- stopAtEntry = true,
},
-- {
-- name = "Attach to gdbserver :1234",
-- type = "cppdbg",
-- request = "launch",
-- MIMode = "gdb",
-- miDebuggerServerAddress = "localhost:1234",
-- miDebuggerPath = "/usr/bin/gdb",
-- cwd = "${workspaceFolder}",
--
-- program = function()
-- return vim.fn.input("Path to executable: ", vim.fn.getcwd() .. "/", "file")
-- end,
-- },
}
dap.configurations.c = dap.configurations.cpp
dap.configurations.rust = dap.configurations.cpp
dap.defaults.fallback.force_external_terminal = true
dap.defaults.fallback.external_terminal = {
command = "tmux",
args = { "new-window" },
}
vim.keymap.set("n", "<F5>", function()
require("dap").continue()
end, { desc = "Continue" })
vim.keymap.set("n", "<F10>", function()
require("dap").step_over()
end, { desc = "Step over" })
vim.keymap.set("n", "<F11>", function()
require("dap").step_into()
end, { desc = "Step into" })
vim.keymap.set("n", "<F12>", function()
require("dap").step_out()
end, { desc = "Step out" })
vim.keymap.set("n", "<Leader>bp", function()
require("dap").toggle_breakpoint()
end, { desc = "Breakpoint" })
-- vim.keymap.set("n", "<Leader>lp", function()
-- require("dap").set_breakpoint(nil, nil, vim.fn.input("Log point message: "))
-- end)
vim.keymap.set("n", "<Leader>dr", function()
require("dap").repl.open()
end, { desc = "Debug repl" })
-- vim.keymap.set("n", "<Leader>dl", function()
-- require("dap").run_last()
-- end)
vim.keymap.set({ "n", "v" }, "<Leader>dh", function()
require("dap.ui.widgets").hover()
end, { desc = "Debug hover" })
vim.keymap.set("n", "<Leader>df", function()
local widgets = require("dap.ui.widgets")
widgets.centered_float(widgets.frames)
end, { desc = "Debug frames" })
vim.api.nvim_create_autocmd("FileType", {
pattern = "dap-float",
callback = function()
vim.api.nvim_buf_set_keymap(0, "n", "q", "<cmd>close!<CR>", { noremap = true, silent = true })
end,
})
end,
},
{
enabled = false,
"theHamsta/nvim-dap-virtual-text",
dependencies = {
"mfussenegger/nvim-dap",
},
opts = {
virt_text_pos = "eol",
only_first_definition = false,
},
},
}

View File

@@ -0,0 +1,20 @@
-- https://github.com/jinh0/eyeliner.nvim
--- @module "lazy"
--- @type LazySpec
return {
"jinh0/eyeliner.nvim",
dependencies = {
{
"ellisonleao/gruvbox.nvim",
opts = {
overrides = {
EyelinerPrimary = { bold = true, underline = true },
EyelinerSecondary = { underline = true },
},
},
},
},
opts = {
highlight_on_key = true,
},
}

View File

@@ -1,5 +1,9 @@
-- https://github.com/j-hui/fidget.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"j-hui/fidget.nvim", "j-hui/fidget.nvim",
event = "LspAttach",
opts = { opts = {
notification = { notification = {
window = { window = {

View File

@@ -1,6 +1,12 @@
-- https://github.com/lewis6991/gitsigns.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
-- Adds git related signs to the gutter, as well as utilities for managing changes -- Adds git related signs to the gutter, as well as utilities for managing changes
"lewis6991/gitsigns.nvim", "lewis6991/gitsigns.nvim",
event = { "BufWritePost", "BufReadPre" },
--- @module "gitsigns"
--- @type Gitsigns.Config
opts = { opts = {
signs = { signs = {
add = { text = "+" }, add = { text = "+" },
@@ -8,38 +14,60 @@ return {
delete = { text = "_" }, delete = { text = "_" },
topdelete = { text = "" }, topdelete = { text = "" },
changedelete = { text = "~" }, changedelete = { text = "~" },
untracked = { text = "|" },
},
signs_staged = {
add = { text = "+" },
change = { text = "~" },
delete = { text = "_" },
topdelete = { text = "" },
changedelete = { text = "~" },
untracked = { text = "|" },
},
attach_to_untracked = true,
current_line_blame_opts = {
virt_text_pos = "eol",
virt_text_priority = 1,
delay = 200,
}, },
}, },
init = function() init = function()
vim.keymap.set("n", "<leader>gs", require("gitsigns.actions").stage_hunk, { desc = "[G]it [S]tage hunk" }) vim.keymap.set("n", "gs", function()
vim.keymap.set("v", "<leader>gs", function() require("gitsigns.actions").stage_hunk()
end, { desc = "(Un)stage hunk" })
vim.keymap.set("n", "gS", function()
require("gitsigns.actions").stage_buffer()
end, { desc = "Stage buffer" })
vim.keymap.set("v", "gs", function()
require("gitsigns.actions").stage_hunk({ vim.fn.line("."), vim.fn.line("v") }) require("gitsigns.actions").stage_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, { desc = "[G]it [S]tage selection" }) end, { desc = "(Un)stage selection" })
vim.keymap.set( vim.keymap.set("n", "gd", function()
"n", require("gitsigns.actions").preview_hunk()
"<leader>gS", end, { desc = "Diff hunk" })
require("gitsigns.actions").undo_stage_hunk,
{ desc = "[G]it undo [S]tage hunk" }
)
vim.keymap.set( vim.keymap.set("n", "<leader>tb", function()
"n", require("gitsigns.actions").toggle_current_line_blame()
"<leader>gd", end, { desc = "Line blame" })
require("gitsigns.actions").preview_hunk_inline, vim.keymap.set("n", "gb", function()
{ desc = "[G]it [D]iff hunk" } require("gitsigns.actions").blame_line()
) end, { desc = "View blame" })
vim.keymap.set("n", "<leader>gr", require("gitsigns.actions").reset_hunk, { desc = "[G]it [R]eset hunk" }) vim.keymap.set("n", "<leader>gr", function()
require("gitsigns.actions").reset_hunk()
end, { desc = "Reset hunk" })
vim.keymap.set("n", "<leader>gR", function()
require("gitsigns.actions").reset_buffer()
end, { desc = "Reset buffer" })
vim.keymap.set("v", "<leader>gr", function() vim.keymap.set("v", "<leader>gr", function()
require("gitsigns.actions").reset_hunk({ vim.fn.line("."), vim.fn.line("v") }) require("gitsigns.actions").reset_hunk({ vim.fn.line("."), vim.fn.line("v") })
end, { desc = "[G]it [R]eset selection" }) end, { desc = "Git reset selection" })
vim.keymap.set("n", "]g", function() vim.keymap.set("n", "]g", function()
require("gitsigns.actions").nav_hunk("next") require("gitsigns.actions").nav_hunk("next")
end, { desc = "Go to next hunk" }) end, { desc = "Next hunk" })
vim.keymap.set("n", "[g", function() vim.keymap.set("n", "[g", function()
require("gitsigns.actions").nav_hunk("prev") require("gitsigns.actions").nav_hunk("prev")
end, { desc = "Go to previous hunk" }) end, { desc = "Previous hunk" })
end, end,
} }

View File

@@ -1,12 +1,11 @@
-- https://github.com/NMAC427/guess-indent.nvim -- https://github.com/NMAC427/guess-indent.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
-- Adds a command to automatically detect the identation settings "NMAC427/guess-indent.nvim",
-- Prefer to use .editorconfig for projects and modeline for files cmd = "GuessIndent",
'NMAC427/guess-indent.nvim', event = { "BufReadPre" },
keys = { --- @module "guess-indent"
{ "<leader>gi", "<cmd>GuessIndent<cr>", desc = "[G]uess [I]ndentation" }, --- @type GuessIndentConfig
}, opts = {},
opts = {
auto_cmd = false,
},
} }

View File

@@ -1,6 +1,13 @@
-- https://github.com/smjonas/inc-rename.nvim -- https://github.com/smjonas/inc-rename.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"smjonas/inc-rename.nvim", "smjonas/inc-rename.nvim",
cmd = "IncRename",
-- We can't load on just the command otherwise the preview does not work
event = "LspAttach",
--- @module "inc_rename"
--- @type inc_rename.UserConfig
opts = { opts = {
preview_empty_name = true, preview_empty_name = true,
}, },

View File

@@ -1,14 +0,0 @@
-- https://github.com/lukas-reineke/indent-blankline.nvim
return {
-- Add indentation guides even on blank lines
"lukas-reineke/indent-blankline.nvim",
-- Enable `lukas-reineke/indent-blankline.nvim`
-- See `:help indent_blankline.txt`
main = "ibl",
opts = {
indent = {
char = "¦",
},
scope = { enabled = true, show_start = false, show_end = false },
},
}

View File

@@ -0,0 +1,11 @@
-- https://github.com/diogo464/kubernetes.nvim
--- @module "lazy"
--- @type LazySpec
return {
"diogo464/kubernetes.nvim",
ft = "yaml",
opts = {
schema_strict = true,
schema_generate_always = false,
},
}

View File

@@ -0,0 +1,16 @@
-- https://github.com/folke/lazydev.nvim
--- @module "lazy"
--- @type LazySpec
return {
"folke/lazydev.nvim",
ft = "lua",
--- @module "lazydev"
--- @type lazydev.Config
opts = {
library = {
-- See the configuration section for more details
-- Load luvit types when the `vim.uv` word is found
{ path = "${3rd}/luv/library", words = { "vim%.uv" } },
},
},
}

View File

@@ -1,124 +0,0 @@
return {
-- LSP Configuration & Plugins
"neovim/nvim-lspconfig",
dependencies = {
"williamboman/mason.nvim",
"williamboman/mason-lspconfig.nvim",
"WhoIsSethDaniel/mason-tool-installer.nvim",
-- Some of the lsp keybindings rely on telescope
"nvim-telescope/telescope.nvim",
-- Set capabilities from cmp
"hrsh7th/cmp-nvim-lsp",
-- Additional lua configuration, makes nvim stuff amazing!
{ "folke/neodev.nvim", opts = {} },
-- Add document color
"mrshmllow/document-color.nvim",
"b0o/schemastore.nvim",
-- Rename with immediate visual feedback
},
config = function()
local border = require("symbols.window").border
-- Set borders
local handlers = {
["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, { border = border }),
["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, { border = border }),
}
require("lspconfig.ui.windows").default_options = {
border = border,
}
vim.diagnostic.config({
severity_sort = true,
})
-- Create the signs for diagnostic symbols
local diagnostic = require("symbols.diagnostic")
local signs = {
Error = diagnostic.error,
Warn = diagnostic.warn,
Hint = diagnostic.hint,
Info = diagnostic.info,
}
for type, icon in pairs(signs) do
local hl_sign = "DiagnosticSign" .. type
local hl_text = "Diagnostic" .. type
vim.fn.sign_define(hl_sign, { text = icon, texthl = hl_sign, numhl = hl_text })
end
vim.api.nvim_create_autocmd("LspAttach", {
group = vim.api.nvim_create_augroup("LspAttach", { clear = true }),
callback = function(event)
local map = function(keys, func, desc)
vim.keymap.set("n", keys, func, { buffer = event.buf, desc = "LSP:" .. desc })
end
map("gd", vim.lsp.buf.definition, "[G]oto [D]efinition")
map("gr", require("telescope.builtin").lsp_references, "[G]oto [R]eferences")
map("gI", require("telescope.builtin").lsp_implementations, "[G]oto [I]mplementation")
map("<leader>D", vim.lsp.buf.type_definition, "Type [D]efinition")
map("<leader>ds", require("telescope.builtin").lsp_document_symbols, "[D]ocument [S]symbols")
map("<leader>ws", require("telescope.builtin").lsp_dynamic_workspace_symbols, "[W]orkspace [S]symbols")
vim.keymap.set("n", "<leader>rn", function()
return ":IncRename " .. vim.fn.expand("<cword>")
end, { buffer = event.buf, expr = true, desc = "LSP: [R]e[N]ame" })
-- TODO: Do we need this to work in visal mode?
vim.keymap.set(
{ "v", "n" },
"<leader>ca",
vim.lsp.buf.code_action,
{ buffer = event.buf, desc = "LSP: [C]ode [A]ction", remap = true }
)
-- Signature help
map("K", vim.lsp.buf.hover, "Hover Documentation")
map("<C-k>", vim.lsp.buf.signature_help, "Signature Documentation")
-- Lesser used LSP functionality
map("gD", vim.lsp.buf.declaration, "[G]oto [D]eclaration")
local client = vim.lsp.get_client_by_id(event.data.client_id)
-- Turn of lsp based syntax highlighting
client.server_capabilities.semanticTokensProvider = nil
if client and client.server_capabilities.documentHighlightProvider then
vim.api.nvim_create_autocmd({ "CursorHold", "CursorHoldI" }, {
buffer = event.buf,
callback = vim.lsp.buf.document_highlight,
})
vim.api.nvim_create_autocmd({ "CursorMoved", "CursorMovedI" }, {
buffer = event.buf,
callback = vim.lsp.buf.clear_references,
})
end
end,
})
local capabilities = vim.lsp.protocol.make_client_capabilities()
-- TODO: Only do this is cmp_nvim_lsp is enabled
capabilities = vim.tbl_deep_extend("force", capabilities, require("cmp_nvim_lsp").default_capabilities())
capabilities.textDocument.colorProvider = {
dynamicRegistration = true,
}
require("mason-lspconfig").setup({
handlers = {
function(server_name)
local server = require("tools").servers[server_name] or {}
server.capabilities = vim.tbl_deep_extend("force", capabilities, server.capabilities or {})
server.handlers = handlers
require("lspconfig")[server_name].setup(server)
end,
},
})
end,
}

View File

@@ -1,14 +0,0 @@
-- https://github.com/ray-x/lsp_signature.nvim
return {
"ray-x/lsp_signature.nvim",
event = "VeryLazy",
dependencies = {
"neovim/nvim-lspconfig",
},
opts = {
hint_enable = false,
handler_opts = {
border = require("symbols.window").border,
},
},
}

View File

@@ -0,0 +1,7 @@
-- https://github.com/neovim/nvim-lspconfig
--- @module "lazy"
--- @type LazySpec
return {
"neovim/nvim-lspconfig",
cmd = { "LspInfo", "LspStart", "LspStop", "LspRestart" },
}

View File

@@ -1,4 +1,19 @@
-- https://github.com/nvim-lualine/lualine.nvim -- https://github.com/nvim-lualine/lualine.nvim
local function get_schema()
if not (vim.bo.filetype == "yaml" or vim.bo.filetype == "json" or vim.bo.filetype == "toml") then
return ""
end
local schema = (require("schema-companion").get_current_schemas() or "none")
if schema == "none" then
return ""
end
return schema
end
--- @module "lazy"
--- @type LazySpec
return { return {
"nvim-lualine/lualine.nvim", "nvim-lualine/lualine.nvim",
opts = { opts = {
@@ -28,6 +43,9 @@ return {
"encoding", "encoding",
{ "fileformat", icons_enabled = false }, { "fileformat", icons_enabled = false },
"filetype", "filetype",
{
get_schema,
},
}, },
}, },
inactive_sections = { inactive_sections = {

View File

@@ -0,0 +1,15 @@
-- https://github.com/mason-org/mason-lspconfig.nvim
--- @module "lazy"
--- @type LazySpec
return {
"mason-org/mason-lspconfig.nvim",
cmd = { "LspInstall", "LspUninstall" },
event = { "BufNewFile", "BufReadPre" },
--- @module "mason-lspconfig"
--- @type MasonLspconfigSettings
opts = {},
dependencies = {
"mason-org/mason.nvim",
"neovim/nvim-lspconfig",
},
}

View File

@@ -0,0 +1,50 @@
--- https://github.com/WhoIsSethDaniel/mason-tool-installer.nvim
local ensure_installed = {
-- LSP
"typos_lsp",
"clangd",
"basedpyright",
"lua_ls",
{
"gopls",
condition = function()
return vim.fn.executable("go") > 0
end,
},
"jsonls",
"yamlls",
"taplo",
"neocmake",
-- Formatter
"clang-format",
{
"goimports",
condition = function()
return vim.fn.executable("go") > 0
end,
},
"ruff",
"prettier",
"stylua",
"eslint",
}
--- @module "lazy"
--- @type LazySpec
return {
"WhoIsSethDaniel/mason-tool-installer.nvim",
dependencies = {
"mason-org/mason.nvim",
},
event = "VeryLazy",
opts = {
ensure_installed = ensure_installed,
auto_update = true,
},
config = function(_, opts)
require("mason-tool-installer").setup(opts)
-- VeryLazy happens _after_ VimEnter, so we have to manually call this
require("mason-tool-installer").run_on_start()
end,
}

View File

@@ -1,29 +1,10 @@
-- https://github.com/mason-org/mason.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
{ "mason-org/mason.nvim",
"williamboman/mason.nvim", cmd = { "Mason", "MasonUpdate", "MasonInstall", "MasonUninstall", "MasonUninstallAll", "MasonLog" },
opts = { --- @module "mason"
ui = { --- @type MasonSettings
border = require("symbols.window").border, opts = {},
height = 0.8,
},
},
},
{
"WhoIsSethDaniel/mason-tool-installer.nvim",
dependencies = {
"williamboman/mason.nvim",
},
config = function()
local tools = require("tools")
local ensure_installed = vim.tbl_keys(tools.servers)
ensure_installed =
vim.list_extend(ensure_installed, require("util.mason").process_formatters(tools.formatters))
ensure_installed = vim.list_extend(ensure_installed, tools.extra)
require("mason-tool-installer").setup({
ensure_installed = ensure_installed,
auto_update = true,
})
end,
},
} }

View File

@@ -2,66 +2,101 @@
local fold = require("symbols.fold") local fold = require("symbols.fold")
local file = require("symbols.file") local file = require("symbols.file")
--- @module "lazy"
--- @type LazySpec
return { return {
"nvim-neo-tree/neo-tree.nvim", "nvim-neo-tree/neo-tree.nvim",
version = "v2.x", branch = "v3.x",
dependencies = { dependencies = {
"nvim-lua/plenary.nvim", "nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim", "MunifTanjim/nui.nvim",
}, },
cmd = { "Neotree" }, cmd = { "Neotree" },
keys = { keys = {
{ "<F2>", "<cmd>Neotree toggle reveal filesystem float<cr>", desc = "Open floating Neo-tree window" }, { "<F2>", "<cmd>Neotree toggle reveal<cr>", desc = "Open floating Neo-tree window" },
}, },
config = function() -- netrw hijack does not work when lazy loading
vim.cmd([[ let g:neo_tree_remove_legacy_commands = 1 ]]) lazy = false,
--- @module "neo-tree"
require("neo-tree").setup({ --- @type neotree.Config
close_if_last_window = true, opts = {
enable_diagnostics = true, close_if_last_window = true,
source_selector = { popup_border_style = require("symbols.window").border,
winbar = true, source_selector = {
}, winbar = true,
default_component_configs = { show_scrolled_off_parent_node = true,
icon = { sources = {
folder_closed = fold.closed, {
folder_open = fold.open, source = "filesystem",
folder_empty = fold.empty, display_name = " Files ",
default = file.icon,
}, },
modified = { {
symbol = file.modified, source = "buffers",
display_name = " Buffers ",
}, },
name = { {
use_git_status_colors = false, source = "git_status",
}, display_name = " Git ",
git_status = {
symbols = require("symbols.git"),
}, },
}, },
filesystem = { show_separator_on_edge = true,
filtered_items = { },
hide_dotfiles = false, default_component_configs = {
hide_by_name = { diagnostics = {
".git", highlights = {
}, hint = "DiagnosticHint",
}, info = "DiagnosticInfo",
use_libuv_file_watcher = true, warn = "DiagnosticWarn",
}, error = "DiagnosticError",
window = {
mappings = {
["<C-c>"] = "close_window",
["<esc>"] = "close_window",
}, },
}, },
buffers = { icon = {
window = { folder_closed = fold.closed,
mappings = { folder_open = fold.open,
["bd"] = nil, folder_empty = fold.empty,
["<C-d>"] = "buffer_delete", folder_empty_open = fold.open,
}, default = file.icon,
},
}, },
}) modified = {
end, symbol = file.modified,
},
name = {
use_git_status_colors = false,
},
git_status = {
symbols = require("symbols.git"),
},
type = {
enabled = false,
},
last_modified = {
enabled = false,
},
symlink_target = {
enabled = true,
},
},
filesystem = {
follow_current_file = {
enabled = true,
},
hijack_netrw_behavior = "open_current",
use_libuv_file_watcher = true,
scan_mode = "deep",
},
window = {
popup = {
title = function()
return ""
end,
},
position = "float",
mappings = {
["<C-c>"] = "close_window",
["<esc>"] = "close_window",
["<tab>"] = "next_source",
["<S-tab>"] = "prev_source",
},
},
},
} }

View File

@@ -1,4 +1,6 @@
-- https://github.com/toppair/peek.nvim -- https://github.com/toppair/peek.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"toppair/peek.nvim", "toppair/peek.nvim",
build = "deno task --quiet build:fast", build = "deno task --quiet build:fast",

View File

@@ -0,0 +1,17 @@
-- https://github.com/tadachs/ros-nvim
--- @module "lazy"
--- @type LazySpec
return {
"tadachs/ros-nvim",
event = { "BufRead", "BufNewFile" },
opts = {
commands = {
enabled = false,
},
},
build = ":TSInstall ros",
dependencies = {
"nvim-lua/plenary.nvim",
"nvim-treesitter/nvim-treesitter",
},
}

View File

@@ -0,0 +1,26 @@
-- https://github.com/cenk1cenk2/schema-companion.nvim
--- @module "schema-companion"
--- @type schema_companion.Matcher
--- @module "lazy"
--- @type LazySpec
return {
"cenk1cenk2/schema-companion.nvim",
dependencies = {
"nvim-lua/plenary.nvim",
"diogo464/kubernetes.nvim",
},
keys = {
{
"<leader>ys",
function()
require("schema-companion").select_schema()
end,
desc = "Yaml schema",
ft = "yaml",
},
},
--- @module "schema-companion"
--- @type schema_companion.Config
opts = {},
}

View File

@@ -0,0 +1,7 @@
-- https://github.com/b0o/schemastore.nvim
--- @module "lazy"
--- @type LazySpec
return {
"b0o/schemastore.nvim",
lazy = true,
}

View File

@@ -0,0 +1,8 @@
-- https://github.com/Aasim-A/scrollEOF.nvim
--- @module "lazy"
--- @type LazySpec
return {
"Aasim-A/scrollEOF.nvim",
event = { "CursorMoved", "WinScrolled" },
opts = {},
}

View File

@@ -1,34 +1,53 @@
-- https://github.com/mrjones2014/smart-splits.nvim -- https://github.com/mrjones2014/smart-splits.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"mrjones2014/smart-splits.nvim", "mrjones2014/smart-splits.nvim",
dependencies = { event = "VeryLazy",
"kwkarlwang/bufresize.nvim", --- @module "smart-splits"
--- @type SmartSplitsConfig
opts = {
at_edge = "stop",
cursor_follows_swapped_bufs = true,
}, },
config = function() init = function()
vim.keymap.set("n", "<M-h>", require("smart-splits").move_cursor_left) vim.keymap.set("n", "<M-h>", function()
vim.keymap.set("n", "<M-j>", require("smart-splits").move_cursor_down) require("smart-splits").move_cursor_left()
vim.keymap.set("n", "<M-k>", require("smart-splits").move_cursor_up) end)
vim.keymap.set("n", "<M-l>", require("smart-splits").move_cursor_right) vim.keymap.set("n", "<M-j>", function()
require("smart-splits").move_cursor_down()
end)
vim.keymap.set("n", "<M-k>", function()
require("smart-splits").move_cursor_up()
end)
vim.keymap.set("n", "<M-l>", function()
require("smart-splits").move_cursor_right()
end)
vim.keymap.set("n", "<C-w>r", require("smart-splits").start_resize_mode, { desc = "Enter resize mode" }) vim.keymap.set("n", "<C-w>h", function()
require("smart-splits").swap_buf_left()
end, { desc = "Swap buffer to the left" })
vim.keymap.set("n", "<C-w>j", function()
require("smart-splits").swap_buf_down()
end, { desc = "Swap buffer to the bottom" })
vim.keymap.set("n", "<C-w>k", function()
require("smart-splits").swap_buf_up()
end, { desc = "Swap buffer to the top" })
vim.keymap.set("n", "<C-w>l", function()
require("smart-splits").swap_buf_right()
end, { desc = "Swap buffer to the right" })
vim.keymap.set("n", "<C-w>h", require("smart-splits").swap_buf_left, { desc = "Swap buffer to the left" }) vim.keymap.set("n", "<M-left>", function()
vim.keymap.set("n", "<C-w>j", require("smart-splits").swap_buf_down, { desc = "Swap buffer to the bottom" }) require("smart-splits").resize_left()
vim.keymap.set("n", "<C-w>k", require("smart-splits").swap_buf_up, { desc = "Swap buffer to the top" }) end, { desc = "Resize buffer to the left" })
vim.keymap.set("n", "<C-w>l", require("smart-splits").swap_buf_right, { desc = "Swap buffer to the right" }) vim.keymap.set("n", "<M-down>", function()
require("smart-splits").resize_down()
require("smart-splits").setup({ end, { desc = "Resize buffer to the bottom" })
at_edge = "stop", vim.keymap.set("n", "<M-up>", function()
cursor_follows_swapped_bufs = true, require("smart-splits").resize_up()
resize_mode = { end, { desc = "Resize buffer to the top" })
silent = true, vim.keymap.set("n", "<M-right>", function()
hooks = { require("smart-splits").resize_right()
on_enter = function() end, { desc = "Resize buffer to the right" })
vim.notify("Entering resize mode...")
end,
on_leave = require("bufresize").register,
},
},
})
end, end,
} }

View File

@@ -0,0 +1,73 @@
-- https://github.com/folke/snacks.nvim
--- @module "lazy"
--- @type LazySpec
return {
{
"folke/snacks.nvim",
priority = 1000,
lazy = false,
--- @module "snacks"
--- @type snacks.Config
opts = {
bigfile = {
enabled = true,
---@param ctx {buf: number, ft:string}
setup = function(ctx)
-- Disable treesitter
vim.treesitter.stop(ctx.buf)
vim.schedule(function()
if vim.api.nvim_buf_is_valid(ctx.buf) then
vim.bo[ctx.buf].syntax = ctx.ft
end
end)
end,
},
indent = {
enabled = true,
indent = {
char = "¦",
},
animate = {
enabled = false,
},
scope = {
char = "¦",
only_current = true,
},
},
},
keys = {
{
"<leader>bd",
function()
Snacks.bufdelete.delete()
end,
silent = true,
desc = "Buffer delete",
},
{
"<leader>bD",
function()
Snacks.bufdelete.other()
end,
silent = true,
desc = "Buffer delete others",
},
},
},
{
"nvim-neo-tree/neo-tree.nvim",
opts = function(_, opts)
local function on_move(data)
Snacks.rename.on_rename_file(data.source, data.destination)
end
local events = require("neo-tree.events")
opts.event_handlers = opts.event_handlers or {}
vim.list_extend(opts.event_handlers, {
{ event = events.FILE_MOVED, handler = on_move },
{ event = events.FILE_RENAMED, handler = on_move },
})
end,
},
}

View File

@@ -1,6 +1,12 @@
-- https://github.com/kylechui/nvim-surround -- https://github.com/kylechui/nvim-surround
--- @module "lazy"
--- @type LazySpec
return { return {
"kylechui/nvim-surround", "kylechui/nvim-surround",
event = "VeryLazy", event = "VeryLazy",
config = true, --- @module "nvim-surround"
--- @type user_options
opts = {
move_cursor = "sticky",
},
} }

View File

@@ -1,15 +0,0 @@
-- https://github.com/simrat39/symbols-outline.nvim
return {
enabled = false,
"simrat39/symbols-outline.nvim",
keys = {
{
"<F5>",
function()
require("symbols-outline").toggle_outline()
end,
desc = "Toggle symbols outline",
},
},
opts = {},
}

View File

@@ -1,92 +1,149 @@
-- https://github.com/nvim-telescope/telescope.nvim -- https://github.com/nvim-telescope/telescope.nvim
-- TODO: Ensure installed ripgrep local window = require("symbols.window")
--- @module "lazy"
--- @type LazySpec
return { return {
"nvim-telescope/telescope.nvim", {
dependencies = { "nvim-telescope/telescope.nvim",
"nvim-lua/plenary.nvim", cmd = { "Telescope" },
lazy = false,
dependencies = {
"nvim-lua/plenary.nvim",
},
opts = function()
return {
pickers = {
find_files = {
hidden = true,
},
},
defaults = {
file_ignore_patterns = {
".git/",
},
mappings = {
n = {
["<Tab>"] = "move_selection_worse",
["<S-Tab>"] = "move_selection_better",
},
i = {
["<Tab>"] = "move_selection_worse",
["<S-Tab>"] = "move_selection_better",
},
},
borderchars = window.borderchars,
},
extensions = {
["ui-select"] = {
require("telescope.themes").get_dropdown(),
},
smart_open = {
match_algorithm = "fzf",
},
},
}
end,
init = function()
vim.keymap.set("n", "<leader>.", function()
require("telescope.builtin").oldfiles()
end, { desc = "Find recently opened files" })
vim.keymap.set("n", "<leader>sb", function()
require("telescope.builtin").buffers()
end, { desc = "Buffers" })
vim.keymap.set("n", "<leader>/", function()
require("telescope.builtin").current_buffer_fuzzy_find({
-- Show matches in the order they appear in the document
sorting_strategy = "ascending",
})
end, { desc = "Fuzzily search in current buffer" })
vim.keymap.set("n", "<leader>s/", function()
require("telescope.builtin").live_grep({
grep_open_files = true,
prompt_title = "Live Grep in Open Files",
})
end, { desc = "Grep in open files" })
vim.keymap.set("n", "<leader><space>", function()
require("telescope").extensions.smart_open.smart_open()
end, { desc = "Find files" })
vim.keymap.set("n", "<leader>sh", function()
require("telescope.builtin").help_tags()
end, { desc = "Help" })
vim.keymap.set("n", "<leader>sw", function()
require("telescope.builtin").grep_string({
-- Show matches in the order they appear in the document
sorting_strategy = "ascending",
})
end, { desc = "Current word" })
vim.keymap.set("n", "<leader>sg", function()
require("telescope.builtin").live_grep()
end, { desc = "Grep" })
vim.keymap.set("n", "<leader>sd", function()
require("telescope.builtin").diagnostics()
end, { desc = "Diagnostics" })
vim.keymap.set("n", "<leader>sr", function()
require("telescope.builtin").resume()
end, { desc = "Resume" })
vim.keymap.set("n", "<leader>sk", function()
require("telescope.builtin").keymaps()
end, { desc = "Keymaps" })
vim.keymap.set("n", "<leader>sn", function()
require("telescope.builtin").find_files({ cwd = vim.fn.stdpath("config") })
end, { desc = "Neovim files" })
-- HACK: Workaround until new borders are fixed in telescope
vim.api.nvim_create_autocmd("User", {
pattern = "TelescopeFindPre",
callback = function()
vim.opt_local.winborder = "none"
vim.api.nvim_create_autocmd("WinLeave", {
once = true,
callback = function()
vim.opt_local.winborder = window.border
end,
})
end,
})
end,
},
{
"nvim-telescope/telescope-ui-select.nvim", "nvim-telescope/telescope-ui-select.nvim",
{ dependencies = {
"nvim-telescope/telescope.nvim",
},
config = function()
require("telescope").load_extension("ui-select")
end,
},
{
"nvim-telescope/telescope-fzf-native.nvim",
build = "make",
dependencies = {
"nvim-telescope/telescope.nvim",
},
config = function()
require("telescope").load_extension("fzf")
end,
},
{
"danielfalk/smart-open.nvim",
branch = "0.3.x",
config = function()
require("telescope").load_extension("smart_open")
end,
dependencies = {
"kkharji/sqlite.lua",
"nvim-telescope/telescope.nvim",
"nvim-telescope/telescope-fzf-native.nvim", "nvim-telescope/telescope-fzf-native.nvim",
build = "make", {
cond = function() "ellisonleao/gruvbox.nvim",
return vim.fn.executable("make") == 1 opts = function(_, opts)
end, local palette = require("gruvbox").palette
opts.overrides.Directory = { fg = palette.neutral_blue, bold = false }
end,
},
}, },
}, },
config = function()
require("telescope").setup({
pickers = {
find_files = {
hidden = true,
},
},
defaults = {
file_ignore_patterns = {
".git/",
},
mappings = {
n = {
["<S-Tab>"] = "move_selection_next",
["<Tab>"] = "move_selection_previous",
},
i = {
["<S-Tab>"] = "move_selection_next",
["<Tab>"] = "move_selection_previous",
},
},
borderchars = require("symbols.window").borderchars,
},
extensions = {
["ui-select"] = {
require("telescope.themes").get_dropdown(),
},
},
})
require("telescope").load_extension("fzf")
require("telescope").load_extension("ui-select")
vim.keymap.set(
"n",
"<leader>.",
require("telescope.builtin").oldfiles,
{ desc = "[.] Find recently opened files" }
)
vim.keymap.set(
"n",
"<leader><space>",
require("telescope.builtin").buffers,
{ desc = "[ ] Find existing buffers" }
)
vim.keymap.set("n", "<leader>/", function()
require("telescope.builtin").current_buffer_fuzzy_find({
-- Show matches in the order they appear in the document
sorting_strategy = "ascending",
})
end, { desc = "[/] Fuzzily search in current buffer" })
vim.keymap.set("n", "<leader>s/", function()
require("telescope.builtin").live_grep({
grep_open_files = true,
prompt_title = "Live Grep in Open Files",
})
end, { desc = "[S]earch [/] in Open Files" })
vim.keymap.set("n", "<leader>sf", require("telescope.builtin").find_files, { desc = "[S]earch [F]iles" })
vim.keymap.set("n", "<leader>sh", require("telescope.builtin").help_tags, { desc = "[S]earch [H]elp" })
vim.keymap.set("n", "<leader>sw", function()
require("telescope.builtin").grep_string({
-- Show matches in the order they appear in the document
sorting_strategy = "ascending",
})
end, { desc = "[S]earch current [W]ord" })
vim.keymap.set("n", "<leader>sg", require("telescope.builtin").live_grep, { desc = "[S]earch by [G]rep" })
vim.keymap.set("n", "<leader>sd", require("telescope.builtin").diagnostics, { desc = "[S]earch [D]iagnostics" })
vim.keymap.set("n", "<leader>sr", require("telescope.builtin").resume, { desc = "[S]earch [R]esume" })
vim.keymap.set("n", "<leader>sk", require("telescope.builtin").keymaps, { desc = "[S]earch [K]eymaps" })
vim.keymap.set("n", "<leader>sn", function()
require("telescope.builtin").find_files({ cwd = vim.fn.stdpath("config") })
end, { desc = "[S]earch [N]eovim files" })
end,
} }

View File

@@ -1,14 +1,51 @@
-- https://github.com/folke/todo-comments.nvim -- https://github.com/folke/todo-comments.nvim
local diagnostic = require("symbols.diagnostic") local diagnostic = require("symbols.diagnostic")
--- @module "lazy"
--- @type LazySpec
return { return {
-- 'folke/todo-comments.nvim', "folke/todo-comments.nvim",
-- NOTE: This fork highlights the entire matched word, not just the keyword.
"doongjohn/todo-comments.nvim",
dependencies = { dependencies = {
"nvim-lua/plenary.nvim", "nvim-lua/plenary.nvim",
}, },
config = function() event = "VeryLazy",
opts = {
signs = false,
keywords = {
-- FIX: Fix
FIX = { icon = diagnostic.bug },
-- TODO: Todo
TODO = { icon = diagnostic.todo },
-- HACK: Hack
HACK = { icon = diagnostic.hack },
-- WARN: Warn
WARN = { icon = diagnostic.warn },
-- PERF: Perf
PERF = { icon = diagnostic.performance },
-- NOTE: Note
NOTE = { icon = diagnostic.note },
-- TEST: Test
TEST = { icon = diagnostic.test },
},
highlight = {
-- TODO: Have multiline, but end when %p (punctuation) is at the end of a line
multiline = false,
before = "fg",
pattern = [[(KEYWORDS)\s*(\([^\)]*\))?:]],
},
search = {
pattern = [[\b(KEYWORDS)(\(.*\))?:]],
},
colors = {
error = { "TodoCommentError" },
warning = { "TodoCommentWarning" },
info = { "TodoCommentInfo" },
hint = { "TodoCommentHint" },
test = { "TodoCommentTest" },
default = { "TodoCommentDefault" },
},
},
init = function()
vim.keymap.set("n", "]t", function() vim.keymap.set("n", "]t", function()
require("todo-comments").jump_next() require("todo-comments").jump_next()
end, { desc = "Next todo comment" }) end, { desc = "Next todo comment" })
@@ -17,49 +54,12 @@ return {
require("todo-comments").jump_prev() require("todo-comments").jump_prev()
end, { desc = "Previous todo comment" }) end, { desc = "Previous todo comment" })
if pcall(require, "trouble") then -- -- TODO: Use cwd to only show todo's in the current file
-- TODO: Use cwd to only show todo's in the current file -- -- vim.keymap.set("n", "<F4>", "<cmd>TroubleToggle todo cwd=%<cr>", { desc = "Next todo comment" })
-- vim.keymap.set("n", "<F4>", "<cmd>TroubleToggle todo cwd=%<cr>", { desc = "Next todo comment" }) -- vim.keymap.set("n", "<F4>", "<cmd>TroubleToggle todo<cr>", { desc = "Next todo comment" })
vim.keymap.set("n", "<F4>", "<cmd>TroubleToggle todo<cr>", { desc = "Next todo comment" })
end
if pcall(require, "telescope") then
vim.keymap.set("n", "<leader>st", "<cmd>TodoTelescope<cr>", { desc = "[S]earch [T]odo" })
end
require("todo-comments").setup({ vim.keymap.set("n", "<leader>st", function()
keywords = { require("telescope").extensions["todo-comments"].todo()
-- FIX: Fix end, { desc = "Search todo" })
FIX = { icon = diagnostic.bug },
-- TODO: Todo
TODO = { icon = diagnostic.todo },
-- HACK: Hack
HACK = { icon = diagnostic.hack },
-- WARN: Warn
WARN = { icon = diagnostic.warning },
-- PERF: Perf
PERF = { icon = diagnostic.performance },
-- NOTE: Note
NOTE = { icon = diagnostic.note },
-- TEST: Test
TEST = { icon = diagnostic.test },
},
highlight = {
-- TODO: Have multiline, but end when %p (punctuation) is at the end of a line
multiline = false,
before = "fg",
pattern = [[(KEYWORDS)\s*(\([^\)]*\))?:]],
},
search = {
pattern = [[\b(KEYWORDS)(\(.*\))?:]],
},
colors = {
error = { "TodoCommentError" },
warning = { "TodoCommentWarning" },
info = { "TodoCommentInfo" },
hint = { "TodoCommentHint" },
test = { "TodoCommentTest" },
default = { "TodoCommentDefault" },
},
})
end, end,
} }

View File

@@ -1,14 +1,24 @@
-- https://github.com/nvim-treesitter/nvim-treesitter
--- @module "lazy"
--- @type LazySpec
return { return {
{ {
-- Highlight, edit, and navigate code
"nvim-treesitter/nvim-treesitter", "nvim-treesitter/nvim-treesitter",
dependencies = { dependencies = {
"nvim-treesitter/nvim-treesitter-context", { "nvim-treesitter/nvim-treesitter-textobjects", branch = "master" },
"nvim-treesitter/nvim-treesitter-textobjects", { "windwp/nvim-ts-autotag", opts = {} },
"windwp/nvim-ts-autotag",
}, },
lazy = false,
branch = "master",
build = ":TSUpdate",
main = "nvim-treesitter.configs",
init = function()
vim.wo.foldmethod = "expr"
vim.wo.foldexpr = "v:lua.vim.treesitter.foldexpr()"
end,
--- @module "nvim-treesitter"
--- @type TSConfig
opts = { opts = {
-- Add languages to be installed here that you want installed for treesitter
ensure_installed = { ensure_installed = {
"c", "c",
"cpp", "cpp",
@@ -24,9 +34,11 @@ return {
"markdown_inline", "markdown_inline",
"bash", "bash",
"sql", "sql",
"xml",
"cmake",
"json",
"yaml",
}, },
-- Autoinstall languages that are not installed. Defaults to false (but you can change for yourself!)
auto_install = true, auto_install = true,
highlight = { enable = true }, highlight = { enable = true },
@@ -34,10 +46,9 @@ return {
incremental_selection = { incremental_selection = {
enable = true, enable = true,
keymaps = { keymaps = {
init_selection = "<c-space>", init_selection = "<M-o>",
node_incremental = "<c-space>", node_incremental = "<M-o>",
scope_incremental = "<c-s>", node_decremental = "<M-i>",
node_decremental = "<M-space>",
}, },
}, },
textobjects = { textobjects = {
@@ -87,19 +98,6 @@ return {
}, },
}, },
}, },
autotag = {
enable = true,
},
},
config = function(_, opts)
require("nvim-treesitter.configs").setup(opts)
require("nvim-treesitter.install").update({ with_sync = true })
end,
},
{
"nvim-treesitter/nvim-treesitter-context",
opts = {
separator = require("symbols.window").borderchars[3],
}, },
}, },
} }

View File

@@ -1,19 +1,21 @@
-- https://github.com/folke/trouble.nvim -- https://github.com/folke/trouble.nvim
local fold = require("symbols.fold") local fold = require("symbols.fold")
--- @module "lazy"
--- @type LazySpec
return { return {
"folke/trouble.nvim", "folke/trouble.nvim",
cmd = { "Trouble", "TroubleToggle" }, cmd = { "Trouble", "TroubleToggle" },
keys = { keys = {
{ "<F3>", "<cmd>TroubleToggle workspace_diagnostics<cr>", desc = "Goto previous buffer" }, { "<F3>", "<cmd>TroubleToggle workspace_diagnostics<cr>", desc = "Goto previous buffer" },
}, },
config = function() --- @module "trouble"
require("trouble").setup({ --- @type trouble.Config
icons = false, opts = {
auto_close = true, icons = false,
fold_open = fold.open, -- icon used for open folds auto_close = true,
fold_closed = fold.close, -- icon used for closed folds fold_open = fold.open, -- icon used for open folds
use_diagnostic_signs = true, fold_closed = fold.close, -- icon used for closed folds
}) use_diagnostic_signs = true,
end, },
} }

View File

@@ -1,7 +1,9 @@
-- https://github.com/mbbill/undotree -- https://github.com/mbbill/undotree
--- @module "lazy"
--- @type LazySpec
return { return {
'mbbill/undotree', "mbbill/undotree",
keys = { keys = {
{ '<F6>', vim.cmd.UndotreeToggle, desc = 'Toggle undotree' }, { "<F6>", vim.cmd.UndotreeToggle, desc = "Toggle undotree" },
}, },
} }

View File

@@ -1,23 +1,63 @@
-- https://github.com/folke/which-key.nvim -- https://github.com/folke/which-key.nvim
local window = require("symbols.window")
--- @module "lazy"
--- @type LazySpec
return { return {
"folke/which-key.nvim", -- "folke/which-key.nvim",
"cameronr/which-key.nvim",
branch = "winborder-support",
event = "VeryLazy",
--- @module "which-key"
--- @type wk.Opts
opts = { opts = {
window = { preset = "modern",
border = "single", delay = function(ctx)
margin = { 1, 5, 2, 3 }, return ctx.plugin and 0 or 500
padding = { 0, 0, 0, 0 }, end,
win = {
border = window.border,
padding = { 1, 1 },
title = false,
},
icons = {
mappings = false,
colors = false,
keys = {
Up = "<u> ",
Down = "<d> ",
Left = "<l> ",
Right = "<r> ",
C = "<c> ",
M = "<m> ",
S = "<s> ",
CR = "<cr> ",
Esc = "<esc> ",
BS = "<bs>",
Space = "<space> ",
Tab = "<tab> ",
F1 = "<F1> ",
F2 = "<F2> ",
F3 = "<F3> ",
F4 = "<F4> ",
F5 = "<F5> ",
F6 = "<F6> ",
F7 = "<F7> ",
F8 = "<F8> ",
F9 = "<F9> ",
F10 = "<F10> ",
F11 = "<F11> ",
F12 = "<F12> ",
},
},
expand = 1,
sort = { "alphanum" },
spec = {
{ "<leader>b", group = "Buffer" },
{ "<leader>d", group = "Doument" },
{ "<leader>g", group = "Git" },
{ "<leader>t", group = "Toggle" },
{ "<leader>s", group = "Search" },
{ "gr", group = "LSP" },
}, },
}, },
init = function()
-- TODO: Only make a category show up if there actually are any keybinds under it
require("which-key").register({
["<leader>g"] = { name = "[G]it", _ = "which_key_ignore" },
["<leader>b"] = { name = "[B]buffer", _ = "which_key_ignore" },
["<leader>s"] = { name = "[S]earch", _ = "which_key_ignore" },
["<leader>c"] = { name = "[C]ode", _ = "which_key_ignore" },
["<leader>d"] = { name = "[D]ocument", _ = "which_key_ignore" },
["<leader>w"] = { name = "[W]orkspace", _ = "which_key_ignore" },
["<leader>r"] = { name = "[R]e[N]ame", _ = "which_key_ignore" },
})
end,
} }

View File

@@ -1,19 +0,0 @@
return {
enabled = false,
"johnfrankmorgan/whitespace.nvim",
config = function()
require("whitespace-nvim").setup({
-- configuration options and their defaults
-- `highlight` configures which highlight is used to display
-- trailing whitespace
highlight = "CursorLine",
-- `ignored_filetypes` configures which filetypes to ignore when
-- displaying trailing whitespace
ignored_filetypes = { "TelescopePrompt", "Trouble", "help" },
})
-- remove trailing whitespace with a keybinding
vim.keymap.set("n", "<Leader>t", require("whitespace-nvim").trim, { desc = "Remove trailing whitespace" })
end,
}

View File

@@ -1,9 +1,13 @@
-- Symbols to use for diagnostics -- Symbols to use for diagnostics
return { return {
-- LSP Status symbols -- LSP Status symbols
error = "", [vim.diagnostic.severity.ERROR] = " ",
warn = "", [vim.diagnostic.severity.WARN] = " ",
info = "", [vim.diagnostic.severity.INFO] = " ",
[vim.diagnostic.severity.HINT] = "󰌵",
error = "",
warn = "",
info = "",
hint = "󰌵", hint = "󰌵",
-- Comment type symbols -- Comment type symbols
bug = "󰃤", bug = "󰃤",

View File

@@ -4,11 +4,11 @@ return {
added = '', added = '',
modified = '', modified = '',
deleted = '', deleted = '',
renamed = '', renamed = '󰁕',
-- Status type -- Status type
untracked = '', untracked = '',
ignored = '', ignored = '',
unstaged = '', unstaged = '󰄱',
staged = '', staged = '',
conflict = '', conflict = '',
} }

View File

@@ -1,21 +1,31 @@
-- https://github.com/ellisonleao/gruvbox.nvim -- https://github.com/ellisonleao/gruvbox.nvim
--- @module "lazy"
--- @type LazySpec
return { return {
"ellisonleao/gruvbox.nvim", "ellisonleao/gruvbox.nvim",
priority = 1000, priority = 1000,
config = function() config = function(_, opts)
require("gruvbox").setup(opts)
-- Load the colorscheme
vim.cmd.colorscheme("gruvbox")
end,
opts = function()
local palette = require("gruvbox").palette local palette = require("gruvbox").palette
require("gruvbox").setup({ return {
background = "dark", background = "dark",
italic = { italic = {
strings = false, strings = false,
}, },
overrides = { overrides = {
CursorLineNr = { fg = palette.light4, bg = palette.dark1, bold = true },
YankHighlight = { fg = palette.bright_blue, bg = palette.dark0, reverse = true }, YankHighlight = { fg = palette.bright_blue, bg = palette.dark0, reverse = true },
Search = { fg = palette.bright_aqua }, Search = { fg = palette.bright_aqua },
IncSearch = { link = "Search" }, IncSearch = { link = "Search" },
NormalFloat = { bg = palette.dark0 }, NormalFloat = { bg = palette.dark0 },
FloatBorder = { fg = palette.dark4 }, FloatBorder = { fg = palette.dark4 },
LspInfoBorder = { link = "FloatBorder" },
TelescopePromptTitle = { fg = palette.light4 }, TelescopePromptTitle = { fg = palette.light4 },
TelescopePromptBorder = { link = "FloatBorder" }, TelescopePromptBorder = { link = "FloatBorder" },
TelescopePromptPrefix = { fg = palette.bright_red }, TelescopePromptPrefix = { fg = palette.bright_red },
@@ -26,11 +36,13 @@ return {
TelescopeMatching = { fg = palette.bright_aqua, bold = true }, TelescopeMatching = { fg = palette.bright_aqua, bold = true },
TelescopeSelection = { fg = palette.bright_blue }, TelescopeSelection = { fg = palette.bright_blue },
TelescopeSelectionCaret = { link = "TelescopeSelection" }, TelescopeSelectionCaret = { link = "TelescopeSelection" },
CmpItemAbbrMatch = { fg = palette.bright_aqua, bold = true }, BlinkCmpMenu = { fg = palette.dark2 },
CmpItemAbbrMatchFuzzy = { link = "CmpItemAbbrMatch" }, BlinkCmpMenuBorder = { fg = palette.dark4 },
CmpItemMenu = { fg = palette.dark2 }, BlinkCmpDocBorder = { fg = palette.dark4 },
CmpItemKindFunction = { fg = palette.bright_red }, BlinkCmpDocSeparator = { fg = palette.dark4 },
CmpSelection = { fg = palette.dark0, bg = palette.bright_blue }, BlinkCmpSignatureHelpBorder = { fg = palette.dark4 },
BlinkCmpKindFunction = { fg = palette.bright_red },
BlinkCmpMenuSelection = { fg = palette.dark0, bg = palette.bright_blue },
LspReferenceText = { bg = palette.dark1 }, LspReferenceText = { bg = palette.dark1 },
LspReferenceRead = { link = "LspReferenceText" }, LspReferenceRead = { link = "LspReferenceText" },
LspReferenceWrite = { link = "LspReferenceText" }, LspReferenceWrite = { link = "LspReferenceText" },
@@ -40,13 +52,37 @@ return {
TodoCommentHint = { fg = palette.bright_aqua }, TodoCommentHint = { fg = palette.bright_aqua },
TodoCommentTest = { fg = palette.bright_purple }, TodoCommentTest = { fg = palette.bright_purple },
TodoCommentDefault = { fg = palette.bright_blue }, TodoCommentDefault = { fg = palette.bright_blue },
GitSignsAdd = { link = "GruvboxGreenSign" }, GitSignsAdd = { fg = palette.bright_green, bold = true },
GitSignsChange = { link = "GruvboxAquaSign" }, GitSignsStagedAdd = { fg = palette.dark_green, bold = true },
GitSignsDelete = { link = "GruvboxRedSign" }, GitSignsChange = { fg = palette.bright_aqua, bold = true },
GitSignsStagedChange = { fg = palette.dark_aqua, bold = true },
GitSignsDelete = { fg = palette.bright_red, bold = true },
GitSignsStagedDelete = { fg = palette.dark_red, bold = true },
GitSignsCurrentLineBlame = { link = "GruvboxFg4" },
NeoTreeGitAdded = { link = "GruboxGreen" },
NeoTreeGitModified = { link = "GruvboxAqua" },
NeoTreeGitDelete = { link = "GruboxRed" },
NeoTreeFloatTitle = { link = "TelescopePromptTitle" },
NeoTreeTabActive = { fg = palette.dark0, bg = palette.bright_blue },
NeoTreeTabInactive = { fg = palette.light4, bg = palette.dark2 },
NeoTreeTabSeparatorActive = { link = "NeoTreeTabActive" },
NeoTreeTabSeparatorInactive = { link = "NeoTreeTabInactive" },
WhichKey = { fg = palette.bright_aqua, bold = true },
WhichKeyDesc = { fg = palette.light1 },
WhichKeyGroup = { fg = palette.neutral_blue, bold = true },
NeoTreeBufferNumber = { fg = palette.bright_green, bold = true },
NeoTreeDirectoryName = { fg = palette.neutral_blue, bold = true },
NeoTreeRootName = { fg = palette.neutral_blue, bold = true },
NeoTreeDirectoryIcon = { fg = palette.neutral_blue },
NeoTreeFileIcon = { fg = palette.light1 },
NeoTreeFilterTerm = { fg = palette.bright_aqua, bold = true },
NeoTreeSymbolicLinkTarget = { fg = palette.bright_aqua, bold = true },
DiagnosticNumError = { fg = palette.dark0, bg = palette.bright_red, bold = true },
DiagnosticNumWarn = { fg = palette.dark0, bg = palette.bright_yellow, bold = true },
DiagnosticNumHint = { fg = palette.dark0, bg = palette.bright_aqua, bold = true },
DiagnosticNumInfo = { fg = palette.dark0, bg = palette.bright_blue, bold = true },
SnacksIndentScope = { fg = palette.light4 },
}, },
}) }
-- Load the colorscheme
vim.cmd.colorscheme("gruvbox")
end, end,
} }

View File

@@ -1,75 +0,0 @@
local tools = {}
-- https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md
tools.servers = {
clangd = {},
gopls = {},
pyright = {},
rust_analyzer = {
settings = {
["rust-analyzer"] = {
check = {
command = "clippy",
},
},
},
},
lua_ls = {
settings = {
Lua = {
workspace = { checkThirdParty = false },
telemetry = { enable = false },
},
},
},
jsonls = {
settings = {
json = {
validate = { enable = true },
-- schemas = require("schemastore").json.schemas(),
},
},
},
yamlls = {
settings = {
yaml = {
schemaStore = {
enable = false,
url = "",
},
-- schemas = require("schemastore").yaml.schemas(),
},
},
},
taplo = {},
neocmake = {},
nil_ls = {},
typos_lsp = {
init_options = {
diagnosticSeverity = "Hint",
},
},
}
-- https://github.com/stevearc/conform.nvim
tools.formatters = require("util.conform").assign_formatters({
{ { "c", "cpp" }, { "clang-format" } },
go = { "goimports", "gofmt" },
python = { "ruff_format" },
rust = { "rustfmt" },
{
{ "javascript", "typescript", "typescriptreact", "javascriptreact", "css", "markdown", "yaml" },
{ "prettierd" },
},
lua = { "stylua" },
json = { "jq" },
toml = { "taplo" },
nix = { "nixfmt" },
["*"] = { "injected" },
["_"] = { "trim_whitespace", "trim_newlines" },
})
-- https://mason-registry.dev/registry/list
tools.extra = {}
return tools

View File

@@ -1,18 +0,0 @@
-- Helper function for assigning formatters to multiple languages at the same time
local M = {}
function M.assign_formatters(input)
local table = {}
for k, v in pairs(input) do
if type(k) == "number" then
for _, lang in pairs(v[1]) do
table[lang] = v[2]
end
else
table[k] = v
end
end
return table
end
return M

View File

@@ -1,162 +0,0 @@
-- Based on: https://github.com/zapling/mason-conform.nvim
-- conform formatter to mason package mapping
-- https://mason-registry.dev/registry/list
local conform_to_mason = {
-- alejandra
["asmfmt"] = "asmfmt",
["ast-grep"] = "ast-grep",
-- astyle
-- auto_optional
-- autocorrect
["autoflake"] = "autoflake",
["autopep8"] = "autopep8",
-- awk
-- bean-format
["beautysh"] = "beautysh",
["bibtex-tidy"] = "bibtex-tidy",
-- biome-check
["biome"] = "biome",
["black"] = "black",
["blade-formatter"] = "blade-formatter",
["blue"] = "blue",
["buf"] = "buf",
["buildifier"] = "buildifier",
["cbfmt"] = "cbfmt",
["clang-format"] = "clang-format",
-- cljstyle
["cmake_format"] = "cmakelang",
["codespell"] = "codespell",
["csharpier"] = "csharpier",
-- cue_fmt
["darker"] = "darker",
-- dart_format
["deno_fmt"] = "deno",
-- dfmt
["djlint"] = "djlint",
["dprint"] = "dprint",
["easy-coding-standard"] = "easy-coding-standard",
["elm_format"] = "elm-format",
-- erb_format
["eslint_d"] = "eslint_d",
["fantomas"] = "fantomas",
-- fish_indent
["fixjson"] = "fixjson",
-- fnlfmt
["fourmolu"] = "fourmolu",
["gci"] = "gci",
["gdformat"] = "gdtoolkit",
["gersemi"] = "gersemi",
-- gn
-- gofmt
["gofumpt"] = "gofumpt",
["goimports-reviser"] = "goimports-reviser",
["goimports"] = "goimports",
["golines"] = "golines",
["google-java-format"] = "google-java-format",
["htmlbeautifier"] = "htmlbeautifier",
-- indent
-- init
-- injected
["isort"] = "isort",
["joker"] = "joker",
["jq"] = "jq",
["jsonnetfmt"] = "jsonnetfmt",
-- just
["ktlint"] = "ktlint",
["latexindent"] = "latexindent",
["markdown-toc"] = "markdown-toc",
["markdownlint-cli2"] = "markdownlint-cli2",
["markdownlint"] = "markdownlint",
["mdformat"] = "mdformat",
["mdslw"] = "mdslw",
-- mix
-- nixfmt
["nixpkgs_fmt"] = "nixpkgs-fmt",
["ocamlformat"] = "ocamlformat",
-- opa_fmt
-- packer_fmt
-- pangu
-- perlimports
-- perltidy
-- pg_format
["php_cs_fixer"] = "php-cs-fixer",
["phpcbf"] = "phpcbf",
-- phpinsights
["pint"] = "pint",
["prettier"] = "prettier",
["prettierd"] = "prettierd",
["pretty-php"] = "pretty-php",
-- puppet-lint
["reorder-python-imports"] = "reorder-python-imports",
-- rescript-format
["rubocop"] = "rubocop",
["rubyfmt"] = "rubyfmt",
-- ruff
["ruff_fix"] = "ruff",
["ruff_format"] = "ruff",
["rufo"] = "rufo",
-- NOTE: Should install through rustup instead
-- ["rustfmt"] = "rustfmt",
["rustywind"] = "rustywind",
-- scalafmt
["shellcheck"] = "shellcheck",
["shellharden"] = "shellharden",
["shfmt"] = "shfmt",
["sql_formatter"] = "sql-formatter",
["sqlfluff"] = "sqlfluff",
["sqlfmt"] = "sqlfmt",
-- squeeze_blanks
["standardjs"] = "standardjs",
["standardrb"] = "standardrb",
["stylelint"] = "stylelint",
-- styler
["stylua"] = "stylua",
-- swift_format
-- swiftformat
["taplo"] = "taplo",
["templ"] = "templ",
-- terraform_fmt
-- terragrunt_hclfmt
["tlint"] = "tlint",
-- trim_newlines
-- trim_whitespace
-- twig-cs-fixer
["typos"] = "typos",
-- typstfmt
-- uncrustify
["usort"] = "usort",
["xmlformat"] = "xmlformatter",
-- xmllint
["yamlfix"] = "yamlfix",
["yamlfmt"] = "yamlfmt",
["yapf"] = "yapf",
["yq"] = "yq",
-- zigfmt
["zprint"] = "zprint",
}
local M = {}
function M.process_formatters(formatters_by_ft)
local formatters_to_install = {}
for _, formatters in pairs(formatters_by_ft) do
for _, formatter in pairs(formatters) do
if type(formatter) == "table" then
for _, f in pairs(formatter) do
local package = conform_to_mason[f]
if package ~= nil then
formatters_to_install[package] = 1
end
end
end
local package = conform_to_mason[formatter]
if package ~= nil then
formatters_to_install[package] = 1
end
end
end
return vim.tbl_keys(formatters_to_install)
end
return M

1
sesh/.stow-local-ignore Normal file
View File

@@ -0,0 +1 @@
setup

View File

@@ -0,0 +1,25 @@
# Hide all scratch sessions
blacklist = ["scratch-*"]
# Scratch sessions rename themselves to something unique and are hidden from the overview
[[session]]
name = "scratch"
startup_command = "tmux rename-session scratch-$(echo -n $(date) | sha256sum | cut -c1-4) && tmux set detach-on-destroy on && clear"
[[session]]
name = "automation_rs"
path = "~/Projects/rust/automation_rs/"
startup_command = "nvim"
windows = ["shell"]
[[session]]
name = "olympus"
startup_command = "ssh olympus && exit"
[[session]]
name = "niestern_sander"
path = "~/Projects/ALTEN/niestern_sander/"
startup_command = "$DOTFILES/sesh/setup/niestern_sander.sh"
[[window]]
name = "shell"

17
sesh/dot-local/bin/sesh-select Executable file
View File

@@ -0,0 +1,17 @@
#!/usr/bin/env zsh
exec </dev/tty
exec <&1
local session
session=$(sesh list -i | fzf-tmux -p 70%,60% \
--no-sort --ansi --border-label ' Select session ' --prompt '⚡ ' \
--header ' ^a all ^t tmux ^g configs ^x zoxide ^d tmux kill ^f find' \
--bind 'btab:down,tab:up' \
--bind 'ctrl-a:change-prompt(⚡ )+reload(sesh list -i)' \
--bind 'ctrl-t:change-prompt(🪟 )+reload(sesh list -t -i)' \
--bind 'ctrl-g:change-prompt(⚙️ )+reload(sesh list -c -i)' \
--bind 'ctrl-x:change-prompt(📁 )+reload(sesh list -z -i)' \
--bind 'ctrl-f:change-prompt(🔎 )+reload(fd -H -d 2 -t d -E .Trash . ~)' \
--bind 'ctrl-d:execute(tmux kill-session -t {2..})+change-prompt(⚡ )+reload(sesh list -i)')
[[ -z "$session" ]] && return
sesh connect $session

15
sesh/setup/niestern_sander.sh Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env bash
if ! systemctl is-active --quiet docker; then
echo "Starting docker..."
systemctl start docker
fi
devcontainer up --workspace-folder .
tmux rename-window nvim
tmux new-window -n "ros" "devcontainer exec --workspace-folder . bash"
tmux new-window -n "shell"
tmux select-window -t :-2
devcontainer exec --workspace-folder . nvim

View File

@@ -1,2 +1,2 @@
gruvbox.conf gruvbox.conf
tpm/ tpm

View File

@@ -1,12 +1,18 @@
# Plugins
set -g @plugin 'mrjones2014/smart-splits.nvim'
set -g @plugin 'tmux-plugins/tmux-sensible'
set -g @plugin 'wfxr/tmux-fzf-url'
# Settings # Settings
set -g default-terminal "xterm-256color"
set -ag terminal-overrides ",xterm-256color:RGB" set -ag terminal-overrides ",xterm-256color:RGB"
setw -g monitor-activity on setw -g monitor-activity on
setw -g aggressive-resize on
setw -g automatic-rename on setw -g automatic-rename on
set -s escape-time 0
set-window-option -g xterm-keys on set-window-option -g xterm-keys on
set-option -g focus-events on set -sg escape-time 0
set -g history-limit 5000
set -g detach-on-destroy off # don't exit from tmux when closing a session
# Setup vi-mode with better keybindings # Setup vi-mode with better keybindings
# TODO: Escape does not work properly for leaving # TODO: Escape does not work properly for leaving
@@ -20,29 +26,27 @@ unbind C-b
set -g prefix C-a set -g prefix C-a
# Improve navigation between tmux and nvim # Improve navigation between tmux and nvim
# TODO: Disable pane selection wrap set -g @smart-splits_no_wrap '' # to disable wrapping. (any value disables wrapping)
bind-key -n M-h if -F "#{@pane-is-vim}" 'send-keys M-h' "run '#{select_pane_no_wrap} L'"
bind-key -n M-j if -F "#{@pane-is-vim}" 'send-keys M-j' "run '#{select_pane_no_wrap} D'"
bind-key -n M-k if -F "#{@pane-is-vim}" 'send-keys M-k' "run '#{select_pane_no_wrap} U'"
bind-key -n M-l if -F "#{@pane-is-vim}" 'send-keys M-l' "run '#{select_pane_no_wrap} R'"
bind-key -T copy-mode-vi 'M-h' select-pane -L set -g @smart-splits_move_left_key 'M-h' # key-mapping for navigation.
bind-key -T copy-mode-vi 'M-j' select-pane -D set -g @smart-splits_move_down_key 'M-j' # --"--
bind-key -T copy-mode-vi 'M-k' select-pane -U set -g @smart-splits_move_up_key 'M-k' # --"--
bind-key -T copy-mode-vi 'M-l' select-pane -R set -g @smart-splits_move_right_key 'M-l' # --"--
set -g @smart-splits_resize_left_key 'M-left' # key-mapping for resizing.
set -g @smart-splits_resize_down_key 'M-down' # --"--
set -g @smart-splits_resize_up_key 'M-up' # --"--
set -g @smart-splits_resize_right_key 'M-right' # --"--
# Custom keybinds # Custom keybinds
bind '"' split-window -c "#{pane_current_path}" bind s split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}" bind v split-window -h -c "#{pane_current_path}"
bind -n C-j new-window -c "#{pane_current_path}" bind -n C-j new-window -c "#{pane_current_path}"
bind -n C-h prev bind -n C-h prev
bind -n C-l next bind -n C-l next
bind -n C-M-l swap-window -t +1 \; next bind -n C-M-l swap-window -t +1 \; next
bind -n C-M-h swap-window -t -1 \; prev bind -n C-M-h swap-window -t -1 \; prev
# Keybind for reloading config
bind r source-file $DOTFILES/tmux/dot-tmux.conf \; display-message "Config reloaded..."
bind -T root F12 \ bind -T root F12 \
set prefix None \;\ set prefix None \;\
set key-table off \;\ set key-table off \;\
@@ -59,6 +63,21 @@ wg_is_keys_off="#([ $(tmux show-option -qv key-table) = 'off' ] && echo 'TRUE' )
# Load theme # Load theme
source-file "$DOTFILES/tmux/gruvbox.conf" source-file "$DOTFILES/tmux/gruvbox.conf"
set -g @plugin "dalejung/tmux-select-pane-no-wrap"
run "$DOTFILES/tmux/tpm/tpm" run "$DOTFILES/tmux/tpm/tpm"
set -g base-index 1
bind-key -n M-1 select-window -t 1
bind-key -n M-2 select-window -t 2
bind-key -n M-3 select-window -t 3
bind-key -n M-4 select-window -t 4
bind-key -n M-5 select-window -t 5
bind-key -n M-6 select-window -t 6
bind-key -n M-7 select-window -t 7
bind-key -n M-8 select-window -t 8
bind-key -n M-9 select-window -t 9
bind-key -n M-0 select-window -t 10
bind-key "a" run-shell "sesh-select"
bind-key x kill-pane
bind-key X kill-session

View File

@@ -22,31 +22,132 @@ plugins=(
# Disabled because the highlighting conflicts with autosuggestions # Disabled because the highlighting conflicts with autosuggestions
# history-substring-search # history-substring-search
vi-mode vi-mode
tmux
colored-man-pages colored-man-pages
command-not-found command-not-found
dirhistory zsh-autopair
fast-syntax-highlighting
) )
bindkey -M vicmd "k" up-line-or-beginning-search
bindkey -M vicmd "j" down-line-or-beginning-search
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=yellow" HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND="fg=yellow"
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=red" HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND="fg=red"
HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_TIMEOUT=3 HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_TIMEOUT=3
VI_MODE_RESET_PROMT_ON_MODE_CHANGE=true ZSH_AUTOSUGGEST_STRATEGY=(history completion)
VI_MODE_RESET_PROMPT_ON_MODE_CHANGE=true
VI_MODE_SET_CURSOR=true VI_MODE_SET_CURSOR=true
# Might cause issues? # Might cause issues?
KEYTIMEOUT=1 KEYTIMEOUT=1
ZSH_TMUX_AUTOSTART=true fpath+=${ZSH_CUSTOM:-${ZSH:-~/.oh-my-zsh}/custom}/plugins/zsh-completions/src
ZSH_TMUX_AUTOCONNECT=false autoload -U compinit && compinit
ZSH_TMUX_FIXTERM=true source "$ZSH/oh-my-zsh.sh"
source $ZSH/oh-my-zsh.sh
less_termcap[so]="${fg_bold[black]}${bg[white]}" less_termcap[so]="${fg_bold[black]}${bg[white]}"
export LESS="-F -R -i --incsearch -M"
export PATH="${HOME}/.local/bin:$PATH" export PATH="${HOME}/.local/bin:${HOME}/.cargo/bin:$PATH"
export EDITOR=nvim export EDITOR=nvim
# export GREP_COLORS="mt=01;32" # export GREP_COLORS="mt=01;32"
alias cl="clear" alias cl="clear"
if (( $+commands[bat] )); then
export BAT_THEME="gruvbox-dark"
alias cat=bat
fi
if (( $+commands[devcontainer] )); then
dc() {
ORIG_DIR="$PWD"
while [[ "$PWD" != / ]] ; do
if find "$PWD"/ -maxdepth 1 -type d -name ".devcontainer" | grep -q ".devcontainer"; then
WORKSPACE_FOLDER="$PWD"
builtin cd "$ORIG_DIR"
if [[ "$1" == "nvim" ]]; then
tmux set-option -pt 0 @pane-is-vim 1
devcontainer exec --workspace-folder "$WORKSPACE_FOLDER" bash -c "$@"
tmux set-option -pt 0 @pane-is-vim 0
else
devcontainer exec --workspace-folder "$WORKSPACE_FOLDER" $@
fi
return 0
else
builtin cd ..
fi
done
builtin cd "$ORIG_DIR"
echo "Unable to find workspace folder"
return 1
}
fi
export PNPM_HOME="/home/tim/.local/share/pnpm"
if [ -d "$PNPM_HOME" ]; then
case ":$PATH:" in
*":$PNPM_HOME:"*) ;;
*) export PATH="$PNPM_HOME:$PATH" ;;
esac
else
unset PNPM_HOME
fi
export FZF_DEFAULT_OPTS='--tmux'
export FZF_DEFAULT_OPTS=$FZF_DEFAULT_OPTS'
--color=fg:-1,fg+:#83a598,bg:-1,bg+:#262626
--color=hl:bold:#8ec07c,hl+:#8ec07c,marker:#cc241d
--color=prompt:#fb4934,spinner:#af5fff,pointer:#83a598,header:#87afaf
--color=border:#7c6f64,label:#7c6f64
--border="sharp" --border-label-pos="0" --preview-window="border-sharp"
--prompt="> " --marker="◆" --pointer=">" --separator="─"
--scrollbar="│" --info="right"'
if (( $+commands[fd] )); then
export FZF_DEFAULT_COMMAND="fd --type f --strip-cwd-prefix"
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
fi
if (( $+commands[fzf] )); then
source <(fzf --zsh)
if (( $+commands[paru] )); then
function pi {
paru -Slq | fzf -q "$1" --border-label=" Install package " --multi --preview 'paru -Si {1} --color=always' | xargs -ro paru -S
}
fi
fi
export _ZO_FZF_OPTS="--tmux"
if (( $+commands[zoxide] )); then
eval "$(zoxide init zsh --cmd cd)"
fi
# Generate missing text objects
autoload -Uz select-bracketed select-quoted
zle -N select-quoted
zle -N select-bracketed
for km in viopp visual; do
bindkey -M $km -- '-' vi-up-line-or-history
for c in {a,i}${(s..)^:-\'\"\`\|,./:;=+@}; do
bindkey -M $km $c select-quoted
done
for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
bindkey -M $km $c select-bracketed
done
done
ZSH_TMUX_AUTOSTART=true
if (( $+commands[tmux] )); then
if [[ -z "$TMUX" && "$ZSH_TMUX_AUTOSTART" == "true" && -z "$INSIDE_EMACS" && -z "$EMACS" && -z "$VIM" && -z "$INTELLIJ_ENVIRONMENT_READER" && -z "$ZED_TERM" ]]; then
if (( $+commands[sesh] )) && (( $+commands[sesh-select] )); then
sesh-select
else
tmux new-session
fi
exit
fi
fi