1
1
mirror of https://github.com/oxalica/nil.git synced 2024-11-23 03:57:06 +03:00
Yet another language server for Nix
Go to file
2022-11-28 00:57:20 +08:00
.github/workflows Clarify build requirements and add CI 2022-09-27 22:23:22 +08:00
crates Fix highlight kind 2022-11-28 00:57:20 +08:00
dev Allow disable diagnostics for some files 2022-11-25 23:42:43 +08:00
docs Impl documentHighlight 2022-11-28 00:40:58 +08:00
.gitignore Add overlays to flake 2022-09-25 17:14:20 +08:00
Cargo.lock Remove rowan dependency from crates except syntax 2022-11-26 17:58:00 +08:00
Cargo.toml Fix typo: release doesn't need debuginfo 2022-11-23 21:56:27 +08:00
default.nix Fix flake-compat in CI 2022-09-22 22:00:32 +08:00
flake.lock Update dependencies 2022-11-23 20:06:27 +08:00
flake.nix Fix rust 1.64 compatibility 2022-11-24 19:20:42 +08:00
LICENSE-APACHE Licenses 2022-08-01 09:12:08 +08:00
LICENSE-MIT Licenses 2022-08-01 09:12:08 +08:00
README.md Update README 2022-11-25 23:46:34 +08:00
rustfmt.toml Enforce merging of "use" stmts 2022-08-02 03:27:55 +08:00
shell.nix Fix flake-compat in CI 2022-09-22 22:00:32 +08:00

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!

Feature list & references

See release notes for change log between tagged unstable versions.

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 already included in NixOS/nixpkgs under attribute nil, and are regularly updated.

Note: This package requires a relatively new version of Rust to compile. You need at least nixpkgs-unstable to build it.

  • 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.62
    2. Install nix >= 2.4 and make the binary nix available from your PATH.
    3. Build and install via cargo install --git https://github.com/oxalica/nil 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 with 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"],
      // Uncomment these to tweak settings.
      // "settings": {
      //   "nil": {
      //     "formatting": { "command": ["nixpkgs-fmt"] }
      //   }
      // }
    }
  }
}

See also 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 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": ["nixpkgs-fmt"] }
  //   }
  // }
}

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.