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
or nixpkgs-fmt
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. If you are using an LSP server, then this configuration is not used.
{
"nix.formatterPath": "nixfmt" // or "nixpkgs-fmt" or "alejandra" or "nix3-fmt" or pass full list of args such as or `["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: