Why is `parallel` overwritten by `moreutils`'s parallel?

I have moreutils in my basic nixos configuration, and then in my homemanager I use parallel to install.
Somehow I just get the parallel version from moreutils which is not the GNU parallel. I am wondering why NixOS does not complain about overlapping symlinks etc? How can I make it that my home manager package parallel get into my path?

I can both install moreutils and parallel without homemanager and the rebuild works fine, but GNU paralle is not in my path… but the one in moreutils

This is normally caused by the order of things in your path. I would imagine home-manager’s configuration for your user’s shell happens after the system one and updates PATH to point to programs available for your home-manager installation. That would then mean those packages overshadow any existing ones.

In nixos if multiple packages provide the same binary then you can use the hiPrio or lowPrio function to specify which one should be preferred. Example usage would be:

  home.packages = with pkgs; [
    toybox
    (hiPrio iputils)
  ]

in the example above it would prefer all the iputils binarys over the toybox ones, so you would for example get the normal linux ping in your path. You could try doing this and see if it ends up fixing your problem. I don’t remember why it doesn’t error if two packages provide the same bin or how it is determent which packages is preferred.

5 Likes