Skip to content
Oeiuwq Faith Blog OpenSource Porfolio

nix-community/rnix-lsp

WIP Language Server for Nix! [maintainer=@aaronjanse]

nix-community/rnix-lsp.json
{
"createdAt": "2018-08-19T08:43:21Z",
"defaultBranch": "master",
"description": "WIP Language Server for Nix! [maintainer=@aaronjanse]",
"fullName": "nix-community/rnix-lsp",
"homepage": "",
"language": "Rust",
"name": "rnix-lsp",
"pushedAt": "2024-01-15T11:53:04Z",
"stargazersCount": 712,
"topics": [
"lsp-server",
"nix"
],
"updatedAt": "2025-10-31T19:06:05Z",
"url": "https://github.com/nix-community/rnix-lsp"
}

A syntax-checking language server using rnix.

  • Syntax-checking diagnostics
  • Basic completion
  • Basic renaming
  • Basic goto definition
  • Expand selection proposal
  • Formatting using nixpkgs-fmt

This is beta-level quality at best - I didn’t expect maintaining a language server when writing rnix, the goal was that others would flock around the parser and write a bunch of editor tooling :)

Breakages are expected. No semver compatibility before 1.x.y.

Turn on logging with RUST_LOG=trace, and redirect stderr to a file.

Terminal window
bash -c "env RUST_LOG=trace rnix-lsp 2> /tmp/rnix-lsp.log"

Support for Mac OS is not guaranteed (see PR #61).

nix-env -i -f https://github.com/nix-community/rnix-lsp/archive/master.tar.gz

These instructions are not fully tested - see issue #3. Please raise an issue and/or send a PR if a config below didn’t work out of the box.

{
"languageserver": {
"nix": {
"command": "rnix-lsp",
"filetypes": [
"nix"
]
}
}
}
let g:LanguageClient_serverCommands = {
\ 'nix': ['rnix-lsp']
\ }
if executable('rnix-lsp')
au User lsp_setup call lsp#register_server({
\ 'name': 'rnix-lsp',
\ 'cmd': {server_info->[&shell, &shellcmdflag, 'rnix-lsp']},
\ 'whitelist': ['nix'],
\ })
endif

For eglot use (lsp +eglot)

;; init.el
(doom! :tools
lsp
:lang
(nix +lsp))
(add-to-list 'lsp-language-id-configuration '(nix-mode . "nix"))
(lsp-register-client
(make-lsp-client :new-connection (lsp-stdio-connection '("rnix-lsp"))
:major-modes '(nix-mode)
:server-id 'nix))
(add-to-list 'eglot-server-programs '(nix-mode . ("rnix-lsp")))

kak-lsp has builtin configuration since version v9.0.0:

[language.nix]
filetypes = ["nix"]
roots = ["flake.nix", "shell.nix", ".git"]
command = "rnix-lsp"

If you run into an issue regarding “missing roots” see this issue.

{
"nix.enableLanguageServer": true
}

Sadly, the original author of this project, @jD91mZM2 has passed away. His online presence was anonymous and what we have left is his code. This is but one of his many repos that he contributed to.