/nil

Yet another language server for Nix

Primary LanguageRustApache License 2.0Apache-2.0

nil: Yet another language server for Nix

CI

🚧 This project is under development, but be happy to try it out!

Super fast incremental analysis! Scans all-packages.nix in less than 0.1s and completes with no delay!

Features

See release notes for change log between tagged unstable versions.

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

Installation

This program is already included in NixOS/nixpkgs under attribute nil, and are regularly updated.

  • If you use nix-env, run nix-env -iA nixpkgs.nil
  • If you use nix profile, run nix profile install nixpkgs#nil

Flake

This repo is also packaged via Nix flakes, the language server binary package is available through the default flake output github:oxalica/nil# with the path bin/nil.

You can enable flakes support in your nix configuration, and then run nix profile install github:oxalica/nil to get nil installed. You can also use this repository as a flake input and add its output to your own flake-managed systemwide or home configuration.

Flake output structure:

β”œβ”€β”€β”€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.

See also the example config for testing.

Vim/Neovim via coc.nvim

Merge this setting into your coc-settings.json, which can be opened by :CocConfig.

{
  "languageserver": {
    "nix": {
      "command": "nil",
      "filetypes": ["nix"],
      "rootPatterns":  ["flake.nix"]
    }
  }
}

See also the example config for testing.

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

For vscode Nix IDE user

Modify the extension's settings in your settings.json

{
  // ...
  "nix.serverPath": "nil"
}

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.