39 lines
944 B
Nix
39 lines
944 B
Nix
|
|
{ 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
|