{ ... }: { programs.nixvim = { plugins = { treesitter = { enable = true; settings = { auto_install = true; highlight = { additional_vim_regex_highlighting = true; custom_captures = { }; enable = true; }; incremental_selection = { enable = true; keymaps = { init_selection = false; node_decremental = "grm"; node_incremental = "grn"; scope_incremental = "grc"; }; }; indent = { enable = true; }; parser_install_dir = { __raw = "vim.fs.joinpath(vim.fn.stdpath('data'), 'treesitter')"; }; }; }; treesitter-context.enable = true; indent-blankline.enable = true; lsp = { enable = true; servers = { gopls.enable = true; nixd.enable = true; lua-ls.enable = true; }; }; cmp = { enable = true; autoEnableSources = true; settings = { mapping = { "" = "cmp.mapping.complete()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm({ select = true })"; "" = '' cmp.mapping(function (fallback) local luasnip = require('luasnip') if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, {'i', 's'}) ''; "" = '' cmp.mapping(function (fallback) local luasnip = require('luasnip') if luasnip.expandable() then luasnip.expand() elseif cmp.visible() then cmp.select_next_item() elseif luasnip.jumpable(1) then luasnip.jump(1) else fallback() end end, {'i', 's'}) ''; }; sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } { name = "luasnip"; } ]; }; }; cmp-nvim-lsp.enable = true; cmp-nvim-lsp-signature-help.enable = true; telescope = { enable = true; }; luasnip.enable = true; friendly-snippets.enable = true; }; }; }