Skip to content

Languages

lcfd edited this page Oct 12, 2026 · 1 revision

NaryaVim configures language servers with Neovim 0.11's native API (vim.lsp.config + vim.lsp.enable). nvim-lspconfig is only there for its default server definitions. Mason installs every server and formatter automatically.

Language servers

Server Mason package Used for
ruff ruff Python linting and code actions
ty ty Python type checking
pyright pyright Python type checking and navigation
vtsls vtsls JavaScript, TypeScript, React, Vue
eslint eslint-lsp JS/TS linting
tailwindcss tailwindcss-language-server Tailwind classes (disabled in Markdown)
html html-lsp HTML
astro astro-language-server Astro
marksman marksman Markdown links, headings, references
lua_ls lua-language-server Lua (with lazydev for Neovim APIs)
jsonls json-lsp JSON
yamlls yaml-language-server YAML
taplo taplo TOML
sqlls sqlls SQL
bashls bash-language-server Shell scripts
dockerls dockerfile-language-server Dockerfiles
docker_compose_language_service docker-compose-language-service Compose files
clangd clangd C / C++

On platforms where Mason has no build (e.g. clangd on Linux arm64), install the server with your system package manager. It's picked up from $PATH.

Adding a server

  1. Add server_name = "mason-package" to the servers table in lua/plugins/lsp.lua.
  2. If you need custom settings, add a vim.lsp.config["server_name"] = { … } block next to the existing ones.
  3. Restart Neovim: Mason installs the package and the server starts.

Formatters

Formatting runs on demand with <leader>ff, through conform.nvim. If a filetype has no formatter, the LSP formats it instead.

Filetypes Formatter
Python ruff_format
Lua stylua
JS, TS, JSX, TSX, Vue, Astro, HTML, Django templates, CSS, JSON, Markdown prettier (or prettierd)
Go gofmt (ships with Go)

Treesitter

NaryaVim uses the main branch of nvim-treesitter. It's a rewrite: the old setup({ highlight = …, indent = … }) options don't apply. Highlighting and indentation are turned on per buffer by a FileType autocmd.

These parsers are installed automatically (see config_ensure_installed.lua):

python requirements htmldjango javascript typescript tsx markdown markdown_inline yaml json dockerfile sql bash astro vue html scss go gomod gosum gotmpl gowork rust c cpp vim query lua regex gitignore http

To add one, add it to that list, or run :lua require("nvim-treesitter").install({ "lang" }).

Snippets

LuaSnip loads friendly-snippets plus the custom VS Code-style snippets in snippets/:

  • Django templates (htmldjango.json)
  • Django + HTMX (django-htmx.json)
  • Django Ninja (django-ninja.json)
  • react-hook-form (react-hook-form.json)
  • Markdown / blog front matter

Some filetypes also get another filetype's snippets: Python gets the Django ones, HTML and Django templates share theirs, and JSX/TSX, Astro and Vue get the HTML ones.

Clone this wiki locally