summary refs log tree commit diff
path: root/pkgs/os-specific/darwin/impure-cmds/default.nix
blob: 51e345f048bdadb479d111a00cec00a5f9ecab21 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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