From 61e8781e600a916e51fd663c4d8cd5d93bb894cb Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Sun, 24 Nov 2019 20:39:26 +0100 Subject: persistent-nix-shell --- nix/default.nix | 1 + nix/persistent-nix-shell.nix | 22 ++++++++++++++++++++++ persistent-nix-shell | 20 ++++++++++++++++++++ 3 files changed, 43 insertions(+) create mode 100644 nix/persistent-nix-shell.nix create mode 100755 persistent-nix-shell diff --git a/nix/default.nix b/nix/default.nix index cef8800..f3e35e2 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -8,4 +8,5 @@ self: super: rolling-directory = self.callPackage ./rolling-directory.nix {}; recv = self.callPackage ./recv.nix {}; notmuch-tcp = self.callPackage ./notmuch-tcp.nix {}; + persistent-nix-shell = self.callPackage ./persistent-nix-shell.nix {}; } diff --git a/nix/persistent-nix-shell.nix b/nix/persistent-nix-shell.nix new file mode 100644 index 0000000..7b371c6 --- /dev/null +++ b/nix/persistent-nix-shell.nix @@ -0,0 +1,22 @@ +{ stdenv +, zsh +}: + +stdenv.mkDerivation rec { + pname = "persistent-nix-shell"; + version = "0.1"; + src = ../persistent-nix-shell; + + phases = [ "buildPhase" "installPhase" ]; + + inherit zsh; + + buildPhase = '' + substituteAll $src persistent-nix-shell + ''; + + installPhase = '' + install -m 0755 -D -t $out/bin \ + persistent-nix-shell + ''; +} diff --git a/persistent-nix-shell b/persistent-nix-shell new file mode 100755 index 0000000..a17f6de --- /dev/null +++ b/persistent-nix-shell @@ -0,0 +1,20 @@ +#!@zsh@/bin/zsh + +set -e + +gcrootsDir=${PWD}/.nix-gc-roots + +if [[ ${#@} -ge 1 ]]; then + shellFile=${1} + shift +else + shellFile=${PWD}/shell.nix +fi + +set -x +mkdir -p ${gcrootsDir} +nix-instantiate ${shellFile} --indirect --add-root ${gcrootsDir}/shell.drv +nix-store --indirect --add-root ${gcrootsDir}/shell.dep --realise $(nix-store --query --references ${gcrootsDir}/shell.drv) +set +x + +exec nix-shell $(readlink ${gcrootsDir}/shell.drv) ${@} -- cgit v1.2.3