Skip to content

meta-introspector/nil

 
 

Repository files navigation

nil: Nix Language server

CI

An incremental analysis assistant for writing in Nix.

See release notes for changelog between releases.

See docs/features.md for an incomplete list of notable features currently implemented or planned.

See docs/configuration.md for all tunable configuration options.

Installation

This program is available in NixOS/nixpkgs under attribute nil, and is regularly updated.

  • If you use nix-env, run nix-env -iA nixpkgs.nil
  • If you use nix profile, run nix profile install nixpkgs#nil
  • If you want to compile it from source:
    1. Install stable Rust toolchain >= 1.77
    2. Install nix >= 2.4 and make sure the binary nix is in your PATH.
    3. Build and install via cargo install --git https://github.com/oxalica/nil nil

Install with Flake

This repo is also packaged via Nix flakes. The language server package is available in the default flake output github:oxalica/nil#, under bin/nil.

To install, run nix profile install github:oxalica/nil. Alternatively, you can use this repository as a flake input, and add its output to your own flake-managed system-wide and/or home configurations.

Disclaimer: The flake.lock we ship is tested in CI. If you use follows to override flake inputs, we do not guarantee that it will build.

Flake output structure (not necessarily up-to-date):

├───devShells │ └───(...) └───packages ├───x86_64-linux │ ├───default: package 'nil-unstable-2022-08-04' │ └───nil: package 'nil-unstable-2022-08-04' └───(...) 

Editor integration

Neovim native LSP and nvim-lspconfig

We are officially supported by nvim-lspconfig, see upstream docs, also the example config for testing.

⚠️ There is a known performance issue for semantic highlighting with neovim native LSP. See more details in oxalica#83

Vim/Neovim with coc.nvim

Merge this setting into your coc-settings.json (open with :CocConfig).

{ "languageserver": { "nix": { "command": "nil", "filetypes": ["nix"], "rootPatterns": ["flake.nix"], // Uncomment these to tweak settings. // "settings": { // "nil": { // "formatting": { "command": ["nixfmt"] } // } // } } } }

See the example config for testing.

Vim with vim-lsp

Add the following code to your ~/.vimrc to register the LSP server. Thanks @mitchmindtree

if executable('nil') autocmd User lsp_setup call lsp#register_server({ \ 'name': 'nil', \ 'cmd': {server_info->['nil']}, \ 'whitelist': ['nix'], \ }) endif

Emacs with lsp-mode

Add the following elisp code to your configuration. (using use-package)

(use-package lsp-mode :ensure t) (use-package lsp-nix :ensure lsp-mode :after (lsp-mode) :demand t :custom (lsp-nix-nil-formatter ["nixfmt"])) (use-package nix-mode :hook (nix-mode . lsp-deferred) :ensure t)

There are various other configurations to tweak. Refer to the specific manual page for more details.

Emacs with lsp-bridge

Add the following elisp code to your configuration.

(use-package lsp-bridge :straight '(lsp-bridge :type git :host github :repo "manateelazycat/lsp-bridge" :files (:defaults "*.el" "*.py" "acm" "core" "langserver" "multiserver" "resources") :build (:not compile)) :init (global-lsp-bridge-mode) :config (setq lsp-bridge-nix-lsp-server "nil"))

Emacs with eglot

Add the following elisp code to your configuration. (using use-package)

(use-package nix-mode) (use-package eglot :config ;; Ensure `nil` is in your PATH. (add-to-list 'eglot-server-programs '(nix-mode . ("nil"))) :hook (nix-mode . eglot-ensure))

VSCode/VSCodium with Nix IDE

Modify the extension's settings in your settings.json.

{ "nix.enableLanguageServer": true, // Enable LSP. "nix.serverPath": "nil" // The path to the LSP server executable. // Uncomment these to tweak settings. // "nix.serverSettings": { // "nil": { // "formatting": { "command": ["nixfmt"] } // } // } }

Add this to your "User Server Settings" in LSP Client configuration:

{ "servers": { "nix": { "command": ["nil"], "url": "https://github.com/oxalica/nil", "highlightingModeRegex": "^Nix$" } } }

License

"nil" is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

About

NIx Language server, an incremental analysis assistant for writing in Nix.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Rust 95.9%
  • Nix 3.6%
  • Other 0.5%