local MP = ... local get_nixd_opts = nixInfo(nil, "info", "nixdExtras", "get_configs") return { { "mason.nvim", auto_enable = true, priority = 55, on_plugin = { "nvim-lspconfig" }, lsp = function(plugin) vim.cmd.MasonInstall(plugin.name) end, }, { "nvim-lspconfig", auto_enable = true, priority = 50, lsp = function(plugin) vim.lsp.config(plugin.name, plugin.lsp or {}) vim.lsp.enable(plugin.name) end, before = function(_) vim.lsp.config("*", { on_attach = require(MP:relpath("on_attach")), }) end, }, { "lazydev.nvim", auto_enable = true, cmd = { "LazyDev" }, ft = "lua", after = function(_) require("lazydev").setup({ library = { { words = { "uv", "vim%.uv", "vim%.loop" }, path = nixInfo("luvit-meta", "plugins", "start", "luvit-meta") .. "/library", }, { words = { "nixInfo" }, path = nixInfo("", "info_plugin_path") .. "/lua" }, { words = { "nixInfo%.lze" }, path = nixInfo("lze", "plugins", "start", "lze") .. "/lua" }, { words = { "nixInfo%.lze" }, path = nixInfo("lzextras", "plugins", "start", "lzextras") .. "/lua", }, }, }) end, }, { "rustaceanvim", auto_enable = true, lazy = false, -- lazy loaded by default before = function(_) local RustLsp = function(mode, keymap, action, bufnr) vim.keymap.set(mode, keymap, function() vim.cmd.RustLsp(action) end, { silent = true, buffer = bufnr }) end vim.g.rustaceanvim = { tools = {}, server = { on_attach = function(client, bufnr) RustLsp({ "n", "x" }, "ca", "codeAction", bufnr) RustLsp("n", "ee", "explainError", bufnr) RustLsp("n", "K", { "hover", "actions" }, bufnr) RustLsp("n", "L", { "hover", "range" }, bufnr) RustLsp("n", "", "debuggables", bufnr) end, default_settings = { ["rust-analyzer"] = { checkOnSave = { enable = true, command = "clippy", }, procMacro = { enable = true, }, }, }, }, -- dap = {}, } end, }, { "lua_ls", for_cat = "lua", lsp = { filetypes = { "lua" }, settings = { Lua = { runtime = { version = "LuaJIT" }, formatters = { ignoreComments = true, }, signatureHelp = { enabled = true }, diagnostics = { globals = { "vim", "make_test" }, disable = {}, }, workspace = { checkThirdParty = false, library = { -- '${3rd}/luv/library', -- unpack(vim.api.nvim_get_runtime_file('', true)), }, }, completion = { callSnippet = "Replace", }, telemetry = { enabled = false }, }, }, }, }, { "nixd", for_cat = "nix", after = function(_) vim.api.nvim_create_user_command("StartNilLSP", function() vim.lsp.start(vim.lsp.config.nil_ls) end, { desc = "Run nil-ls (when you really need docs for the builtins and nixd refuse)" }) end, lsp = { filetypes = { "nix" }, settings = { nixd = { nixpkgs = { expr = nixInfo("import {}", "info", "nixdExtras", "nixpkgs"), }, formatting = { command = { "nixfmt" }, }, options = { -- (builtins.getFlake "path:${builtins.toString }").legacyPackages..nixosConfigurations."".options nixos = { expr = get_nixd_opts and get_nixd_opts("nixos", nixInfo(nil, "info", "nixdExtras", "flake-path")), }, -- (builtins.getFlake "path:${builtins.toString }").legacyPackages..homeConfigurations."".options ["home-manager"] = { expr = get_nixd_opts and get_nixd_opts("home-manager", nixInfo(nil, "info", "nixdExtras", "flake-path")), -- <- if flake-path is nil it will be lsp root dir }, }, diagnostic = { suppress = { "sema-escaping-with", }, }, }, }, }, }, { "clangd", for_cat = "C", lsp = { filetypes = { "c", "cpp", "objc", "objcpp", "cuda", "proto" }, on_attach = function(client, bufnr) require(MP:relpath("on_attach"))(client, bufnr) -- the stuff they were adding that was overriding my on_attach dofile(nixInfo.utils.get_nix_plugin_path("nvim-lspconfig") .. "/lsp/clangd.lua").on_attach( client, bufnr ) end, -- unneded thanks to clangd_extensions-nvim I think -- settings = { -- clangd_config = { -- init_options = { -- compilationDatabasePath="./build", -- }, -- } -- } }, }, { "gopls", for_cat = "go", lsp = { filetypes = { "go", "gomod", "gowork", "gotmpl", "templ" }, }, }, { "zls", for_cat = "zig", lsp = { filetypes = { "zig", "zir" }, }, }, -- { -- "rust_analyzer", -- for_cat = "rust", -- lsp = { -- filetypes = { "rust" }, -- }, -- }, { "bashls", for_cat = "bash", lsp = { filetypes = { "bash", "sh" }, }, }, }