summary refs log tree commit diff
path: root/pkgs/top-level/unix-tools.nix
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2018-03-25 23:01:31 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2018-03-26 17:40:55 -0500
commitce8ce600ae41d3899e4a556fa9ff8a1a34374063 (patch)
tree3ea6538af9f648999a7a68cb44818c52f33963c6 /pkgs/top-level/unix-tools.nix
parent675dc1bfbfd87c02c8588d78ffc903fb6987f6e4 (diff)
downloadnixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar.gz
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar.bz2
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar.lz
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar.xz
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.tar.zst
nixpkgs-ce8ce600ae41d3899e4a556fa9ff8a1a34374063.zip
unix-tools: introduce unix-tools.nix
unix-tools.nix has a collection of tools that are commonly installed
by default in Unix derivatives. This is intended to provide
compatibility between macOS and Linux users. Three Linux-only
derivations are provided for compatbility:

- procps
- utillinux
- nettools

More tools are also provided.

Also: treewide: use unixtools

Non-comprehensive replace of Linux-only procps and util-linux with
'unixtools'.
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 ];
+  };
+}