summary refs log tree commit diff
path: root/pkgs/os-specific/darwin
diff options
context:
space:
mode:
authorSandro <sandro.jaeckel@gmail.com>2021-02-03 18:11:58 +0100
committerGitHub <noreply@github.com>2021-02-03 18:11:58 +0100
commit0829a518621f95aea784e8fd68c42d497a9a8946 (patch)
treec4c3ddc719d45277b0e3ba3a399c1de8ae2d00f6 /pkgs/os-specific/darwin
parent7cbec40a09533dd9c525d6ab94dddfe77768101a (diff)
parent5f1d105505909c9cb529e67656741daf681c19ef (diff)
downloadnixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar.gz
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar.bz2
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar.lz
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar.xz
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.tar.zst
nixpkgs-0829a518621f95aea784e8fd68c42d497a9a8946.zip
Merge pull request #109626 from holymonson/darwin-impure-cmds
darwin: add impure-cmds
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