Neovim LSP Servers

Up: LSP Architecture Down: platforms, language plugins

The server set is intentionally plural. Some languages work best when different tools do different jobs.

Nix

nixd gives rich Nix intelligence, including Nixpkgs and NixOS or Home Manager option awareness. Public examples should use a placeholder flake path:

settings = {
  nixd = {
    nixpkgs = {
      expr = "import (builtins.getFlake \"~/projects/flakes\").inputs.nixpkgs { }",
    },
  },
}

nil_ls is kept alongside nixd because it can format with nixfmt-rfc-style while nixd handles richer completion and option knowledge.

Lua

lua_ls is configured for Neovim Lua: LuaJIT runtime, vim global, runtime paths, and telemetry disabled. lazydev.nvim adds library awareness when editing config files.

Python

basedpyright handles Python type intelligence, auto imports, workspace diagnostics, and inlay hints.

ruff handles linting and code actions through ruff server.

ty can be enabled as another type-checking signal, but the config prunes capabilities so experimental overlap stays controlled.

The reason for pairing is simple: one server should not have to be the entire Python government.

Web And TypeScript

vtsls handles TypeScript and JavaScript language intelligence.

vue_ls handles Vue and forwards TypeScript requests to the TypeScript server. The custom glue retries until a TypeScript client is available.

eslint supports modern flat config and validates JavaScript, TypeScript, and Vue. It also runs fix-all before writes.

oxlint is faster for JS and TS checks, but it deliberately excludes Vue because Vue single-file templates need different parsing.

jsonls and yamlls use SchemaStore-backed schemas and disable telemetry where supported.

Writing, Markup, And Science

texlab runs LaTeX builds through latexmk, checks with chktex, formats with latexindent, and supports forward search through Zathura.

tinymist handles Typst export and preview refresh.

marksman handles Markdown.

ltex_plus handles prose and grammar-oriented checks.

hls handles Haskell and Cabal files.

matlab_ls supports MATLAB with telemetry disabled. Public examples should use placeholder install paths if any path is shown.

Other Domains

ruby_lsp supports Ruby, ERB, and Sonic Pi-adjacent workflows.

taplo handles TOML.

codebook can provide spelling checks across many programming and markup filetypes.

Related: platforms, LSP completion plugins