1. It has a wider range of packages available vs asdf. Asdf can support runtimes that have an asdf plugin, whereas Nix has over 80,000 packages available in it's registry
2. Nix also handles the dependencies for the packages you want to install. If you runtime requires a compiler, specific libraries, etc, Nix will ensure those are installed.
Of course, Nix can be challenging to get started with. If you want to try Nix but find the language intimidating, you can try something like Devbox first.
Nix is a much more general purpose tool than asdf.
Nix can also be used to build Docker images, VM images, or configure a NixOS system. Nix's packages can also be run without being installed.
Specifically for setting up a development environment? As sibling pointed out, nix shells can provide native libraries.
With nix shell, it's also possible to have the shell be strictly 'pure', in that the shell's environment will only be what's declared in the Nix shell. Having that ensures that you're not relying on environment variables you set elsewhere, or stuff you installed elsewhere.
You can use 2 spaces after a newline to format it:
let
pkgs = import nixpkgs-old { system = "linux-x86_64"; }
in
pkgs.mkShell { packages = [ pkgs.node ]; }
Combine this with the input statement in the comment below to get a decent flake. You can mix and match multiple inputs if you want to install different versions of packages
If you are unfamiliar with Nix, just install with devbox. That said, you can also do `nix profile install` but then you kinda lose that nice declarative layer that devbox has. Now for some reason if you really want to do advanced customization of nodejs, then make a flake. Overkill for nodejs tho. Rust maybe.
https://search.nixos.org/packages only shows packages that are available on the latest stable and unstable releases of Nixpkgs. The means they only have a limited number of versions for a given package available. For example, Python on unstable only has 5 versions to choose from:
- 2.7.18
- 3.9.17
- 3.8.17
- 3.11.4
- 3.12.0b3
If you need something different, you need to find a specific commit of the NixOS/nixpkgs repo that has that version. This information is not indexed or searchable on the official package search. Nixhub.io provides an index of these older released commits, so you can find and install versions that aren't available in the latest Nix releases.
If you visit https://www.nixhub.io/packages/python, you can see we have a lot more versions available. Developers can use the Nix or Devbox references on that page to install the version they need.
20 comments
[ 3.3 ms ] story [ 62.5 ms ] thread1. It has a wider range of packages available vs asdf. Asdf can support runtimes that have an asdf plugin, whereas Nix has over 80,000 packages available in it's registry
2. Nix also handles the dependencies for the packages you want to install. If you runtime requires a compiler, specific libraries, etc, Nix will ensure those are installed.
Of course, Nix can be challenging to get started with. If you want to try Nix but find the language intimidating, you can try something like Devbox first.
Nix can also be used to build Docker images, VM images, or configure a NixOS system. Nix's packages can also be run without being installed.
Specifically for setting up a development environment? As sibling pointed out, nix shells can provide native libraries.
With nix shell, it's also possible to have the shell be strictly 'pure', in that the shell's environment will only be what's declared in the Nix shell. Having that ensures that you're not relying on environment variables you set elsewhere, or stuff you installed elsewhere.
Then what? How do I throw that in a configuration.nix or flake.nix file?
`nixpkgs-old.legacyPacakges.linux-x86_64.node`, or something like below
1. Install in your global profile with the CLI:
2. In a flake.nix, you can set an input with the nixpkgs commit hash, like: ...and then use nodejs from that `node-nixpkgs` input to get the exact version you wantedSo if you want to view all the versions available for NodeJS, you can visit https://nixhub.io/packages/nodejs
You can even link to a specific version with an anchor link. For example, you can see NodeJS 19.8.0 at https://nixhub.io/packages/nodejs#19.8.0
Probably a polished design to promote devbox
If you visit https://www.nixhub.io/packages/python, you can see we have a lot more versions available. Developers can use the Nix or Devbox references on that page to install the version they need.
We originally built this for Devbox users because it was a common request, and realized that it could help Nix users as well.