pkgs: let inherit (builtins) map elem; inherit (pkgs) stdenv; in pkg: inst: stdenv.mkDerivation { # I don't like using `name' instead of `pname' and `version', but # regrettably not all packages use `pname' and `version' yet, so for the # sake of consistency, we treat all packages as if they didn't use `pname' # and `version'. name = pkg.name + "-shim"; nativeBuildInputs = [pkg]; dontUnpack = true; buildPhase = '' if [ -d ${pkg}/bin ]; then mkdir -p "$out/bin" for exe in $(ls "${pkg}/bin/"); do cat >"$out/bin/$exe" </dev/null 2>&1 || term=xterm if [ "\$DISPLAY" ]; then \$term -e nix shell '${inst}' --command '$exe' \$* else nix shell '${inst}' --command '$exe' \$* fi EOF chmod +x "$out/bin/$exe" done fi for dir in "share/applications" "share/icons"; do if [ -d "${pkg}/$dir" ]; then mkdir -p "$out/$dir" cp -a "${pkg}/$dir/"* "$out/$dir" fi done ''; }