Hacker News new | ask | show | jobs
by mrath 1276 days ago
Is there a way to pin a version of the tool with this? For me, the biggest problem with Nix is that version pinning is not easy, actually it is complex.
2 comments

Pinning is first-class with the new flake method. When you create a flake, a corresponding flake.lock is created, similar to lock files in other languages. There's even a dedicated command now to upgrade the dependencies declared in a flake.
Yes, I think I get that. But it is not easy to pin on different packages. For example if I want golang 1.18, node 12, I need to find the commit corresponding to those and add them. I mean it is possible but not as easy as it should be.
There's often a bunch of different versions in nixpkgs. For example, postgres currently has 11 through 15 available (https://github.com/NixOS/nixpkgs/blob/e7f345ca81f4f5513c4e73...). Nodejs has 14, 16, 18, and 19 (https://github.com/NixOS/nixpkgs/blob/e7f345ca81f4f5513c4e73...).
Finding a way to install a specific version - not git commit or git tag, version - of a package is the problem.

https://github.com/NixOS/nixpkgs/issues/93327

Nix before flakes used channels, each with a flat global namespace. Flakes are intended to sit inside the git repo, so that's even less discoverable.

Nix solves practically every technical problem, but has terrible UX and documentation.

Hello! When you add packages with Devbox add, we automatically pin your devbox.json to a specific commit in the Nix store. This ensures that any developer who uses your devbox.json will get the same packages that you do.

You can read more about how it works here:

https://www.jetpack.io/devbox/docs/guides/pinning_packages/

I guess that only pins tools by nixpkgs version, or does it have capability to pin by exact version of tools like say go 1.18, pg 12, node 16 etc?
No, because older software versions are dropped often rather quickly, especially if they are not maintained by upstream anymore, to reduce required maintaince work on them.