dav009 / rnix-lsp

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

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

rnix-lsp Crates.io Chat on Matrix Build status

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.

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

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

Install

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

Integrate with your editor

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.

Vim/Neovim

coc.nvim

{
  "languageserver": {
    "nix": {
      "command": "rnix-lsp",
      "filetypes": [
        "nix"
      ]
    }
  }
}

LanguageClient-neovim

let g:LanguageClient_serverCommands = {
    \ 'nix': ['rnix-lsp']
\ }

vim-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

Emacs

doom

For eglot use (lsp +eglot)

;; init.el
(doom! :tools
       lsp
       
       :lang
       (nix +lsp))

lsp-mode

(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))

eglot

(add-to-list 'eglot-server-programs '(nix-mode . ("rnix-lsp")))

Kakoune

kak-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.

VSCode

vscode-nix-ide

{
    "nix.enableLanguageServer": true
}

RIP jd91mzm2

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.

About

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

License:MIT License


Languages

Language:Rust 97.2%Language:Nix 2.6%Language:Vim Script 0.2%