summary refs log tree commit diff
diff options
context:
space:
mode:
authorMonson Shao <holymonson@gmail.com>2021-01-17 20:18:05 +0800
committerMonson Shao <holymonson@gmail.com>2021-01-17 23:44:40 +0800
commit5f1d105505909c9cb529e67656741daf681c19ef (patch)
tree7200729c418c4fd703d4e6ad4a7ed23b5e2c9468
parent2fbc36f3d891c86ae34dc0414bc78e74e8911218 (diff)
downloadnixpkgs-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.nix34
-rw-r--r--pkgs/top-level/all-packages.nix2
-rw-r--r--pkgs/top-level/darwin-packages.nix4
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);