_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; settings.plugins.ruff.enabled = true; }; 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; trouble = { enable = true; lazyLoad.settings = { cmd = "Trouble"; keys = [ { __unkeyed-1 = "xx"; __unkeyed-2 = "Trouble diagnostics toggle"; desc = "Diagnostics (Trouble)"; } { __unkeyed-1 = "xX"; __unkeyed-2 = "Trouble diagnostics toggle filter.buf=0"; desc = "Buffer Diagnostics (Trouble)"; } { __unkeyed-1 = "cs"; __unkeyed-2 = "Trouble symbols toggle focus=false"; desc = "Symbols (Trouble)"; } { __unkeyed-1 = "cl"; __unkeyed-2 = "Trouble lsp toggle focus=false win.position=right"; desc = "LSP Definitions / references / ... (Trouble)"; } { __unkeyed-1 = "xL"; __unkeyed-2 = "Trouble loclist toggle"; desc = "Location List (Trouble)"; } { __unkeyed-1 = "xQ"; __unkeyed-2 = "Trouble qflist toggle"; desc = "Quickfix List (Trouble)"; } ]; }; }; }; }; }