Editor Modes for Nix Files: Difference between revisions
imported>Fadenb m link fixup |
m Category:Text Editor added |
||
(20 intermediate revisions by 16 users not shown) | |||
Line 1: | Line 1: | ||
Nix language has decent syntax highlighting (SH) support among popular code editors, but refactoring/autocomplete is still rare. Below is a list of editor modes for Nix syntax. | |||
== Language servers == | |||
* [https://github.com/ | Most popular editors have support for the [https://microsoft.github.io/language-server-protocol language server protocol], the following language servers can be used to provide features like completions and go-to-definition. | ||
* [https://github.com/ | * [https://github.com/oxalica/nil nil] | ||
* [https://github.com/nix-community/rnix-lsp rnix-lsp] | |||
* [https://github.com/nix-community/nixd nixd] | |||
== Emacs == | |||
* [https://github.com/NixOS/nix-mode nix-mode official] available in [https://melpa.org/ melpa] | |||
* [https://github.com/emacs-pe/nix-mode @marsam's nix-mode] | * [https://github.com/emacs-pe/nix-mode @marsam's nix-mode] | ||
* [https://github.com/shlevy/nix-buffer nix-buffer] | * [https://github.com/shlevy/nix-buffer nix-buffer] | ||
* Vim | * [https://github.com/jwiegley/nix-update-el nix-update-el] | ||
* [https://github.com/LnL7/vim-nix vim-nix] | |||
== Vim == | |||
=== vim-addon-nix === | |||
This plugin supports syntax highlighting and simple syntax and undeclared variable checking. | |||
* [https://github.com/MarcWeber/vim-addon-nix vim-addon-nix on github] | |||
Usage with '''VAM''' package manager: | |||
<syntaxHighlight lang="nix">{ # /etc/nixos/configuration.nix | |||
environment.systemPackages = [ | |||
(pkgs.vim_configurable.customize { | |||
name = "vim"; | |||
vimrcConfig.vam.pluginDictionaries = [ | |||
# vim-nix handles indentation better but does not perform sanity | |||
{ names = [ "vim-addon-nix" ]; ft_regex = "^nix\$"; } | |||
]; | |||
}) | |||
]; | |||
}</syntaxHighlight> | |||
=== vim-nix === | |||
vim-nix *only* supports syntax-highighting. | |||
* [https://github.com/LnL7/vim-nix vim-nix on github] | |||
Usage: | Usage with '''vim package manager''': | ||
< | <syntaxHighlight lang="nix">{ # /etc/nixos/configuration.nix | ||
environment.systemPackages = [ | environment.systemPackages = [ | ||
(pkgs.vim_configurable.customize { | (pkgs.vim_configurable.customize { | ||
name = | name = "vim"; | ||
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { | vimrcConfig.packages.myplugins = with pkgs.vimPlugins; { | ||
start = [ vim-nix ]; # load plugin on startup | start = [ vim-nix ]; # load plugin on startup | ||
}; | }; | ||
}) | }) | ||
]; | ]; | ||
}</ | }</syntaxHighlight> | ||
* [https://github.com/NixOS/nix-idea nix-idea] | == Neovim == | ||
In addition to the Vim plugins listed above, [https://github.com/nvim-treesitter/nvim-treesitter nvim-treesitter] also has support for nix. | |||
* [https://github.com/NixOS/nix-eclipse nix-eclipse] | |||
<syntaxHighlight lang="nix">{ | |||
* [https://github.com/wmertens/sublime-nix sublime-nix] | programs.neovim = { | ||
configure = { | |||
* [https://github.com/wmertens/atom-nix atom-nix] | packages.all.start = with pkgs.vimPlugins; [ | ||
(nvim-treesitter.withPlugins (ps: [ ps.nix ])) | |||
* [https://github.com/bbenoist/vscode-nix vscode-nix] | # or | ||
* Howl | nvim-treesitter.withAllGrammars # to install all grammars (including nix) | ||
* [https://github.com/rokf/howl-nix howl-nix] | ]; | ||
}; | |||
}; | |||
} | |||
</syntaxHighlight> | |||
== IntelliJ IDEA == | |||
* [https://github.com/NixOS/nix-idea nix-idea on github] | |||
== Eclipse == | |||
* [https://github.com/NixOS/nix-eclipse nix-eclipse] - development stopped in 2010 | |||
== Sublime Text == | |||
* [https://github.com/wmertens/sublime-nix sublime-nix on github] | |||
== Atom == | |||
* [https://github.com/wmertens/atom-nix atom-nix on github] | |||
== Visual Studio Code == | |||
* [https://github.com/bbenoist/vscode-nix vscode-nix on github] | |||
* [https://github.com/jnoortheen/vscode-nix-ide vscode-nix-ide on GitHub and VSCode Store] with support to format and lint | |||
== Howl == | |||
* [https://github.com/rokf/howl-nix howl-nix on github] | |||
== Far2l == | |||
* [https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/misc/far2l/default.nix far2l with nix syntax highlighting patch in nixpkgs] | |||
== nano == | |||
* [https://github.com/seitz/nanonix nanonix] | |||
== micro == | |||
Syntax highlighting is built-in. LSP support is available through the [https://github.com/AndCake/micro-plugin-lsp <code>lsp</code> plugin]. | |||
== Codemirror == | |||
* [https://github.com/replit/codemirror-lang-nix codemirror-lang-nix] | |||
== Zed == | |||
* [https://github.com/hasit/zed-nix zed-nix on github] | |||
== Relevant pages == | |||
* [[Overview of the Nix Expression Language]] | |||
* [[Nix Expression Language: Tips & Tricks]] | |||
* [[Nix Expression Language: Learning resources|Learning resources]] | |||
[[Category:Nix Language]] | |||
[[Category:Guide]] | |||
[[Category:Text Editor]] |
Latest revision as of 20:09, 25 June 2024
Nix language has decent syntax highlighting (SH) support among popular code editors, but refactoring/autocomplete is still rare. Below is a list of editor modes for Nix syntax.
Language servers
Most popular editors have support for the language server protocol, the following language servers can be used to provide features like completions and go-to-definition.
Emacs
- nix-mode official available in melpa
- @marsam's nix-mode
- nix-buffer
- nix-update-el
Vim
vim-addon-nix
This plugin supports syntax highlighting and simple syntax and undeclared variable checking.
Usage with VAM package manager:
{ # /etc/nixos/configuration.nix
environment.systemPackages = [
(pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig.vam.pluginDictionaries = [
# vim-nix handles indentation better but does not perform sanity
{ names = [ "vim-addon-nix" ]; ft_regex = "^nix\$"; }
];
})
];
}
vim-nix
vim-nix *only* supports syntax-highighting.
Usage with vim package manager:
{ # /etc/nixos/configuration.nix
environment.systemPackages = [
(pkgs.vim_configurable.customize {
name = "vim";
vimrcConfig.packages.myplugins = with pkgs.vimPlugins; {
start = [ vim-nix ]; # load plugin on startup
};
})
];
}
Neovim
In addition to the Vim plugins listed above, nvim-treesitter also has support for nix.
{
programs.neovim = {
configure = {
packages.all.start = with pkgs.vimPlugins; [
(nvim-treesitter.withPlugins (ps: [ ps.nix ]))
# or
nvim-treesitter.withAllGrammars # to install all grammars (including nix)
];
};
};
}
IntelliJ IDEA
Eclipse
- nix-eclipse - development stopped in 2010
Sublime Text
Atom
Visual Studio Code
- vscode-nix on github
- vscode-nix-ide on GitHub and VSCode Store with support to format and lint
Howl
Far2l
nano
micro
Syntax highlighting is built-in. LSP support is available through the lsp
plugin.