_inputs: { pkgs, ... }: # TODO: neodev # TODO: pandoc { programs.nixvim = { plugins = { # TODO: #conform-nvim.enable = true; clangd-extensions.enable = true; crates = { enable = true; settings.null_ls.enabled = true; }; lsp = { enable = true; keymaps = { diagnostic = { "se" = { action = "open_float"; desc = "LSP diagnostic"; }; "sl" = { action = "setloclist"; desc = "LSP set loclist"; }; "sq" = { action = "setqflist"; desc = "LSP set quickfixlist"; }; }; extra = [ { key = "gd"; action = "require('telescope.builtin').lsp_definitions"; lua = true; options.desc = "LSP definitions"; } { key = "gr"; action = "require('telescope.builtin').lsp_references"; lua = true; options.desc = "LSP references"; } { key = "sd"; action = "require('lsp_lines').toggle"; lua = true; options.desc = "LSP toggle inline diagnostics"; } { key = "sE"; action = "require('telescope.builtin').diagnostics"; lua = true; options.desc = "LSP all diagnostics"; } { key = "ss"; action = "require('telescope.builtin').lsp_document_symbols"; lua = true; options.desc = "LSP document symbols"; } { key = "sS"; action = "require('telescope.builtin').lsp_workspace_symbols"; lua = true; options.desc = "LSP workspace symbols"; } ]; lspBuf = { gr = { action = "references"; desc = "LSP references"; }; # TODO setup actions-preview-nvim "sa" = { action = "code_action"; desc = "LSP code actions"; }; "sf" = { action = "format"; desc = "LSP format"; }; "si" = { action = "implementation"; desc = "LSP implementation"; }; "sr" = { action = "rename"; desc = "LSP rename"; }; "st" = { action = "type_definition"; desc = "LSP type definition"; }; }; }; onAttach = '' require("clangd_extensions.inlay_hints").setup_autocmd() require("clangd_extensions.inlay_hints").set_inlay_hints() ''; inlayHints = true; servers = { bashls.enable = true; clangd = { enable = true; extraOptions.cmd = [ "clangd" "--background-index" "--clang-tidy" "--fallback-style=WebKit" "--header-insertion-decorators" "--header-insertion=iwyu" ]; }; elixirls.enable = true; lua_ls.enable = true; # completion.callSnippet = "Replace";? marksman.enable = true; nil_ls = { enable = true; settings.formatting.command = [ "nixfmt" ]; }; pylsp.enable = true; pyright.enable = true; ruff = { enable = true; settings = { configurationPreference = "filesystemFirst"; lineLength = 100; lint = { preview = true; extendSelect = [ # Error "E" # Pyflakes "F" # Warning "W" # ISort "I" # PEP8 Naming "N" # Ruff-specific rules "RUF" ]; }; }; }; superhtml = { enable = true; package = pkgs.unstable.superhtml; }; taplo.enable = true; tinymist.enable = true; typos_lsp.enable = true; }; }; lsp-lines = { enable = true; # TODO: seems buggy with multiple sources? # currentLine = true; }; rustaceanvim = { enable = true; settings.server = { on_attach = '' function(client, bufnr) _M.lspOnAttach(client, bufnr) vim.keymap.set( -- {"n", "v"}, "n", "J", function() vim.cmd.RustLsp('joinLines') end, { silent = true, buffer = bufnr, desc = "rust-analyzer join lines", } ) vim.keymap.set( "n", "", function() vim.cmd.RustLsp({ "moveItem", "up" }) end, { silent = true, buffer = bufnr, desc = "rust-analyzer move item up", } ) vim.keymap.set( "n", "", function() vim.cmd.RustLsp({ "moveItem", "down" }) end, { silent = true, buffer = bufnr, desc = "rust-analyzer move item down", } ) vim.keymap.set( "n", "sR", function() vim.cmd.RustLsp('runnables') end, { silent = true, buffer = bufnr, desc = "rust-analyzer runnables", } ) vim.keymap.set( "n", "sx", function() vim.cmd.RustLsp('explainError') end, { silent = true, buffer = bufnr, desc = "rust-analyzer explain error", } ) end ''; # TODO? # settings.rust-analyzer = { # checkOnSave.command = "clippy"; # experimental.procAttrMacros = true; # }; }; }; todo-comments.enable = true; }; }; }