랭킹으로 돌아가기

oxalica/nil

Rust

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

lsp-servernixnixosnixpkgs
스타 성장
스타
1.9k
포크
70
주간 성장
이슈
31
5001k1.5k
2022년 8월2023년 11월2025년 3월2026년 7월
아티팩트crates.iocargo add nil
README

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.

: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

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"] }
  //   }
  // }
}

Kate with LSP Client Plugin

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.

관련 저장소
slint-ui/slint

Slint is an open-source declarative GUI toolkit to build native user interfaces for Rust, C++, JavaScript, or Python apps.

Rustcrates.ioOtherrustembedded-devices
slint.dev
23.3k933
graphql/graphiql

GraphiQL & the GraphQL LSP Reference Ecosystem for building browser & IDE tools.

TypeScriptnpmMIT Licensegraphqlgraphiql
16.9k1.8k
rust-lang/rust-analyzer

A Rust compiler front-end for IDEs

Rustcrates.ioApache License 2.0lsp-serverrust
rust-analyzer.github.io
16.7k2.1k
zigtools/zls

A language server for Zig supporting developers with features like autocomplete and goto definition

ZigMIT Licensezigziglang
zigtools.org/zls/install/
5k437
LuaLS/lua-language-server

A language server that offers Lua language support - programmed in Lua

LuaMIT Licenselualanguage-server
luals.github.io
4.3k431
zbirenbaum/copilot.lua

Fully featured & enhanced replacement for copilot.vim complete with API for interacting with Github Copilot

LuaMIT Licensecopilotgithub-copilot
4.1k160
MaskRay/ccls

C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting

C++Apache License 2.0cpplanguage-server-protocol
4.1k277
Myriad-Dreamin/tinymist

Tinymist [ˈtaɪni mɪst] is an integrated language service for Typst [taɪpst].

Rustcrates.ioApache License 2.0formatterlsp
myriad-dreamin.github.io/tinymist
3.4k171
haskell/haskell-language-server

Official Haskell IDE support via the language server protocol (LSP)

HaskellApache License 2.0lsp-serverhaskell-language-server
2.9k447
Feel-ix-343/markdown-oxide

PKM Markdown Language Server

Rustcrates.ioApache License 2.0language-server-protocollsp
oxide.md
2.2k116
Shopify/ruby-lsp

An opinionated language server for Ruby

RubyRubyGemsMIT Licenselspruby
shopify.github.io/ruby-lsp/
2k266
chipsalliance/verible

Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, formatter and language server

C++Othersystemveriloglexer
chipsalliance.github.io/verible/
1.9k296