local augroup = vim.api.nvim_create_augroup("LspFormatting", {}) local on_attach = function(client, bufnr) local function nnoremap(key, command) vim.keymap.set("n", key, command, { noremap = true, silent = true, buffer = bufnr }) end local telescope = require("telescope.builtin") nnoremap("gD", vim.lsp.buf.declaration) nnoremap("gd", telescope.lsp_definitions) nnoremap("gt", telescope.lsp_type_definitions) nnoremap("gi", telescope.lsp_implementations) nnoremap("gr", telescope.lsp_references) nnoremap("K", vim.lsp.buf.hover) nnoremap("", vim.lsp.buf.signature_help) nnoremap("rn", vim.lsp.buf.rename) nnoremap("ca", vim.lsp.buf.code_action) nnoremap("f", vim.lsp.buf.formatting) nnoremap("d", telescope.diagnostics) nnoremap("", vim.diagnostic.goto_prev) nnoremap("", vim.diagnostic.goto_next) if client.supports_method("textDocument/formatting") then vim.api.nvim_clear_autocmds({ group = augroup, buffer = bufnr }) vim.api.nvim_create_autocmd("BufWritePre", { group = augroup, buffer = bufnr, callback = function() vim.lsp.buf.formatting_sync() end, }) end end local lsp_status = require("lsp-status") lsp_status.config({ current_function = false, show_filename = false, diagnostics = true, }) lsp_status.register_progress() local capabilities = vim.tbl_extend("keep", vim.lsp.protocol.make_client_capabilities(), lsp_status.capabilities) capabilities = require("cmp_nvim_lsp").update_capabilities(capabilities) local servers = { ["sumneko_lua"] = { Lua = { diagnostics = { globals = { "vim" }, }, telemetry = { enable = false, }, }, }, ["rnix"] = {}, } local lspconfig = require("lspconfig") for lsp, config in pairs(servers) do lspconfig[lsp].setup({ settings = config or {}, on_attach = on_attach, capabilities = capabilities, }) end