diff options
Diffstat (limited to 'overlays/persistent-nix-shell')
| -rw-r--r-- | overlays/persistent-nix-shell/default.nix | 19 | ||||
| -rw-r--r-- | overlays/persistent-nix-shell/persistent-nix-shell | 20 |
2 files changed, 39 insertions, 0 deletions
diff --git a/overlays/persistent-nix-shell/default.nix b/overlays/persistent-nix-shell/default.nix new file mode 100644 index 00000000..60396335 --- /dev/null +++ b/overlays/persistent-nix-shell/default.nix | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | final: prev: { | ||
| 2 | persistent-nix-shell = prev.stdenv.mkDerivation { | ||
| 3 | name = "persistent-nix-shell"; | ||
| 4 | src = ./persistent-nix-shell; | ||
| 5 | |||
| 6 | phases = [ "buildPhase" "installPhase" ]; | ||
| 7 | |||
| 8 | inherit (final) zsh; | ||
| 9 | |||
| 10 | buildPhase = '' | ||
| 11 | substituteAll $src persistent-nix-shell | ||
| 12 | ''; | ||
| 13 | |||
| 14 | installPhase = '' | ||
| 15 | install -m 0755 -D -t $out/bin \ | ||
| 16 | persistent-nix-shell | ||
| 17 | ''; | ||
| 18 | }; | ||
| 19 | } | ||
diff --git a/overlays/persistent-nix-shell/persistent-nix-shell b/overlays/persistent-nix-shell/persistent-nix-shell new file mode 100644 index 00000000..a17f6de6 --- /dev/null +++ b/overlays/persistent-nix-shell/persistent-nix-shell | |||
| @@ -0,0 +1,20 @@ | |||
| 1 | #!@zsh@/bin/zsh | ||
| 2 | |||
| 3 | set -e | ||
| 4 | |||
| 5 | gcrootsDir=${PWD}/.nix-gc-roots | ||
| 6 | |||
| 7 | if [[ ${#@} -ge 1 ]]; then | ||
| 8 | shellFile=${1} | ||
| 9 | shift | ||
| 10 | else | ||
| 11 | shellFile=${PWD}/shell.nix | ||
| 12 | fi | ||
| 13 | |||
| 14 | set -x | ||
| 15 | mkdir -p ${gcrootsDir} | ||
| 16 | nix-instantiate ${shellFile} --indirect --add-root ${gcrootsDir}/shell.drv | ||
| 17 | nix-store --indirect --add-root ${gcrootsDir}/shell.dep --realise $(nix-store --query --references ${gcrootsDir}/shell.drv) | ||
| 18 | set +x | ||
| 19 | |||
| 20 | exec nix-shell $(readlink ${gcrootsDir}/shell.drv) ${@} | ||
