Editor Modes for Nix Files: Difference between revisions

From NixOS Wiki
imported>Makefu
initial batch of nixos-users
 
Klinger (talk | contribs)
 
(21 intermediate revisions by 16 users not shown)
Line 1: Line 1:
This is a list of editor modes for Nix syntax.
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.


* Emacs
== Language servers ==
* [https://github.com/NixOS/nix/blob/master/misc/emacs/nix-mode.el nix-mode official] available in [https://melpa.org/ melpa]
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.
* [@matthewbauer's nix-mode](https://github.com/matthewbauer/nix-mode)
* [https://github.com/oxalica/nil nil]
* [@marsam's nix-mode](https://github.com/emacs-pe/nix-mode)
* [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/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''':


<pre class="nix">{ # /etc/nixos/configuration.nix
<syntaxHighlight lang="nix">{ # /etc/nixos/configuration.nix
   environment.systemPackages = [
   environment.systemPackages = [
     (pkgs.vim_configurable.customize {                                                                                                                                                                                                    
     (pkgs.vim_configurable.customize {
       name = &quot;vim&quot;;                                                                                                                                                                                                                                                                                                                                
       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
       };                                                                                                                                                                                                                                      
       };
     })
     })
   ];
   ];
}</pre>
}</syntaxHighlight>
* IntelliJ IDEA
 
* [https://github.com/NixOS/nix-idea nix-idea]
== Neovim ==
* Eclipse
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]
 
* Sublime Text
<syntaxHighlight lang="nix">{
* [https://github.com/wmertens/sublime-nix sublime-nix]
  programs.neovim = {
* Atom
    configure = {
* [https://github.com/wmertens/atom-nix atom-nix]
      packages.all.start = with pkgs.vimPlugins; [
* Visual Studio Code
        (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

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

Sublime Text

Atom

Visual Studio Code

Howl

Far2l

nano

micro

Syntax highlighting is built-in. LSP support is available through the lsp plugin.

Codemirror

Zed

Relevant pages