7f3de60758
* master: (161 commits) pcsclite: clean up after #41790 tor: 0.3.3.6 -> 0.3.3.7 opae: init at 1.0.0 tinc: 1.0.33 -> 10.0.34 tinc_pre: 1.1pre15 -> 1.1pre16 sit: 0.3.2 -> 0.4.0 (#41863) platforms/raspberrypi: enable kernelAutoModules libupnp: 1.6.21 -> 1.8.3 (#41684) androidStudioPackages.{dev,canary}: 3.2.0.16 -> 3.2.0.17 tdesktop: 1.3.0 -> 1.3.7 gns3Packages.{server,gui}{Stable,Preview}: 2.1.6 -> 2.1.7 aws-sam-cli: init at 0.3.0 (#41877) nixos/nat: optional networking.nat.externalInterface (#41864) linux: 4.17 -> 4.17.1 linux: 4.16.14 -> 4.16.15 linux: 4.14.48 -> 4.14.49 nixos/unbound: add restart (#41885) maintainers/create-azure.sh: remove hydra.nixos.org as binary cache (#41883) gshogi: init at 0.5.1 (#41840) neovim: add missing libiconv ...
161 lines
4.1 KiB
Nix
161 lines
4.1 KiB
Nix
{ pkgs, buildEnv, runCommand, hostPlatform, lib
|
|
, stdenv }:
|
|
|
|
# These are some unix tools that are commonly included in the /usr/bin
|
|
# and /usr/sbin directory under more normal distributions. Along with
|
|
# coreutils, these are commonly assumed to be available by build
|
|
# systems, but we can't assume they are available. In Nix, we list
|
|
# each program by name directly through this unixtools attribute.
|
|
|
|
# You should always try to use single binaries when available. For
|
|
# instance, if your program needs to use "ps", just list it as a build
|
|
# input, not "procps" which requires Linux.
|
|
|
|
let
|
|
version = "1003.1-2008";
|
|
|
|
singleBinary = cmd: providers: let
|
|
provider = "${lib.getBin providers.${hostPlatform.parsed.kernel.name}}/bin/${cmd}";
|
|
in runCommand "${cmd}-${version}" {
|
|
meta.platforms = map (n: { kernel.name = n; }) (pkgs.lib.attrNames providers);
|
|
} ''
|
|
if ! [ -x "${provider}" ]; then
|
|
echo "Cannot find command ${cmd}"
|
|
exit 1
|
|
fi
|
|
|
|
install -D "${provider}" "$out/bin/${cmd}"
|
|
'';
|
|
|
|
# more is unavailable in darwin
|
|
# just use less
|
|
more_compat = runCommand "more-${version}" {} ''
|
|
mkdir -p $out/bin
|
|
ln -s ${pkgs.less}/bin/less $out/bin/more
|
|
'';
|
|
|
|
bins = lib.mapAttrs singleBinary {
|
|
# singular binaries
|
|
arp = {
|
|
linux = pkgs.nettools;
|
|
darwin = pkgs.darwin.network_cmds;
|
|
};
|
|
col = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.text_cmds;
|
|
};
|
|
eject = {
|
|
linux = pkgs.utillinux;
|
|
};
|
|
getconf = {
|
|
linux = if hostPlatform.libc == "glibc" then lib.getBin pkgs.glibc
|
|
else pkgs.netbsd.getconf;
|
|
darwin = pkgs.darwin.system_cmds;
|
|
};
|
|
getent = {
|
|
linux = if hostPlatform.libc == "glibc" then lib.getBin pkgs.glibc
|
|
else pkgs.netbsd.getent;
|
|
darwin = pkgs.netbsd.getent;
|
|
};
|
|
getopt = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.getopt;
|
|
};
|
|
fdisk = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.diskdev_cmds;
|
|
};
|
|
fsck = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.diskdev_cmds;
|
|
};
|
|
hexdump = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.shell_cmds;
|
|
};
|
|
hostname = {
|
|
linux = pkgs.nettools;
|
|
darwin = pkgs.darwin.shell_cmds;
|
|
};
|
|
ifconfig = {
|
|
linux = pkgs.nettools;
|
|
darwin = pkgs.darwin.network_cmds;
|
|
};
|
|
locale = {
|
|
linux = pkgs.glibc;
|
|
darwin = pkgs.netbsd.locale;
|
|
};
|
|
logger = {
|
|
linux = pkgs.utillinux;
|
|
};
|
|
more = {
|
|
linux = pkgs.utillinux;
|
|
darwin = more_compat;
|
|
};
|
|
mount = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.diskdev_cmds;
|
|
};
|
|
netstat = {
|
|
linux = pkgs.nettools;
|
|
darwin = pkgs.darwin.network_cmds;
|
|
};
|
|
ping = {
|
|
linux = pkgs.iputils;
|
|
darwin = pkgs.darwin.network_cmds;
|
|
};
|
|
ps = {
|
|
linux = pkgs.procps;
|
|
darwin = pkgs.darwin.ps;
|
|
};
|
|
quota = {
|
|
linux = pkgs.linuxquota;
|
|
darwin = pkgs.darwin.diskdev_cmds;
|
|
};
|
|
route = {
|
|
linux = pkgs.nettools;
|
|
darwin = pkgs.darwin.network_cmds;
|
|
};
|
|
script = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.shell_cmds;
|
|
};
|
|
sysctl = {
|
|
linux = pkgs.procps;
|
|
darwin = pkgs.darwin.system_cmds;
|
|
};
|
|
top = {
|
|
linux = pkgs.procps;
|
|
darwin = pkgs.darwin.top;
|
|
};
|
|
umount = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.diskdev_cmds;
|
|
};
|
|
whereis = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.shell_cmds;
|
|
};
|
|
wall = {
|
|
linux = pkgs.utillinux;
|
|
};
|
|
write = {
|
|
linux = pkgs.utillinux;
|
|
darwin = pkgs.darwin.basic_cmds;
|
|
};
|
|
};
|
|
|
|
makeCompat = name': value: buildEnv {
|
|
name = name' + "-compat-${version}";
|
|
paths = value;
|
|
};
|
|
|
|
# Compatibility derivations
|
|
# Provided for old usage of these commands.
|
|
compat = with bins; lib.mapAttrs makeCompat {
|
|
procps = [ ps sysctl top ];
|
|
utillinux = [ fsck fdisk getopt hexdump mount
|
|
script umount whereis write col ];
|
|
nettools = [ arp hostname ifconfig netstat route ];
|
|
};
|
|
in bins // compat
|