From 5f1d105505909c9cb529e67656741daf681c19ef Mon Sep 17 00:00:00 2001 From: Monson Shao Date: Sun, 17 Jan 2021 20:18:05 +0800 Subject: [PATCH] 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. --- .../darwin/impure-cmds/default.nix | 34 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- pkgs/top-level/darwin-packages.nix | 4 ++- 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 pkgs/os-specific/darwin/impure-cmds/default.nix 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 000000000000..51e345f048bd --- /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 692fdbf96cbd..bc5c4edc5993 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 6fafe09438cd..2197f128388a 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);