{ lib, pkgs, ... }: { programs.nixvim = { extraConfigLuaPre = # lua '' vim.fn.sign_define("DiagnosticSignError", { text = " ", texthl = "DiagnosticError", linehl = "", numhl = "" }) vim.fn.sign_define("DiagnosticSignWarn", { text = " ", texthl = "DiagnosticWarn", linehl = "", numhl = "" }) vim.fn.sign_define("DiagnosticSignHint", { text = " 󰌵", texthl = "DiagnosticHint", linehl = "", numhl = "" }) vim.fn.sign_define("DiagnosticSignInfo", { text = " ", texthl = "DiagnosticInfo", linehl = "", numhl = "" }) ''; plugins = { lspkind.enable = true; lsp-lines.enable = true; lsp-format.enable = false; # conform-nvim does this lsp = { enable = true; keymaps = { silent = true; diagnostic = { # Navigate in diagnostics "lp" = "goto_prev"; "ln" = "goto_next"; }; extra = [ { action.__raw = # lua '' function() vim.lsp.buf.format({ async = true, range = { ["start"] = vim.api.nvim_buf_get_mark(0, "<"), ["end"] = vim.api.nvim_buf_get_mark(0, ">"), } }) end ''; mode = "v"; key = "lf"; options = { desc = "Format selection"; }; } ]; lspBuf = { "la" = "code_action"; "ld" = "definition"; "lf" = "format"; "lD" = "references"; "lt" = "type_definition"; "li" = "implementation"; "lh" = "hover"; "lr" = "rename"; }; }; servers = { nil-ls = { enable = true; filetypes = ["nix"]; settings = { formatting = { command = ["${lib.getExe pkgs.nixfmt-rfc-style}"]; }; }; }; pyright.enable = true; hls.enable = true; leanls.enable = true; }; }; which-key.settings.spec = [ { __unkeyed = "l"; group = " LSP"; } { __unkeyed = "la"; desc = "Code Action"; } { __unkeyed = "ld"; desc = "Definition"; } { __unkeyed = "lD"; desc = "References"; } { __unkeyed = "lf"; desc = "Format"; } { __unkeyed = "lp"; desc = "Prev"; } { __unkeyed = "ln"; desc = "Next"; } { __unkeyed = "lt"; desc = "Type Definition"; } { __unkeyed = "li"; desc = "Implementation"; } { __unkeyed = "lh"; desc = "Hover"; } { __unkeyed = "lr"; desc = "Rename"; } ]; }; }; }