diff --git a/home/editors/neovim/default.nix b/home/editors/neovim/default.nix index 933367d..b2f7d06 100644 --- a/home/editors/neovim/default.nix +++ b/home/editors/neovim/default.nix @@ -21,7 +21,10 @@ let EOF ''; in { - home.packages = with pkgs; [ graphviz ]; + home.packages = with pkgs; [ + gcc # required for nvim-treesitter + graphviz + ]; programs.neovim = { enable = true; @@ -36,7 +39,6 @@ in { lightline-vim nerdtree vim-startify - vim-polyglot vim-visual-multi vim-surround vim-commentary @@ -49,9 +51,14 @@ in { vim-closetag auto-pairs camelcasemotion - argtextobj-vim wmgraphviz-vim + # use :TSInstall & :TSUpdate to manage parsers + nvim-treesitter + nvim-treesitter-context + nvim-treesitter-refactor + nvim-treesitter-textobjects + nvim-lspconfig # nvim-dap @@ -63,10 +70,11 @@ in { readFile ./init.vim # + readFile ./vim-surround-fix.vim + readFile ./which-key.vim + readFile ./test.vim + vimLua (readFile ./lsp/extensions.lua) + readFile ./lsp/lsp.vim - + vimLua (readFile ./lsp/lsp.lua); + + vimLua (readFile ./lsp/lsp.lua) + vimLua (readFile ./treesitter.lua); withNodeJs = true; withPython = false; }; + xdg.configFile."nvim/filetype.vim".source = ./filetype.vim; xdg.configFile."nvim/scripts.vim".source = ./scripts.vim; } diff --git a/home/editors/neovim/filetype.vim b/home/editors/neovim/filetype.vim new file mode 100644 index 0000000..2a590d6 --- /dev/null +++ b/home/editors/neovim/filetype.vim @@ -0,0 +1,2 @@ +au BufRead,BufNewFile *.nix set filetype=nix + diff --git a/home/editors/neovim/treesitter.lua b/home/editors/neovim/treesitter.lua new file mode 100644 index 0000000..c3eceec --- /dev/null +++ b/home/editors/neovim/treesitter.lua @@ -0,0 +1,47 @@ +-- TODO install parsers declaratively instead of :TSInstall & :TSUpdate + +require'nvim-treesitter.configs'.setup { + ensure_installed = 'all', + highlight = { + enable = true, + }, + indent = { + enable = true, + }, + refactor = { + highlight_definitions = { enable = true }, + highlight_current_scope = { enable = true }, + navigation = { + enable = true, + keymaps = { + goto_definition_lsp_fallback = "gnd", + list_definitions = "gnD", + list_definitions_toc = "gO", + goto_next_usage = "", + goto_previous_usage = "", + }, + }, + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "", + scope_incremental = "", + node_incremental = "", + node_decremental = "", + }, + }, + textobjects = { + select = { + enable = true, + keymaps = { + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + ["aa"] = "@parameter.outer", + ["ia"] = "@parameter.inner", + }, + }, + }, +}