diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/default.nix | 4 | ||||
-rw-r--r-- | lib/thin-shim.nix | 41 |
2 files changed, 45 insertions, 0 deletions
diff --git a/lib/default.nix b/lib/default.nix new file mode 100644 index 0000000..0f6f82b --- /dev/null +++ b/lib/default.nix @@ -0,0 +1,4 @@ +{ }: +{ + mkThinShim = import ./thin-shim.nix; +} diff --git a/lib/thin-shim.nix b/lib/thin-shim.nix new file mode 100644 index 0000000..a9f931b --- /dev/null +++ b/lib/thin-shim.nix @@ -0,0 +1,41 @@ +pkgs: +let + inherit (builtins) + map elem; + + inherit (pkgs) stdenv; +in +pkg: inst: +stdenv.mkDerivation { + pname = pkg.pname + "-shim"; + version = pkg.version; + 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" <<EOF +#!/bin/sh + +term=urxvt +which \$term >/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 +''; +} |