{ ... }: { # Configure nixvim programs.nixvim = { enable = true; globals.mapleader = " "; opts = { number = true; shiftwidth = 2; tabstop = 2; expandtab = true; }; clipboard.register = "unnamedplus"; keymaps = [ { action = "Neotree toggle"; key = "b"; mode = [ "n" ]; options.silent = true; options.desc = "Toggle Neotree"; } { action = "h"; key = "h"; mode = [ "n" ]; options.silent = true; options.desc = "Focus left"; } { action = "l"; key = "l"; mode = [ "n" ]; options.silent = true; options.desc = "Focus right"; } { action = "j"; key = "j"; mode = [ "n" ]; options.silent = true; options.desc = "Focus down"; } { action = "k"; key = "k"; mode = [ "n" ]; options.silent = true; options.desc = "Focus up"; } ]; plugins = { lualine.enable = true; lsp-lines.enable = true; lsp-format.enable = true; lsp = { enable = true; inlayHints = true; servers = { html.enable = true; lua_ls.enable = true; nil_ls.enable = true; ts_ls.enable = true; marksman.enable = true; pyright.enable = true; gopls.enable = true; terraformls.enable = true; jsonls.enable = true; yamlls.enable = true; rust_analyzer = { enable = true; installRustc = true; installCargo = true; settings = { cargo = { features = "all"; }; }; }; }; keymaps = { silent = true; lspBuf = { gd = { action = "definition"; desc = "Goto Definition"; }; gr = { action = "references"; desc = "Goto References"; }; gD = { action = "declaration"; desc = "Goto Declaration"; }; gI = { action = "implementation"; desc = "Goto Implementation"; }; gT = { action = "type_definition"; desc = "Type Definition"; }; K = { action = "hover"; desc = "Hover"; }; "cw" = { action = "workspace_symbol"; desc = "Workspace Symbol"; }; "r" = { action = "rename"; desc = "Rename"; }; }; diagnostic = { "cd" = { action = "open_float"; desc = "Line Diagnostics"; }; "]d" = { action = "goto_next"; desc = "Next Diagnostic"; }; "[d" = { action = "goto_prev"; desc = "Previous Diagnostic"; }; }; }; }; neo-tree = { enable = true; }; # neo-tree dependency web-devicons.enable = true; cmp = { enable = true; autoEnableSources = true; settings = { sources = [ { name = "nvim_lsp"; } { name = "path"; } { name = "buffer"; } { name = "luasnip"; } ]; mapping = { "" = "cmp.mapping.complete()"; "" = "cmp.mapping.scroll_docs(-4)"; "" = "cmp.mapping.close()"; "" = "cmp.mapping.scroll_docs(4)"; "" = "cmp.mapping.confirm({ select = true })"; "" = "cmp.mapping(cmp.mapping.select_prev_item(), {'i', 's'})"; "" = "cmp.mapping(cmp.mapping.select_next_item(), {'i', 's'})"; }; }; }; }; extraConfigLua = '' local _border = "rounded" vim.lsp.config('*', { handlers = { ["textDocument/hover"] = { border = _border, }, ["textDocument/signatureHelp"] = { border = _border, }, }, }) vim.diagnostic.config({ float = { border = _border, }, }) ''; colorschemes.catppuccin = { enable = true; settings.flavour = "frappe"; }; }; }