_inputs: { pkgs, ... }: # TODO: neodev # TODO: pandoc { programs.nixvim = { # TODO: # extraConfigLuaPost = '' # local function set_ltex_lang(lang) # local ltex = vim.lsp.get_active_clients({ name = "ltex" })[1] # if ltex == nil then # return # end # # if lang == nil then # lang = vim.opt_local.spelllang:get()[1] # end # # if lang == "en" then # lang = "en-US" # end # # ltex.config.settings.ltex.language = lang # end # # vim.api.nvim_create_user_command( # "LTeXSetLang", # function(opts) # local lang = opts.fargs[1] # set_ltex_lang(lang) # end, # { # nargs = 1, # complete = function() return { "en", "fr" } end, # } # ) # # vim.api.nvim_create_autocmd("OptionSet", { # desc = "Set LTex language on spell change", # callback = function(ev) # if ev.match ~= "spelllang" then # return # end # set_ltex_lang() # end, # }) # # vim.api.nvim_create_autocmd("LspAttach", { # desc = "Set LTex language on attach", # callback = function(ev) # local client = vim.lsp.get_client_by_id(ev.data.client_id) # if client.config.name ~= "ltex" then # return # end # set_ltex_lang() # end, # }) # ''; plugins = { # TODO: #conform-nvim.enable = true; clangd-extensions.enable = true; crates-nvim = { enable = true; extraOptions.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; # TODO: buggy with lsp-lines? ltex = { enable = true; filetypes = [ "bib" "gitcommit" "markdown" "org" "plaintex" "rst" "rnoweb" "tex" # vv Added this one vv "typst" "pandoc" "quarto" "rmd" "context" "html" "xhtml" ]; }; 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; typos_lsp.enable = true; typst_lsp = { enable = true; settings.exportPdf = "never"; }; }; }; lsp-lines = { enable = true; # TODO: seems buggy with multiple sources? # currentLine = true; }; rustaceanvim = { enable = true; settings.server = { on_attach = '' function(client, bufnr) __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; # }; }; }; }; }; }