From 83b38ddf610ceeb00b36bd10f9bddd9c94967a8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geoffrey=20=E2=80=9CFrogeye=E2=80=9D=20Preud=27homme?= Date: Mon, 8 Jan 2024 23:04:24 +0100 Subject: [PATCH] vim: Put in correct folder --- hm/common.nix | 1 + hm/default.nix | 2 +- hm/vim.nix | 398 --------------------------------------------- hm/vim/default.nix | 395 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 397 insertions(+), 399 deletions(-) delete mode 100644 hm/vim.nix create mode 100644 hm/vim/default.nix diff --git a/hm/common.nix b/hm/common.nix index d4000b8..98002ea 100644 --- a/hm/common.nix +++ b/hm/common.nix @@ -187,6 +187,7 @@ enableZshIntegration = true; }; less.enable = true; + nixvim.enable = true; readline = { enable = true; variables = { diff --git a/hm/default.nix b/hm/default.nix index d346340..8cb1d3c 100644 --- a/hm/default.nix +++ b/hm/default.nix @@ -15,6 +15,6 @@ ./style.nix ./tmux ./usernix - ./vim.nix + ./vim ]; } diff --git a/hm/vim.nix b/hm/vim.nix deleted file mode 100644 index 1ad4b0c..0000000 --- a/hm/vim.nix +++ /dev/null @@ -1,398 +0,0 @@ -{ pkgs, lib, config, ... }: -let - vim-shot-f = pkgs.vimUtils.buildVimPlugin { - pname = "vim-shot-f"; - version = "2016-02-05"; - src = pkgs.fetchFromGitHub { - owner = "deris"; - repo = "vim-shot-f"; - rev = "eea71d2a1038aa87fe175de9150b39dc155e5e7f"; - sha256 = "iAPvIs/lhW+w5kFTZKaY97D/kfCGtqKrJVFvZ8cHu+c="; - }; - meta.homepage = "https://github.com/deris/vim-shot-f"; - }; - quick-scope = pkgs.vimUtils.buildVimPlugin rec { - pname = "quick-scope"; - version = "2.6.1"; - src = pkgs.fetchFromGitHub { - owner = "unblevable"; - repo = "quick-scope"; - rev = "v${version}"; - sha256 = "TcA4jZIdnQd06V+JrXGiCMr0Yhm9gB6OMiTSdzMt/Qw="; - }; - meta.homepage = "https://github.com/unblevable/quick-scope"; - }; -in -{ - - programs.nixvim = { - enable = true; - # Setting a custom base16 theme via nixvim is required so feline works, and - # because stylix makes a config that otherwise only works with dark - # polarity. - colorschemes.base16.colorscheme = "solarized-${config.frogeye.polarity}"; - options = { - # From https://www.hillelwayne.com/post/intermediate-vim/ - title = true; - number = true; - relativenumber = true; - scrolloff = 10; - lazyredraw = true; # Do not redraw screen in the middle of a macro. Makes them complete faster. - cursorcolumn = true; - - ignorecase = true; - smartcase = true; - gdefault = true; - - tabstop = 4; - shiftwidth = 4; - expandtab = true; - - splitbelow = true; - visualbell = true; - - updatetime = 250; - undofile = true; - - # From http://stackoverflow.com/a/5004785/2766106 - list = true; - listchars = "tab:╾╌,trail:·,extends:↦,precedes:↤,nbsp:_"; - showbreak = "↪"; - - wildmode = "longest:full,full"; - wildmenu = true; - }; - globals = { - netrw_fastbrowse = 0; # Close the file explorer once you select a file - }; - plugins = { - # Catches attention when cursor changed position - # TODO Unmapped, do I still want to use it? - specs = { - enable = true; - min_jump = 5; - fader = { builtin = "pulse_fader"; }; - resizer = { builtin = "shrink_resizer"; }; - }; - - # Tabline - barbar.enable = true; - - # Go to whatever - telescope = { - enable = true; - keymaps = { - gF = "find_files"; - gf = "git_files"; - gB = "buffers"; - gl = "current_buffer_fuzzy_find"; - gL = "live_grep"; - gT = "tags"; - gt = "treesitter"; - gm = "marks"; - gh = "oldfiles"; - gH = "command_history"; - gS = "search_history"; - gC = "commands"; - gr = "lsp_references"; - ge = "diagnostics"; - # ga = "lsp_code_actions"; - # gE = "lsp_workspace_diagnostics"; - # TODO Above makes nvim crash on startup, action is not provided - gd = "lsp_definitions"; - gs = "lsp_document_symbols"; - }; - defaults = { - vimgrep_arguments = [ - "${pkgs.ripgrep}/bin/rg" - "--color=never" - "--no-heading" - "--with-filename" - "--line-number" - "--column" - "--smart-case" - ]; - }; - extensions.fzf-native = { - enable = true; - caseMode = "smart_case"; - fuzzy = true; - overrideFileSorter = true; - overrideGenericSorter = true; - }; - }; - - # Surrounding pairs - surround.enable = true; # Change surrounding pairs (e.g. brackets, quotes) - - # Language Server - lsp = { - enable = true; - keymaps = { - silent = true; - diagnostic = { - "e" = "open_float"; - "[e" = "goto_prev"; - "]e" = "goto_next"; - }; - lspBuf = { - "gD" = "declaration"; - "K" = "hover"; - "gi" = "implementation"; - "" = "signature_help"; - "wa" = "add_workspace_folder"; - "wr" = "remove_workspace_folder"; - # "wl" = "list_workspace_folder"; - # TODO Full thing was function() print(vim.inspect(vim.lsp.buf.list_workspace_folder())) end but not sure I'm ever really using this - # Also makes nvim crash like this, so uncommented - "D" = "type_definition"; - "rn" = "rename"; - "f" = "format"; - # TODO Full thing was function() vim.lsp.buf.format { async = true } end, so async while this isn't - # Maybe replace this with lsp-format? - }; - }; - servers = { - ansiblels.enable = config.frogeye.dev.ansible; # Ansible - bashls.enable = true; # Bash - jsonls.enable = true; # JSON - lua-ls.enable = true; # Lua (for Neovim debugging) - perlpls.enable = config.frogeye.dev.perl; # Perl - pylsp = { - # Python - enable = config.frogeye.dev.python; - settings.plugins = { - black.enabled = true; - flake8 = { - enabled = true; - maxLineLength = 88; # Compatibility with Black - }; - isort.enabled = true; - mccabe.enabled = true; - pycodestyle = { - enabled = true; - maxLineLength = 88; # Compatibility with Black - }; - pyflakes.enabled = true; - pylint.enabled = true; - pylsp_mypy = { - enabled = true; - overrides = [ - "--cache-dir=${config.xdg.cacheHome}/mypy" - "--ignore-missing-imports" - "--disallow-untyped-defs" - "--disallow-untyped-calls" - "--disallow-incomplete-defs" - "--disallow-untyped-decorators" - true - ]; - }; - # TODO Could add some, could also remove some - }; - }; - phpactor.enable = config.frogeye.dev.php; # PHP - rnix-lsp.enable = true; # Nix - # TODO Something for SQL. sqls is deprecated, sqlls is not in Nixpkgs. Probably needs a DB connection configured anyways? - yamlls.enable = true; # YAML - # TODO Check out none-ls - }; - onAttach = '' - vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') - ''; # Seems needed for auto-completion with nvim-compe - }; - nvim-lightbulb = { - # Shows a lightbulb whenever a codeAction is available under the cursor - enable = true; - autocmd.enabled = true; - }; - lspkind.enable = true; # Add icons to LSP completions - - # Treesitter - treesitter = { - # Allows for better syntax highlighting - enable = true; - incrementalSelection = { - enable = true; - }; - # indent = true; # Not very working last time I tried apparently - }; - # TODO Investigate https://github.com/nvim-treesitter/nvim-treesitter-textobjects - indent-blankline.enable = true; # TODO integrate with rainbow-delimiters and use more of the options - - undotree.enable = true; # Navigate edition history - - # Git - fugitive.enable = true; # Git basics - gitsigns.enable = true; # Show changed lines in the gutter - - # Language-specific - # dap.enable = true; # Debug Adapter Protocol client # 23.11 - nvim-colorizer.enable = true; # Display colors of color-codes - }; - extraPlugins = with pkgs.vimPlugins; [ - nvim-scrollview # Scroll bar - - # Status line - feline-nvim # Customizable status line. - # TODO Abandonned. Maybe use lualine? - - # Search/replace - vim-abolish # Regex for words, with case in mind - vim-easy-align # Aligning lines around a certain character - - # Surrounding pairs - targets-vim # Better interaction with surrounding pairs - - # f/F mode - vim-shot-f # Highlight relevant characters for f/F/t/T modes - quick-scope # Highlight relevant characters for f/F modes one per word but always - - # Registers - registers-nvim # Show register content when pressing " - # TODO Doesn't work. Didn't work on Arch either - - # Tags - vim-gutentags # Generate tags - symbols-outline-nvim # Show a symbol panel on the right - # TODO Fails on startup. Same on Arch. Config issue? - - # Language server - lsp_signature-nvim # Show argument definition when typing a function - - # Treesitter - nvim-ts-rainbow # Randomly color parenthesis pairs - # TODO Replace with plugins.rainbow-delimiters - - # Snippets - vim-vsnip - vim-vsnip-integ - friendly-snippets - - # Auto-completion - nvim-compe - # TODO Archived. Maybe use nvim-cmp and plugins instead? - - # Git - fugitive-gitlab-vim # Open files in GitLab - # TODO Connect it! - - # Language-specific - tcomment_vim # Language-aware (un)commenting - ] ++ lib.optionals config.frogeye.extra [ - vim-LanguageTool # Check grammar for human languages - ] ++ lib.optionals config.programs.pandoc.enable [ - vim-pandoc # Pandoc-specific stuff because there's no LSP for it - vim-pandoc-syntax - ] ++ lib.optionals config.frogeye.dev.ansible [ - ansible-vim # TODO Doesn't have snippets - ]; - extraConfigLua = lib.strings.concatMapStringsSep "\n" (f: builtins.readFile f) [ - ./vim/feline.lua - ./vim/symbols-outline-nvim.lua - ./vim/lsp_signature-nvim.lua - ./vim/nvim-ts-rainbow.lua - ./vim/nvim-compe.lua - ]; - extraConfigVim = '' - " GENERAL - - " Avoid showing message extra message when using completion - set shortmess+=c - - command Reload source $MYVIMRC - - " PLUGINS - - " vim-gutentags - let g:gutentags_cache_dir = expand('~/.cache/nvim/tags') - - " nvim-compe - " Copy-pasted because I couldn't be bothered - set completeopt=menuone,noselect - - inoremap compe#complete() - inoremap compe#confirm('') - inoremap compe#close('') - inoremap compe#scroll({ 'delta': +4 }) - inoremap compe#scroll({ 'delta': -4 }) - - '' + lib.optionalString config.frogeye.extra '' - " languagetool - let g:languagetool_cmd = "${pkgs.languagetool}/bin/languagetool-commandline" - " TODO Doesn't work - - '' + lib.optionalString config.programs.pandoc.enable '' - " vim-pandox - let g:pandoc#modules#disabled = ["folding"] - let g:pandoc#spell#enabled = 0 - let g:pandoc#syntax#conceal#use = 0 - - ''; - autoCmd = [ - # Turn off relativenumber only for insert mode - { event = "InsertEnter"; pattern = "*"; command = "set norelativenumber"; } - { event = "InsertLeave"; pattern = "*"; command = "set relativenumber"; } - - # Additional extensions - { event = "BufRead"; pattern = "*.jinja"; command = "set filetype=jinja2"; } # TODO Probably GH-specific? - { event = "BufNewFile"; pattern = "*.jinja"; command = "set filetype=jinja2"; } - - # vim-easy-align: Align Markdown tables - { event = "FileType"; pattern = "markdown"; command = "vmap :EasyAlign*"; } - ]; - - userCommands = { - # Reload = { command = "source $MYVIRMC"; }; - # TODO Is not working, options is set to nil even though it shouldn't - }; - - keymaps = [ - # GENERAL - - # Allow saving of files as sudo when I forgot to start vim using sudo. - # From https://stackoverflow.com/a/7078429 - { mode = "c"; key = "w!!"; action = "w !sudo tee > /dev/null %"; } - - { mode = "i"; key = "jk"; action = ""; } - { mode = "v"; key = ""; action = ""; } - { key = ""; action = "o"; } - - # { key = ""; action = ":bp"; } - # { key = ""; action = ":bn"; } - { key = ""; action = "kkkkkkkkkkkkkkkkkkkkk"; } - { key = ""; action = "jjjjjjjjjjjjjjjjjjjjj"; } - - # \s to replace globally the word under the cursor - { key = "s"; action = ":%s/\\<\\>/"; } - - # PLUGINS - - # barbar - { key = ""; action = "BufferPrevious"; options = { silent = true; }; } - { key = ""; action = "BufferNext"; options = { silent = true; }; } - # TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/ - { key = ""; action = "BufferMovePrevious"; options = { silent = true; }; } - { key = ""; action = "BufferMoveNext"; options = { silent = true; }; } - # TODO gotos don't work - { key = ""; action = "BufferGoto 1"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 2"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 3"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 4"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 5"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 6"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 7"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 8"; options = { silent = true; }; } - { key = ""; action = "BufferGoto 9"; options = { silent = true; }; } - { key = ""; action = "BufferLast"; options = { silent = true; }; } - { key = "gb"; action = "BufferPick"; options = { silent = true; }; } - # TODO Other useful options? - - # symbols-outline-nvim - { key = "s"; action = "SymbolsOutline"; options = { silent = true; }; } - - # undotree - { key = "u"; action = "UndotreeToggle"; options = { silent = true; }; } - - ]; - }; -} diff --git a/hm/vim/default.nix b/hm/vim/default.nix new file mode 100644 index 0000000..fda04e2 --- /dev/null +++ b/hm/vim/default.nix @@ -0,0 +1,395 @@ +{ pkgs, lib, config, ... }: +let + vim-shot-f = pkgs.vimUtils.buildVimPlugin { + pname = "vim-shot-f"; + version = "2016-02-05"; + src = pkgs.fetchFromGitHub { + owner = "deris"; + repo = "vim-shot-f"; + rev = "eea71d2a1038aa87fe175de9150b39dc155e5e7f"; + sha256 = "iAPvIs/lhW+w5kFTZKaY97D/kfCGtqKrJVFvZ8cHu+c="; + }; + meta.homepage = "https://github.com/deris/vim-shot-f"; + }; + quick-scope = pkgs.vimUtils.buildVimPlugin rec { + pname = "quick-scope"; + version = "2.6.1"; + src = pkgs.fetchFromGitHub { + owner = "unblevable"; + repo = "quick-scope"; + rev = "v${version}"; + sha256 = "TcA4jZIdnQd06V+JrXGiCMr0Yhm9gB6OMiTSdzMt/Qw="; + }; + meta.homepage = "https://github.com/unblevable/quick-scope"; + }; +in +{ + # config = lib.mkIf config.programs.nixvim.enable { # Somehow this is infinite recursion? + config = { + programs.nixvim = { + # Setting a custom base16 theme via nixvim is required so feline works, and + # because stylix makes a config that otherwise only works with dark + # polarity. + colorschemes.base16.colorscheme = "solarized-${config.frogeye.polarity}"; + options = { + # From https://www.hillelwayne.com/post/intermediate-vim/ + title = true; + number = true; + relativenumber = true; + scrolloff = 10; + lazyredraw = true; # Do not redraw screen in the middle of a macro. Makes them complete faster. + cursorcolumn = true; + + ignorecase = true; + smartcase = true; + gdefault = true; + + tabstop = 4; + shiftwidth = 4; + expandtab = true; + + splitbelow = true; + visualbell = true; + + updatetime = 250; + undofile = true; + + # From http://stackoverflow.com/a/5004785/2766106 + list = true; + listchars = "tab:╾╌,trail:·,extends:↦,precedes:↤,nbsp:_"; + showbreak = "↪"; + + wildmode = "longest:full,full"; + wildmenu = true; + }; + globals = { + netrw_fastbrowse = 0; # Close the file explorer once you select a file + }; + plugins = { + # Catches attention when cursor changed position + # TODO Unmapped, do I still want to use it? + specs = { + enable = true; + min_jump = 5; + fader = { builtin = "pulse_fader"; }; + resizer = { builtin = "shrink_resizer"; }; + }; + + # Tabline + barbar.enable = true; + + # Go to whatever + telescope = { + enable = true; + keymaps = { + gF = "find_files"; + gf = "git_files"; + gB = "buffers"; + gl = "current_buffer_fuzzy_find"; + gL = "live_grep"; + gT = "tags"; + gt = "treesitter"; + gm = "marks"; + gh = "oldfiles"; + gH = "command_history"; + gS = "search_history"; + gC = "commands"; + gr = "lsp_references"; + ge = "diagnostics"; + # ga = "lsp_code_actions"; + # gE = "lsp_workspace_diagnostics"; + # TODO Above makes nvim crash on startup, action is not provided + gd = "lsp_definitions"; + gs = "lsp_document_symbols"; + }; + defaults = { + vimgrep_arguments = [ + "${pkgs.ripgrep}/bin/rg" + "--color=never" + "--no-heading" + "--with-filename" + "--line-number" + "--column" + "--smart-case" + ]; + }; + extensions.fzf-native = { + enable = true; + caseMode = "smart_case"; + fuzzy = true; + overrideFileSorter = true; + overrideGenericSorter = true; + }; + }; + + # Surrounding pairs + surround.enable = true; # Change surrounding pairs (e.g. brackets, quotes) + + # Language Server + lsp = { + enable = true; + keymaps = { + silent = true; + diagnostic = { + "e" = "open_float"; + "[e" = "goto_prev"; + "]e" = "goto_next"; + }; + lspBuf = { + "gD" = "declaration"; + "K" = "hover"; + "gi" = "implementation"; + "" = "signature_help"; + "wa" = "add_workspace_folder"; + "wr" = "remove_workspace_folder"; + # "wl" = "list_workspace_folder"; + # TODO Full thing was function() print(vim.inspect(vim.lsp.buf.list_workspace_folder())) end but not sure I'm ever really using this + # Also makes nvim crash like this, so uncommented + "D" = "type_definition"; + "rn" = "rename"; + "f" = "format"; + # TODO Full thing was function() vim.lsp.buf.format { async = true } end, so async while this isn't + # Maybe replace this with lsp-format? + }; + }; + servers = { + ansiblels.enable = config.frogeye.dev.ansible; # Ansible + bashls.enable = true; # Bash + jsonls.enable = true; # JSON + lua-ls.enable = true; # Lua (for Neovim debugging) + perlpls.enable = config.frogeye.dev.perl; # Perl + pylsp = { + # Python + enable = config.frogeye.dev.python; + settings.plugins = { + black.enabled = true; + flake8 = { + enabled = true; + maxLineLength = 88; # Compatibility with Black + }; + isort.enabled = true; + mccabe.enabled = true; + pycodestyle = { + enabled = true; + maxLineLength = 88; # Compatibility with Black + }; + pyflakes.enabled = true; + pylint.enabled = true; + pylsp_mypy = { + enabled = true; + overrides = [ + "--cache-dir=${config.xdg.cacheHome}/mypy" + "--ignore-missing-imports" + "--disallow-untyped-defs" + "--disallow-untyped-calls" + "--disallow-incomplete-defs" + "--disallow-untyped-decorators" + true + ]; + }; + # TODO Could add some, could also remove some + }; + }; + phpactor.enable = config.frogeye.dev.php; # PHP + rnix-lsp.enable = true; # Nix + # TODO Something for SQL. sqls is deprecated, sqlls is not in Nixpkgs. Probably needs a DB connection configured anyways? + yamlls.enable = true; # YAML + # TODO Check out none-ls + }; + onAttach = '' + vim.api.nvim_buf_set_option(bufnr, 'omnifunc', 'v:lua.vim.lsp.omnifunc') + ''; # Seems needed for auto-completion with nvim-compe + }; + nvim-lightbulb = { + # Shows a lightbulb whenever a codeAction is available under the cursor + enable = true; + autocmd.enabled = true; + }; + lspkind.enable = true; # Add icons to LSP completions + + # Treesitter + treesitter = { + # Allows for better syntax highlighting + enable = true; + incrementalSelection = { + enable = true; + }; + # indent = true; # Not very working last time I tried apparently + }; + # TODO Investigate https://github.com/nvim-treesitter/nvim-treesitter-textobjects + indent-blankline.enable = true; # TODO integrate with rainbow-delimiters and use more of the options + + undotree.enable = true; # Navigate edition history + + # Git + fugitive.enable = true; # Git basics + gitsigns.enable = true; # Show changed lines in the gutter + + # Language-specific + # dap.enable = true; # Debug Adapter Protocol client # 23.11 + nvim-colorizer.enable = true; # Display colors of color-codes + }; + extraPlugins = with pkgs.vimPlugins; [ + nvim-scrollview # Scroll bar + + # Status line + feline-nvim # Customizable status line. + # TODO Abandonned. Maybe use lualine? + + # Search/replace + vim-abolish # Regex for words, with case in mind + vim-easy-align # Aligning lines around a certain character + + # Surrounding pairs + targets-vim # Better interaction with surrounding pairs + + # f/F mode + vim-shot-f # Highlight relevant characters for f/F/t/T modes + quick-scope # Highlight relevant characters for f/F modes one per word but always + + # Registers + registers-nvim # Show register content when pressing " + # TODO Doesn't work. Didn't work on Arch either + + # Tags + vim-gutentags # Generate tags + symbols-outline-nvim # Show a symbol panel on the right + # TODO Fails on startup. Same on Arch. Config issue? + + # Language server + lsp_signature-nvim # Show argument definition when typing a function + + # Treesitter + nvim-ts-rainbow # Randomly color parenthesis pairs + # TODO Replace with plugins.rainbow-delimiters + + # Snippets + vim-vsnip + vim-vsnip-integ + friendly-snippets + + # Auto-completion + nvim-compe + # TODO Archived. Maybe use nvim-cmp and plugins instead? + + # Git + fugitive-gitlab-vim # Open files in GitLab + # TODO Connect it! + + # Language-specific + tcomment_vim # Language-aware (un)commenting + ] ++ lib.optionals config.frogeye.extra [ + vim-LanguageTool # Check grammar for human languages + ] ++ lib.optionals config.programs.pandoc.enable [ + vim-pandoc # Pandoc-specific stuff because there's no LSP for it + vim-pandoc-syntax + ] ++ lib.optionals config.frogeye.dev.ansible [ + ansible-vim # TODO Doesn't have snippets + ]; + extraConfigLua = lib.strings.concatMapStringsSep "\n" (f: builtins.readFile f) [ + ./feline.lua + ./symbols-outline-nvim.lua + ./lsp_signature-nvim.lua + ./nvim-ts-rainbow.lua + ./nvim-compe.lua + ]; + extraConfigVim = '' + " GENERAL + + " Avoid showing message extra message when using completion + set shortmess+=c + + command Reload source $MYVIMRC + + " PLUGINS + + " vim-gutentags + let g:gutentags_cache_dir = expand('~/.cache/nvim/tags') + + " nvim-compe + " Copy-pasted because I couldn't be bothered + set completeopt=menuone,noselect + + inoremap compe#complete() + inoremap compe#confirm('') + inoremap compe#close('') + inoremap compe#scroll({ 'delta': +4 }) + inoremap compe#scroll({ 'delta': -4 }) + + '' + lib.optionalString config.frogeye.extra '' + " languagetool + let g:languagetool_cmd = "${pkgs.languagetool}/bin/languagetool-commandline" + " TODO Doesn't work + + '' + lib.optionalString config.programs.pandoc.enable '' + " vim-pandox + let g:pandoc#modules#disabled = ["folding"] + let g:pandoc#spell#enabled = 0 + let g:pandoc#syntax#conceal#use = 0 + + ''; + autoCmd = [ + # Turn off relativenumber only for insert mode + { event = "InsertEnter"; pattern = "*"; command = "set norelativenumber"; } + { event = "InsertLeave"; pattern = "*"; command = "set relativenumber"; } + + # vim-easy-align: Align Markdown tables + { event = "FileType"; pattern = "markdown"; command = "vmap :EasyAlign*"; } + ]; + + userCommands = { + # Reload = { command = "source $MYVIRMC"; }; + # TODO Is not working, options is set to nil even though it shouldn't + }; + + keymaps = [ + # GENERAL + + # Allow saving of files as sudo when I forgot to start vim using sudo. + # From https://stackoverflow.com/a/7078429 + { mode = "c"; key = "w!!"; action = "w !sudo tee > /dev/null %"; } + + { mode = "i"; key = "jk"; action = ""; } + { mode = "v"; key = ""; action = ""; } + { key = ""; action = "o"; } + + # { key = ""; action = ":bp"; } + # { key = ""; action = ":bn"; } + { key = ""; action = "kkkkkkkkkkkkkkkkkkkkk"; } + { key = ""; action = "jjjjjjjjjjjjjjjjjjjjj"; } + + # \s to replace globally the word under the cursor + { key = "s"; action = ":%s/\\<\\>/"; } + + # PLUGINS + + # barbar + { key = ""; action = "BufferPrevious"; options = { silent = true; }; } + { key = ""; action = "BufferNext"; options = { silent = true; }; } + # TODO https://www.reddit.com/r/neovim/comments/mbj8m5/how_to_setup_ctrlshiftkey_mappings_in_neovim_and/ + { key = ""; action = "BufferMovePrevious"; options = { silent = true; }; } + { key = ""; action = "BufferMoveNext"; options = { silent = true; }; } + # TODO gotos don't work + { key = ""; action = "BufferGoto 1"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 2"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 3"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 4"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 5"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 6"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 7"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 8"; options = { silent = true; }; } + { key = ""; action = "BufferGoto 9"; options = { silent = true; }; } + { key = ""; action = "BufferLast"; options = { silent = true; }; } + { key = "gb"; action = "BufferPick"; options = { silent = true; }; } + # TODO Other useful options? + + # symbols-outline-nvim + { key = "s"; action = "SymbolsOutline"; options = { silent = true; }; } + + # undotree + { key = "u"; action = "UndotreeToggle"; options = { silent = true; }; } + + ]; + }; + }; +}