diff options
author | Monson Shao <holymonson@gmail.com> | 2021-01-17 20:18:05 +0800 |
---|---|---|
committer | Monson Shao <holymonson@gmail.com> | 2021-01-17 23:44:40 +0800 |
commit | 5f1d105505909c9cb529e67656741daf681c19ef (patch) | |
tree | 7200729c418c4fd703d4e6ad4a7ed23b5e2c9468 | |
parent | 2fbc36f3d891c86ae34dc0414bc78e74e8911218 (diff) | |
download | nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar.gz nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar.bz2 nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar.lz nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar.xz nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.tar.zst nixpkgs-5f1d105505909c9cb529e67656741daf681c19ef.zip |
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.
-rw-r--r-- | pkgs/os-specific/darwin/impure-cmds/default.nix | 34 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 2 | ||||
-rw-r--r-- | pkgs/top-level/darwin-packages.nix | 4 |
3 files changed, 38 insertions, 2 deletions
diff --git a/pkgs/os-specific/darwin/impure-cmds/default.nix b/pkgs/os-specific/darwin/impure-cmds/default.nix new file mode 100644 index 00000000000..51e345f048b --- /dev/null +++ b/pkgs/os-specific/darwin/impure-cmds/default.nix @@ -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 diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 692fdbf96cb..bc5c4edc599 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -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 { }; diff --git a/pkgs/top-level/darwin-packages.nix b/pkgs/top-level/darwin-packages.nix index 6fafe09438c..2197f128388 100644 --- a/pkgs/top-level/darwin-packages.nix +++ b/pkgs/top-level/darwin-packages.nix @@ -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); |