| And you can do that in theory, but in practice it ends up like this: - you want to use lang-x.y.z, so you'll just reference an old commit - turns out that version was never packaged, so you copy x.y.z-1 to your flake/overlay - you end up patching the build because it doesn't work by default with new environments - on the other hand a module you're using needs the new environment so you do your best to make everything happy - more overlaying - because you changed something crucial in a few steps, you're compiling llvm 20 times through this process and now it's 1am Compare that to putting "rust 1.59" in your .tool-version and running "asdf install". Guess who tried to use 3 specific versions of rust at the same time recently and got very familiar with the process... (That's also ignoring the issue like Ruby being packaged without the platform identifier in nix which makes it unusable for some development purposes) |
asdf does not allow you to keep three different versions of the same language, so I'm not sure how that compares? It's not super-trivial to do in Nix, but at least you can do it.
asdf is also no different than Nix when it comes to minor/major versions. You're at the mercy of what the plugin does, other than that you have to create your own plugin from scratch or make a fork. Nix has the option to patch things up more easily at least.