local status_ok, _ = pcall(require, "lspconfig") if not status_ok then return end require("mason").setup({ ui = { icons = { package_installed = "✓", package_pending = "➜", package_uninstalled = "✗", }, }, }) require("mason-lspconfig").setup({ ensure_installed = { "cssls", -- css "html", -- html "clangd", -- cpp / c "tsserver", -- python "texlab", -- latex "sumneko_lua", -- lua "pyright", -- python "rust_analyzer", -- rust "jdtls", -- jdtls "cmake", -- cmake "bashls", -- shell "ansiblels", -- ansible -- "omnisharp", -- dotnot -- "hls", -- haskel }, automatic_installation = true, }) local capabilities = require("cmp_nvim_lsp").default_capabilities(vim.lsp.protocol.make_client_capabilities()) local on_attach = function(client, bufnr) -- Enable completion triggered by vim.api.nvim_buf_set_option(bufnr, "omnifunc", "v:lua.vim.lsp.omnifunc") local opts = { noremap = true, silent = true, buffer=bufnr } vim.keymap.set("n", "h", "lua vim.lsp.buf.declaration()", opts) vim.keymap.set("n", "j", "lua vim.lsp.buf.definition()", opts) vim.keymap.set("n", "k", "lua vim.lsp.buf.implementation()", opts) vim.keymap.set("n", "l", "lua vim.lsp.buf.references()", opts) vim.keymap.set("n", ";", "lua vim.lsp.buf.code_action()", opts) vim.keymap.set("n", "u", "lua vim.lsp.buf.signature_help()", opts) vim.keymap.set("n", "g", "lua vim.lsp.buf.hover()", opts) end require("mason-lspconfig").setup_handlers({ function(server_name) -- default handler (optional) require("lspconfig")[server_name].setup({ capabilities = capabilities, on_attach = on_attach, }) end, })