I've used npm2nix and cargo2nix a couple of times with success - they generate package sets from the relevant sources.
I'm curious why not.
Aren't pip/cargo/whatever suitable for long-term use?
Consequently, couldn't nix's upgrading routines be modified to call out to pip/cargo/whatever to upgrade things best upgraded by pip/cargo/whatever?
I guess what I want to know is whether the architecture or the philosophy of nix interferes with nix's being modified in the way I just described. (Maybe it is just that nobody's gotten around to doing the implementation work.)
No. pip/cargo/etc are nondeterministic. Nix packages should not be. Where they are, things often break in bizarre ways.
In order to access the Internet, a Nix package must declare the hash of its output - given that pip can produce different output from run to run (it contains a constraint solver which depends on the versions available in the external package repository) this is impossible.
There's a similar tool for macOS called `nix-darwin`, as well: https://github.com/LnL7/nix-darwin
> The downside is that a significant amount of the time, libraries written in scripting languages aren't packaged either, and you wind up packaging half a dozen libraries just to get some tool working.
I've gone down this path a few times and days later when I still don't have the original thing I wanted working installed, then I sort of give up. I realize there are many benefits to Nix and I really enjoy them but I've switched to using Arch for practical reasons. I really, really miss the declarative reproducible style though.