Modernize Neovim LSP setup to the native 0.11 stack#25
Merged
Conversation
Drop lsp-zero and the archived nvim-lsp-installer in favour of Neovim
0.11's built-in LSP. mason-lspconfig v2 now auto-enables the servers it
installs, so the old `handlers`/`default_setup` coupling is gone.
- mason repos moved to the mason-org org (williamboman is deprecated).
- Completion capabilities applied via vim.lsp.config('*', ...).
- lua_ls runtime settings via vim.lsp.config('lua_ls', ...).
- LSP keymaps reimplemented on LspAttach, preserving the previous
lsp-zero bindings (K, gd, gD, gi, go, gr, gs, <F2>, <F4>).
Validated in an isolated headless Neovim: plugins sync, init loads with
no errors, and lua_ls attaches to a Lua buffer with the keymaps applied.
RWejlgaard
added a commit
that referenced
this pull request
Jun 25, 2026
Two leftovers from the lsp-zero removal in #25: - Unify nvim-web-devicons on the nvim-tree/ repo. barbar and trouble still pulled the old kyazdani42/ name, loading the same plugin twice under two identities. - Settle on a single snippet engine. cmp expanded via vsnip while LuaSnip + friendly-snippets loaded and did nothing (friendly-snippets are LuaSnip-format, so they never reached completion). Drop vim-vsnip, expand via luasnip, lazy_load the friendly-snippets library, and add the luasnip cmp source so the snippets actually surface.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Migrates the Neovim LSP config off the deprecated machinery onto Neovim 0.11's built-in LSP.
Why
williamboman/nvim-lsp-installerwas archived in early 2023 and fully superseded by mason — it was dead, redundant weight (require("nvim-lsp-installer").setup{}alongside a working mason setup).williamboman/*mason repos moved to themason-org/*org.handlersAPI and now auto-enables installed servers viavim.lsp.enable(), so thelsp_zero.default_setupcoupling no longer applies.What changed
mason-org/mason.nvim+mason-org/mason-lspconfig.nvim(withensure_installed), dropped lsp-zero and nvim-lsp-installer, and split nvim-cmp into its own spec carrying the completion deps.vim.lsp.config('*', { capabilities = ... }).lua_lsruntime/vim-global settings viavim.lsp.config('lua_ls', ...).LspAttach, preserving the previous lsp-zero bindings (K,gd,gD,gi,go,gr,gs,<F2>,<F4>) so muscle memory is unchanged.Validation
Ran in an isolated headless Neovim (separate XDG dirs, real config untouched):
Lazy! syncinstalls all plugins, exit 0.init.lualoads with no Lua errors;vim.lsp.configforlua_ls+*, mason, mason-lspconfig, and cmp all register; lsp-zero and nvim-lsp-installer are gone..luabuffer →lua_lsattaches and thegdkeymap is set buffer-locally.No keybinding or feature changes for day-to-day use; this is a dependency/API modernization.