Nix IDE ✨💡🌟
Adds Nix language support for Visual Studio Code.
Quickstart 🚀
- Install the extension, and open a Nix file.
- Syntax highlighting should work out of the box. Nix code blocks inside
markdown
files are also supported.
- Auto-formatting should work if
nixfmt
is available in $PATH
. A custom formatter can be set by configuring nix.formatterPath
.
- Syntax errors are linted using
nix-instantiate
.
- Full language support can be enabled by configuring a language server. See LSP Plugin Support for more information.
- Snippets are provided for conditional expressions,
let
/with
expressions, and rec
ursive sets.
- Path completion is supported using the Path Intellisense extension.
Settings ⚙️
LSP Plugin Support
Full language support can be enabled by using a language server. Generally, any Nix LSP implementation should work. Some examples are given below for nil
and nixd
.
{
"nix.enableLanguageServer": true,
"nix.serverPath": "nil", // or "nixd"
// LSP config can be passed via the ``nix.serverSettings.{lsp}`` as shown below.
"nix.serverSettings": {
// check https://github.com/oxalica/nil/blob/main/docs/configuration.md for all options available
"nil": {
// "diagnostics": {
// "ignored": ["unused_binding", "unused_with"],
// },
"formatting": {
"command": ["nixfmt"],
},
},
// check https://github.com/nix-community/nixd/blob/main/nixd/docs/configuration.md for all nixd config
"nixd": {
"formatting": {
"command": ["nixfmt"],
},
"options": {
// By default, this entry will be read from `import <nixpkgs> { }`.
// You can write arbitrary Nix expressions here, to produce valid "options" declaration result.
// Tip: for flake-based configuration, utilize `builtins.getFlake`
"nixos": {
"expr": "(builtins.getFlake \"/absolute/path/to/flake\").nixosConfigurations.<name>.options",
},
"home-manager": {
"expr": "(builtins.getFlake \"/absolute/path/to/flake\").homeConfigurations.<name>.options",
},
// Tip: use ${workspaceFolder} variable to define path
"nix-darwin": {
"expr": "(builtins.getFlake \"${workspaceFolder}/path/to/flake\").darwinConfigurations.<name>.options",
},
},
}
}
}
It can be changed by setting nix.formatterPath
to any command which can accept file contents on stdin and return formatted text on stdout.
[!IMPORTANT]
If you are using the above LSP plugin setting, then this configuration is not used.
{
"nix.formatterPath": "nixfmt" // or "alejandra"
// or pass full list of args like below
// "nix.formatterPath": ["treefmt", "--stdin", "{file}"]
}
Contributing 💪
We welcome contributions to this extension. Kindly start with any of open issues or feature requests.
See CONTRIBUTING.md for more information.
Credits
Special thanks to: