summary refs log tree commit diff
path: root/pkgs/os-specific/darwin
diff options
context:
space:
mode:
authorgithub-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>2021-02-03 18:22:22 +0000
committerGitHub <noreply@github.com>2021-02-03 18:22:22 +0000
commit571eb109965ed3f0629d7a0f07e6885e3faee956 (patch)
treec82b2dfb90cf0fd36c49e28de071cbc88e555d1a /pkgs/os-specific/darwin
parentb410e1e2ed2f68dbdebe7bd62fe39738649e14a9 (diff)
parent923c4f0a039cd1336fb09c2346b0d207adffbac5 (diff)
downloadnixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar.gz
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar.bz2
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar.lz
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar.xz
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.tar.zst
nixpkgs-571eb109965ed3f0629d7a0f07e6885e3faee956.zip
Merge staging-next into staging
Diffstat (limited to 'pkgs/os-specific/darwin')
-rw-r--r--pkgs/os-specific/darwin/impure-cmds/default.nix34
1 files changed, 34 insertions, 0 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