Nix IDE
Adds Nix language support for Visual Studio Code.
Installation
Available on both the Visual Studio Marketplace and the Open VSX Registry.
You can also open the Command Palette (Ctrl+Shift+P on Windows/Linux or Cmd+Shift+P on macOS) and enter ext install jnoortheen.nix-ide
to install the extension, or download it from the latest release.
Features
The basic language integration is supported out of the box using nixpkgs-fmt
and nix instantiate
.
Syntax Highlighting support
Syntax highlighting of Nix code blocks inside `markdown` files also work.
Syntax Errors are reported using `nix-instantiate`
Auto-Formatting is handled by `nixpkgs-fmt` by default.
It can be changed by setting `nix.formatterPath` to any command which can accept file contents on stdin and return formatted text on stdout.
```jsonc
{
"nix.formatterPath": "nixpkgs-fmt"
// "nix.formatterPath": "nixfmt"
// "nix.formatterPath": ["treefmt", "--stdin", "{file}"]
// "nix.formatterPath": ["nix", "fmt", "--", "--"] // using flakes with `formatter = pkgs.alejandra;`
}
```
LSP Plugin Support
Full language support can be enabled by using a language server. Generally, any Nix LSP implementation should work.
The following have been tested so far:
{
"nix.enableLanguageServer": true,
"nix.serverPath": "nil",
// or
"nix.serverPath": "nixd"
}
Advanced settings
Pass settings to the language server via the `serverSettings` option.
```jsonc
{
"nix.serverSettings": {
"nil": {
"diagnostics": {
"ignored": ["unused_binding", "unused_with"]
},
"formatting": {
"command": ["nixpkgs-fmt"]
}
}
}
}
```
```jsonc
{
"nix.serverSettings": {
"nixd": {
"formatting": {
"command": [ "nixpkgs-fmt" ]
},
"options": {
// By default, this entry will be read from `import { }`.
// 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..options"
},
"home-manager": {
"expr": "(builtins.getFlake \"/absolute/path/to/flake\").homeConfigurations..options"
},
// Tip: use ${workspaceFolder} variable to define path
"nix-darwin": {
"expr": "(builtins.getFlake \"${workspaceFolder}/path/to/flake\").darwinConfigurations..options"
}
}
}
}
}
```
Contributing
- Document the purpose of functions and classes.
- Please mention new features in the
README.md
features section. Use screenshots when applicable.
- The Conventional Commits style should be used for commit messages as it is used to generate the changelog.
Development
There is direnv and nix-shell support so a dev environment can be created with the nix-shell
command or a one-time direnv allow
at the root of the repo.
Press F5
in VSCode to run an Extension Development Host instance with the extension installed.
TypeScript is used to develop the extension.
yarn install # install dependencies
yarn build # build the extension
Releasing a new version
Complete .env
with environment variables based on .env.template
,
# this will generate changelog and will create a GitHub release. This will also trigger jobs to publish the extension.
yarn release
# to manually publish the extension
yarn env-cmd && yarn publish
Credits
Special thanks to: