{ lib, runCommandLocal }: # On darwin, there are some commands neither opensource nor able to build in nixpkgs. # We have no choice but to use those system-shipped impure ones. let commands = { ditto = "/usr/bin/ditto"; # ditto is not opensource sudo = "/usr/bin/sudo"; # sudo must be owned by uid 0 and have the setuid bit set }; mkImpureDrv = name: path: runCommandLocal "${name}-impure-darwin" { __impureHostDeps = [ path ]; meta = { platforms = lib.platforms.darwin; }; } '' if ! [ -x ${path} ]; then echo Cannot find command ${path} exit 1 fi mkdir -p $out/bin ln -s ${path} $out/bin manpage="/usr/share/man/man1/${name}.1" if [ -f $manpage ]; then mkdir -p $out/share/man/man1 ln -s $manpage $out/share/man/man1 fi ''; in lib.mapAttrs mkImpureDrv commands