summary refs log tree commit diff
path: root/pkgs/top-level/unix-tools.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/top-level/unix-tools.nix')
-rw-r--r--pkgs/top-level/unix-tools.nix89
1 files changed, 89 insertions, 0 deletions
diff --git a/pkgs/top-level/unix-tools.nix b/pkgs/top-level/unix-tools.nix
new file mode 100644
index 00000000000..706cd061b59
--- /dev/null
+++ b/pkgs/top-level/unix-tools.nix
@@ -0,0 +1,89 @@
+{ pkgs, buildEnv, runCommand, hostPlatform }:
+
+let
+
+  singleBinary = cmd: providers:
+    if builtins.hasAttr hostPlatform.parsed.kernel.name providers then
+      runCommand cmd {} ''
+        mkdir -p $out/bin
+
+        if ! [ -x "${providers.${hostPlatform.parsed.kernel.name}}/bin/${cmd}" ]; then
+          echo "Cannot find command ${cmd}"
+          exit 1
+        fi
+
+        ln -s ${providers.${hostPlatform.parsed.kernel.name}}/bin/${cmd} $out/bin/${cmd}
+      ''
+    else throw "${hostPlatform.parsed.kernel.name} does not have ${cmd}";
+
+in rec {
+  arp = singleBinary "arp" {
+    linux = pkgs.nettools;
+    darwin = pkgs.darwin.network_cmds;
+  };
+  getopt = singleBinary "getopt" {
+    linux = pkgs.utillinux;
+    darwin = pkgs.darwin.shell_cmds;
+  };
+  hexdump = singleBinary "hexdump" {
+    linux = pkgs.procps;
+    darwin = pkgs.darwin.shell_cmds;
+  };
+  hostname = singleBinary "hostname" {
+    linux = pkgs.nettools;
+    darwin = pkgs.darwin.shell_cmds;
+  };
+  ifconfig = singleBinary "ifconfig" {
+    linux = pkgs.nettools;
+    darwin = pkgs.darwin.network_cmds;
+  };
+  netstat = singleBinary "netstat" {
+    linux = pkgs.nettools;
+    darwin = pkgs.darwin.network_cmds;
+  };
+  ping = singleBinary "ping" {
+    linux = pkgs.iputils;
+    darwin = pkgs.darwin.network_cmds;
+  };
+  ps = singleBinary "ps" {
+    linux = pkgs.procps;
+    darwin = pkgs.darwin.adv_cmds;
+  };
+  route = singleBinary "route" {
+    linux = pkgs.nettools;
+    darwin = pkgs.darwin.network_cmds;
+  };
+  script = singleBinary "script" {
+    linux = pkgs.utillinux;
+    darwin = pkgs.darwin.shell_cmds;
+  };
+  sysctl = singleBinary "sysctl" {
+    linux = pkgs.procps;
+    darwin = pkgs.darwin.system_cmds;
+  };
+  whereis = singleBinary "whereis" {
+    linux = pkgs.utillinux;
+    darwin = pkgs.darwin.shell_cmds;
+  };
+  write = singleBinary "write" {
+    linux = pkgs.utillinux;
+    darwin = pkgs.darwin.basic_cmds;
+  };
+
+  # Compatibility derivations
+
+  procps = buildEnv {
+    name = "procps-compat";
+    paths = [ sysctl ps ];
+  };
+
+  utillinux = buildEnv {
+    name = "utillinux-compat";
+    paths = [ getopt hexdump script whereis write ];
+  };
+
+  nettools = buildEnv {
+    name = "nettools-compat";
+    paths = [ arp hostname netstat route ];
+  };
+}