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 20:18:05 +08:00
parent 2fbc36f3d8
commit 5f1d105505
No known key found for this signature in database
GPG key ID: 163271C707982C65
3 changed files with 38 additions and 2 deletions

View file

@ -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

View file

@ -7901,7 +7901,7 @@ in
subsurface = libsForQt514.callPackage ../applications/misc/subsurface { };
sudo = callPackage ../tools/security/sudo { };
sudo = if stdenv.isDarwin then darwin.sudo else callPackage ../tools/security/sudo { };
suidChroot = callPackage ../tools/system/suid-chroot { };

View file

@ -4,9 +4,11 @@
let
apple-source-releases = callPackage ../os-specific/darwin/apple-source-releases { };
impure-cmds = callPackage ../os-specific/darwin/impure-cmds { };
in
(apple-source-releases // {
(impure-cmds // apple-source-releases // {
callPackage = newScope (darwin.apple_sdk.frameworks // darwin);