From eec90ad7e231feaef3f58a1b2a414ce383e69341 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 8 Dec 2023 18:35:10 +0100 Subject: [PATCH] nvim: Add automatic mason tool installation Using mason-tool-installer we ensure everything is installed correctly. Need to improve the collection of things to install. Currently we just do everything in lsp configuration file, even the non-lsp things (formatters/linters) which should be sourced where they belong not in that file. --- nvim/.config/nvim/lazy-lock.json | 1 + nvim/.config/nvim/lua/plugins/config/lsp.lua | 40 ++++++++++++++------ nvim/.config/nvim/lua/plugins/ide.lua | 5 ++- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index c7537ed..daa4876 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -40,6 +40,7 @@ "markdown-preview.nvim": { "branch": "master", "commit": "9becceee5740b7db6914da87358a183ad11b2049" }, "markmap.nvim": { "branch": "main", "commit": "3befc2a54c2448a16c30c1c7762aab263f22946a" }, "mason-lspconfig.nvim": { "branch": "main", "commit": "4eb8e15e3c0757303d4c6dea64d2981fc679e990" }, + "mason-tool-installer.nvim": { "branch": "main", "commit": "8b70e7f1e0a4119c1234c3bde4a01c241cabcc74" }, "mason.nvim": { "branch": "main", "commit": "41e75af1f578e55ba050c863587cffde3556ffa6" }, "mdeval.nvim": { "branch": "master", "commit": "2654caf8ecaad702b50199d18e39cff23d81e0ba" }, "mini.nvim": { "branch": "main", "commit": "b5645ac6eefce8e7af9d7dd4e5e296a81cba8a10" }, diff --git a/nvim/.config/nvim/lua/plugins/config/lsp.lua b/nvim/.config/nvim/lua/plugins/config/lsp.lua index 0d78738..c0af08a 100644 --- a/nvim/.config/nvim/lua/plugins/config/lsp.lua +++ b/nvim/.config/nvim/lua/plugins/config/lsp.lua @@ -17,6 +17,7 @@ local servers = { docker_compose_language_service = {}, dockerls = {}, emmet_ls = {}, + eslint = {}, gopls = {}, julials = {}, lua_ls = { @@ -42,6 +43,16 @@ local servers = { yamlls = {}, } +-- TODO installed for conform/nvim-lint so should be sourced from there not here +local to_mason = + { "stylua", "shellcheck", "shfmt", "markdownlint", "bibtex-tidy", "jq", "prettier", "ruff", unpack(servers) } +require("mason-tool-installer").setup({ + -- a list of all tools you want to ensure are installed upon + -- start + ensure_installed = to_mason, + start_delay = 3000, +}) + local function on_attach(client, bufnr) local map = vim.keymap.set map("n", "[d", "lua vim.diagnostic.goto_prev()", { buffer = bufnr, desc = "Previous diagnostic" }) @@ -118,8 +129,16 @@ end -- Display diagnostics as virtual text only if not in insert mode -- https://lr.artemislena.eu/r/neovim/comments/12inp4c/disable_diagnostics_virtual_text_when_in_insert/jqqifwk/ -vim.api.nvim_create_autocmd("InsertEnter", { callback = function() vim.diagnostic.config({ virtual_text = false, }) end }) -vim.api.nvim_create_autocmd("InsertLeave", { callback = function() vim.diagnostic.config({ virtual_text = true, }) end }) +vim.api.nvim_create_autocmd("InsertEnter", { + callback = function() + vim.diagnostic.config({ virtual_text = false }) + end, +}) +vim.api.nvim_create_autocmd("InsertLeave", { + callback = function() + vim.diagnostic.config({ virtual_text = true }) + end, +}) lsp.setup({ default_mappings = false, @@ -136,14 +155,14 @@ lspconfig.nushell.setup({}) local python_path -- ensure python virtualenv is determined automatically on lsp start lspconfig.pyright.setup({ - on_attach = function(client, bufnr) - if python_path == nil then - python_path, _ = require("util").get_python_venv(client.config.root_dir) - end - -- print(string.format("[PYTHON VENV]: %s", vim.inspect(python_path))) - client.config.settings.python.pythonPath = python_path - on_attach(client, bufnr) - end, + on_attach = function(client, bufnr) + if python_path == nil then + python_path, _ = require("util").get_python_venv(client.config.root_dir) + end + -- print(string.format("[PYTHON VENV]: %s", vim.inspect(python_path))) + client.config.settings.python.pythonPath = python_path + on_attach(client, bufnr) + end, }) lspconfig.ruff_lsp.setup({ on_attach = function(client, bufnr) @@ -161,4 +180,3 @@ if require("util").is_available("arduino") then on_new_config = require("arduino").on_new_config, }) end - diff --git a/nvim/.config/nvim/lua/plugins/ide.lua b/nvim/.config/nvim/lua/plugins/ide.lua index ca7e66b..1b67847 100644 --- a/nvim/.config/nvim/lua/plugins/ide.lua +++ b/nvim/.config/nvim/lua/plugins/ide.lua @@ -55,6 +55,9 @@ return { "williamboman/mason-lspconfig.nvim", cmd = { "LspInstall", "LspUninstall" }, }, + { + "WhoIsSethDaniel/mason-tool-installer.nvim", + }, }, event = "BufReadPost", config = function() @@ -91,7 +94,7 @@ return { end end end - per_cmd("markdownlint", { linters.markdown }) + per_cmd("markdownlint", { linters.markdown, linters.quarto }) per_cmd("vale", { linters.markdown, linters.text, linters.quarto }) per_cmd("shellcheck", { linters.sh, linters.bash }) per_cmd("eslint_d", {