{ pkgs, lib, ... }: { programs.nixvim = { extraPackages = with pkgs; [ nixfmt-rfc-style ]; plugins = { luasnip = { enable = true; }; lsp-status = { enable = true; }; schemastore = { enable = true; json.enable = true; yaml.enable = true; }; lsp = { enable = true; capabilities = # lua ''capabilities.textDocument.completion.completionItem.snippetSupport = true''; inlayHints = true; servers = { basedpyright = { enable = true; # Python settings = { pyright.disableOrganizeImports = true; }; }; ruff.enable = true; # Python csharp_ls.enable = true; nil_ls = { enable = true; # Nix settings.formatting.command = [ "${lib.getExe pkgs.nixfmt-rfc-style}" ]; }; luau_lsp = { enable = true; package = pkgs.callPackage ../../../packages/luau-lsp.nix { inherit pkgs; }; }; html.enable = true; jsonls.enable = true; yamlls.enable = true; taplo.enable = true; # TOML cssls.enable = true; tailwindcss.enable = true; dockerls.enable = true; docker_compose_language_service.enable = true; bashls.enable = true; denols.enable = true; # JavaScript / TypeScript (Deno) eslint.enable = true; # JavaScript / TypeScript typos_lsp.enable = true; }; preConfig = # lua '' vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup('lsp_attach_disable_ruff_hover', { clear = true }), callback = function(args) local client = vim.lsp.get_client_by_id(args.data.client_id) if client == nil then return end if client.name == 'ruff' then -- Disable hover in favor of basedpyright client.server_capabilities.hoverProvider = false end end, desc = 'LSP: Disable hover capability from Ruff', }) ''; }; trouble = { enable = true; settings = { auto_refresh = true; }; }; }; keymaps = [ { mode = "n"; key = "x"; action = ":Trouble"; options = { desc = "Trouble"; silent = true; }; } { mode = "n"; key = "xx"; action = ":Trouble diagnostics toggle"; options = { desc = "Diagnostics (Trouble)"; silent = true; }; } { mode = "n"; key = "xX"; action = ":Trouble diagnostics toggle filter.buf=0"; options = { desc = "Buffer Diagnostics (Trouble)"; silent = true; }; } { mode = "n"; key = "xs"; action = ":Trouble symbols toggle focus=false"; options = { desc = "Symbols (Trouble)"; silent = true; }; } { mode = "n"; key = "xd"; action = ":Trouble lsp_definitions toggle"; options = { desc = "LSP Definitions / references / ... (Trouble)"; silent = true; }; } { mode = "n"; key = "xl"; action = ":Trouble loclist toggle"; options = { desc = "Location List (Trouble)"; silent = true; }; } { mode = "n"; key = "xq"; action = ":Trouble qflist toggle"; options = { desc = "Quickfix (Trouble)"; silent = true; }; } ]; }; }