diff options
Diffstat (limited to 'home-manager/home-manager')
-rw-r--r-- | home-manager/home-manager | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/home-manager/home-manager b/home-manager/home-manager index 2fbf057f873..8e0bd40c2d5 100644 --- a/home-manager/home-manager +++ b/home-manager/home-manager @@ -77,8 +77,18 @@ function doBuild() { function doSwitch() { local generation local exitCode=0 - - generation=$(doBuild "--no-out-link") && $generation/activate || exitCode=1 + local wrkdir + + # Build the generation and run the activate script. Note, we + # specify an output link si that it is treated as a GC root. This + # prevents an unfortunately timed GC from removing the generation + # before activation completes. + wrkdir="$(mktemp -d)" + generation=$(doBuild "-o $wrkdir/result") && $generation/activate || exitCode=1 + + # Because the previous command never fails, the script keeps + # running and $wrkdir is always removed. + rm -r "$wrkdir" return $exitCode } |