▲ | rictic 3 hours ago | |||||||
A flake.nix file plus a direnv `.envrc` file with `use flake` has solved this for me. When I cd into a project directory I get all of the tools that project needs, at the exact versions they were tested with. When I cd out of the directory, they go away. If the dependencies are well behaved (e.g. they don't do any self-modification, which is annoyingly common in the npm world) then it's often pretty easy to track all of your deps this way, imported from your npm package-lock.json or similar. Ask your favorite LLM to write your flake.nix file for you, they're pretty good at it. I've been able to drop all of the bespoke language-specific tool versioning stuff `nvm`, `uv`, `rvm`, etc for all my personal projects, and it makes it easy to add deps from outside the language-specific package managers, like ffmpeg and lame. | ||||||||
▲ | pxc 17 minutes ago | parent | next [-] | |||||||
If you still want to package your stuff natively for the language ecosystem, you still need all the usual metadata and you also want to specify version constraints for your dependencies and so on. Typically I wire up something like uv or rv (or Poetry or Bundler, which are fine but slower) to shell activation using Devenv, then autogenerate the Nix package from the language-native dependency specification files. | ||||||||
▲ | goosejuice 2 hours ago | parent | prev | next [-] | |||||||
This is the way. Nix, despite all of its issues, is still the best for reproducible developer environments. I just don't write my own flakes anymore. | ||||||||
▲ | bryanlarsen 3 hours ago | parent | prev | next [-] | |||||||
Or you can use a nix wrapper like jetify's devbox. | ||||||||
| ||||||||
▲ | airtonix 3 hours ago | parent | prev [-] | |||||||
[dead] |