Repository navigation
Languages
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.
| 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.
- Add
server_name = "mason-package"to theserverstable inlua/plugins/lsp.lua. - If you need custom settings, add a
vim.lsp.config["server_name"] = { … }block next to the existing ones. - Restart Neovim: Mason installs the package and the server starts.
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) |
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" }).
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.