Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/oxalica/nil
NIx Language server, an incremental analysis assistant for writing in Nix.
https://github.com/oxalica/nil
lsp-server nix nixos nixpkgs
Last synced: 29 days ago
JSON representation
NIx Language server, an incremental analysis assistant for writing in Nix.
- Host: GitHub
- URL: https://github.com/oxalica/nil
- Owner: oxalica
- License: apache-2.0
- Created: 2022-07-19T08:55:08.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-09-19T03:46:34.000Z (about 2 months ago)
- Last Synced: 2024-09-28T09:01:58.048Z (about 1 month ago)
- Topics: lsp-server, nix, nixos, nixpkgs
- Language: Rust
- Homepage:
- Size: 979 KB
- Stars: 1,337
- Watchers: 9
- Forks: 40
- Open Issues: 37
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
- awesome-nix - nil - NIx Language server, an incremental analysis assistent for writing in Nix. (Development / Discovery)
README
# nil: Nix Language server
[![CI](https://github.com/oxalica/nil/actions/workflows/ci.yaml/badge.svg)](https://github.com/oxalica/nil/actions/workflows/ci.yaml)
An incremental analysis assistant for writing in Nix.
See [release notes](https://github.com/oxalica/nil/releases) for changelog between releases.
See [`docs/features.md`](docs/features.md) for an incomplete list of notable features currently
implemented or planned.See [`docs/configuration.md`](docs/configuration.md) for all tunable configuration options.
## Installation
This program is available in [NixOS/nixpkgs](https://github.com/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.70
1. Install nix >= 2.4 and make sure the binary `nix` is in your `PATH`.
1. Build and install via `cargo install --git https://github.com/oxalica/nil nil`## Install with [Flake](https://wiki.nixos.org/wiki/Flakes)
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](https://github.com/neovim/nvim-lspconfig)
We are officially supported by nvim-lspconfig, see [upstream docs](https://github.com/neovim/nvim-lspconfig/blob/0fafc3ef648bd612757630097c96b725a36a0476/doc/server_configurations.txt#nil_ls),
also [the example config for testing](dev/nvim-lsp.nix).:warning: There is a known performance issue for semantic highlighting with
neovim native LSP. See more details in https://github.com/oxalica/nil/issues/83### Vim/Neovim with [coc.nvim](https://github.com/neoclide/coc.nvim)
Merge this setting into your `coc-settings.json` (open with `:CocConfig`).
```jsonc
{
"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](dev/vim-coc.nix).
### Vim with [vim-lsp](https://github.com/prabirshrestha/vim-lsp)
Add the following code to your `~/.vimrc` to register the LSP server.
Thanks @mitchmindtree```vim
if executable('nil')
autocmd User lsp_setup call lsp#register_server({
\ 'name': 'nil',
\ 'cmd': {server_info->['nil']},
\ 'whitelist': ['nix'],
\ })
endif
```### Emacs with [lsp-mode](https://github.com/emacs-lsp/lsp-mode)
Add the following elisp code to your configuration. (using `use-package`)
```elisp
(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](https://emacs-lsp.github.io/lsp-mode/page/lsp-nix-nil/) for more details.### Emacs with [eglot](https://github.com/joaotavora/eglot)
Add the following elisp code to your configuration. (using `use-package`)
```elisp
(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](https://github.com/nix-community/vscode-nix-ide)
Modify the extension's settings in your `settings.json`.
```jsonc
{
"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"] }
// }
// }
}
```### Kate with [LSP Client Plugin](https://docs.kde.org/stable5/en/kate/kate/kate-application-plugin-lspclient.html)
Add this to your "User Server Settings" in LSP Client configuration:
```json
{
"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.