-- Enable LSP servers vim.lsp.enable({ "ts_ls", "lua_ls", "tailwindcss", "eslint", "rust_analyzer", "gopls", "html", "cssls", "basedpyright", "bashls", "css_variables", "cssmodules_ls", "dockerls", "jsonls", "lemminx", "marksman", "nginx_language_server", "taplo", "yamlls", }) -- Configure diagnostic display with custom signs vim.diagnostic.config({ float = { focusable = true, style = "minimal", border = "rounded", source = true, -- Show source in diagnostic popup window header = "", prefix = "", }, virtual_text = false, virtual_lines = false, signs = { text = { [vim.diagnostic.severity.ERROR] = " ", [vim.diagnostic.severity.WARN] = " ", [vim.diagnostic.severity.HINT] = " ", [vim.diagnostic.severity.INFO] = " ", }, }, underline = true, update_in_insert = false, severity_sort = true, }) -- Enable inlay hints vim.lsp.inlay_hint.enable(false) -- Create default capabilities without cmp local lsp_capabilities = vim.lsp.protocol.make_client_capabilities() vim.lsp.config("*", { capabilities = lsp_capabilities, }) -- Add additional capabilities supported by blink-cmp local blink_status_ok, blink = pcall(require, "blink.cmp") if blink_status_ok then local ext_capabilities = vim.tbl_deep_extend("force", {}, lsp_capabilities, blink.get_lsp_capabilities()) -- Configure LSP servers using the new vim.lsp.config syntax -- Default configuration for all servers vim.lsp.config("*", { capabilities = ext_capabilities, }) end local keymap = vim.keymap vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) -- Buffer local mappings. -- See `:help vim.lsp.*` for documentation on any of the below functions local opts = { buffer = ev.buf, silent = true } -- set keybinds opts.desc = "Show LSP references" keymap.set("n", "gr", "FzfLua lsp_references", opts) opts.desc = "Go to declaration" keymap.set("n", "gD", vim.lsp.buf.declaration, opts) opts.desc = "Show LSP definitions" keymap.set("n", "gd", "FzfLua lsp_definitions", opts) opts.desc = "Show LSP implementations" keymap.set("n", "gi", "FzfLua lsp_implementations", opts) opts.desc = "Show LSP type definitions" keymap.set("n", "gt", "FzfLua lsp_typedefs", opts) opts.desc = "See available code actions" keymap.set({ "n", "v" }, "ca", vim.lsp.buf.code_action, opts) opts.desc = "Smart rename" keymap.set("n", "lr", vim.lsp.buf.rename, opts) opts.desc = "Show buffer diagnostics" keymap.set("n", "D", "FzfLua diagnostics_document", opts) opts.desc = "Show line diagnostics" keymap.set("n", "gl", vim.diagnostic.open_float, opts) opts.desc = "Go to previous diagnostic" keymap.set("n", "dk", function() vim.diagnostic.jump({ count = -1, float = true }) end, opts) opts.desc = "Go to next diagnostic" keymap.set("n", "dj", function() vim.diagnostic.jump({ count = 1, float = true }) end, opts) opts.desc = "Show documentation for what is under cursor" keymap.set("n", "K", vim.lsp.buf.hover, opts) end, })