{ pkgs, helpers, ... }: { plugins.lsp = { enable = true; servers = { cmake = { enable = true; }; clangd = { enable = true; }; pyright = { enable = true; }; nixd = { enable = true; }; }; inlayHints = true; keymaps = { silent = true; lspBuf = { gd = { action = "definition"; desc = "Goto Definition"; }; gA = { 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"; }; "" = { 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"; }; }; }; onAttach = '' require("lsp_signature").on_attach({ bind = true, handler_opts = { border = "rounded" }; }, bufnr) ''; }; keymaps = [ { mode = [ "n" ]; key = "th"; action = helpers.mkRaw '' function() vim.lsp.inlay_hint.enable(not vim.lsp.inlay_hint.is_enabled()) end ''; options = { desc = "Toggle inlay hints"; }; } ]; extraConfigLua = '' require("lspconfig").asm_lsp.setup { filetypes = { "asm", "s", "S" } } require("lspconfig").verible.setup { } ''; extraPlugins = with pkgs.vimPlugins; [ lsp_signature-nvim ]; extraPackages = with pkgs; [ asm-lsp verible ]; }