nixpkgs/pkgs/os-specific/darwin/impure-cmds/default.nix

35 lines
896 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