darwin: add impure-cmds

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.
This commit is contained in:
Monson Shao
2021-01-17 23:44:40 +08:00
parent 2fbc36f3d8
commit 5f1d105505
3 changed files with 38 additions and 2 deletions
@@ -0,0 +1,34 @@
{ 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