TIL: How to Fix Package Binary Collisions on Nix
Recently I wanted to use GNU parallel, a nifty little tool we can use
to run tasks in parallel, shock horror I know. I already have the moreutils
package installed using nix (home-manager).
So I added this:
home.packages = with pkgs; [
parallel
moreutils
]
Then I ran the home manager switch like usual, I got the following error.
error: builder for '/nix/store/vh6i81xhf6pvybdpall8z8l8y0i6mr8p-home-manager-path.drv' failed with exit code 25;
last 1 log lines:
> error: collision between `/nix/store/slkylri9sbn4w7paaixzc5wj6cwfk83m-moreutils-0.67/bin/parallel' and `/nix/store/fjpnw99zvx2f910s016jrmybc5jxirpn-parallel-20230822/bin/parallel'
For full logs, run 'nix log /nix/store/vh6i81xhf6pvybdpall8z8l8y0i6mr8p-home-manager-path.drv'.
error: 1 dependencies of derivation '/nix/store/m4p56x5lgjfpvdy0xjrbk981sfchpl8c-home-manager-generation.drv' failed to build
Because moreutils
also have a binary called parallel. How do we tell Nix to overwrite the moreutils binary and use
the one in the parallel
packages? Simple by using lib.hiPrio
like so:
home.packages = with pkgs; [
(lib.hiPrio parallel)
moreutils
]
This tells Nix to increase the priority of this package you can see the code here.
That’s it we can still have access to the other binaries moreutils provides like sponge
and parallel
from parallel
package.