2018-02-27 20:31:03 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2017-01-16 20:26:42 +01:00
|
|
|
function setupVars() {
|
2020-04-25 18:24:13 +02:00
|
|
|
local nixStateDir="${NIX_STATE_DIR:-/nix/var/nix}"
|
|
|
|
local profilesPath="$nixStateDir/profiles/per-user/$USER"
|
|
|
|
local gcPath="$nixStateDir/gcroots/per-user/$USER"
|
2017-01-16 20:26:42 +01:00
|
|
|
|
2021-07-27 23:27:01 +02:00
|
|
|
declare -gr genProfilePath="$profilesPath/home-manager"
|
|
|
|
declare -gr newGenPath="@GENERATION_DIR@";
|
|
|
|
declare -gr newGenGcPath="$gcPath/current-home"
|
|
|
|
|
|
|
|
declare -g newGenLayoutVersion
|
|
|
|
if [[ -f $newGenPath/version ]]; then
|
|
|
|
newGenLayoutVersion=$(< "$newGenPath/version")
|
|
|
|
else
|
|
|
|
newGenLayoutVersion=0
|
|
|
|
fi
|
|
|
|
readonly newGenLayoutVersion
|
2020-05-16 18:09:09 +02:00
|
|
|
|
|
|
|
local greatestGenNum
|
2017-01-16 20:26:42 +01:00
|
|
|
greatestGenNum=$( \
|
2020-05-16 18:09:09 +02:00
|
|
|
nix-env --list-generations --profile "$genProfilePath" \
|
|
|
|
| tail -1 \
|
|
|
|
| sed -E 's/ *([[:digit:]]+) .*/\1/')
|
2017-01-16 20:26:42 +01:00
|
|
|
|
2018-03-13 20:49:45 +01:00
|
|
|
if [[ -n $greatestGenNum ]] ; then
|
2017-01-16 20:26:42 +01:00
|
|
|
oldGenNum=$greatestGenNum
|
|
|
|
newGenNum=$((oldGenNum + 1))
|
|
|
|
else
|
|
|
|
newGenNum=1
|
|
|
|
fi
|
|
|
|
|
2020-05-16 18:09:09 +02:00
|
|
|
if [[ -e $profilesPath/home-manager ]] ; then
|
2021-07-27 23:27:01 +02:00
|
|
|
declare -g oldGenPath oldGenLayoutVersion
|
2020-05-16 18:09:09 +02:00
|
|
|
oldGenPath="$(readlink -e "$profilesPath/home-manager")"
|
2021-07-27 23:27:01 +02:00
|
|
|
if [[ -f $oldGenPath/version ]]; then
|
|
|
|
oldGenLayoutVersion=$(< "$oldGenPath/version")
|
|
|
|
else
|
|
|
|
oldGenLayoutVersion=0
|
|
|
|
fi
|
|
|
|
readonly oldGenPath oldGenLayoutVersion
|
2017-01-16 20:26:42 +01:00
|
|
|
fi
|
|
|
|
|
2018-03-13 20:49:45 +01:00
|
|
|
$VERBOSE_ECHO "Sanity checking oldGenNum and oldGenPath"
|
|
|
|
if [[ -v oldGenNum && ! -v oldGenPath
|
|
|
|
|| ! -v oldGenNum && -v oldGenPath ]]; then
|
2020-05-16 18:09:09 +02:00
|
|
|
errorEcho "Invalid profile number and current profile values! These"
|
|
|
|
errorEcho "must be either both empty or both set but are now set to"
|
2018-03-13 20:49:45 +01:00
|
|
|
errorEcho " '${oldGenNum:-}' and '${oldGenPath:-}'"
|
|
|
|
errorEcho "If you don't mind losing previous profile generations then"
|
|
|
|
errorEcho "the easiest solution is probably to run"
|
|
|
|
errorEcho " rm $profilesPath/home-manager*"
|
|
|
|
errorEcho " rm $gcPath/current-home"
|
|
|
|
errorEcho "and trying home-manager switch again. Good luck!"
|
|
|
|
exit 1
|
|
|
|
fi
|
2017-01-16 20:26:42 +01:00
|
|
|
}
|
|
|
|
|
2017-03-25 21:48:17 +01:00
|
|
|
if [[ -v VERBOSE ]]; then
|
2017-01-21 12:27:50 +01:00
|
|
|
export VERBOSE_ECHO=echo
|
|
|
|
export VERBOSE_ARG="--verbose"
|
|
|
|
else
|
|
|
|
export VERBOSE_ECHO=true
|
2017-03-25 21:48:17 +01:00
|
|
|
export VERBOSE_ARG=""
|
2017-01-21 12:27:50 +01:00
|
|
|
fi
|
|
|
|
|
2018-03-13 20:49:45 +01:00
|
|
|
echo "Starting home manager activation"
|
|
|
|
|
2020-05-20 22:17:37 +02:00
|
|
|
# Verify that we can connect to the Nix store and/or daemon. This will
|
|
|
|
# also create the necessary directories in profiles and gcroots.
|
|
|
|
$VERBOSE_ECHO "Sanity checking Nix"
|
|
|
|
nix-build --expr '{}' --no-out-link
|
|
|
|
|
2018-03-13 20:49:45 +01:00
|
|
|
setupVars
|
|
|
|
|
2017-03-25 21:48:17 +01:00
|
|
|
if [[ -v DRY_RUN ]] ; then
|
2017-08-17 10:16:30 +02:00
|
|
|
echo "This is a dry run"
|
2017-01-21 12:27:50 +01:00
|
|
|
export DRY_RUN_CMD=echo
|
2017-01-16 20:26:42 +01:00
|
|
|
else
|
2017-01-21 12:27:50 +01:00
|
|
|
$VERBOSE_ECHO "This is a live run"
|
2017-03-25 21:48:17 +01:00
|
|
|
export DRY_RUN_CMD=""
|
2017-01-16 20:26:42 +01:00
|
|
|
fi
|
|
|
|
|
2018-02-27 20:31:03 +01:00
|
|
|
if [[ -v VERBOSE ]]; then
|
|
|
|
echo -n "Using Nix version: "
|
|
|
|
nix-env --version
|
|
|
|
fi
|
|
|
|
|
2017-01-21 12:27:50 +01:00
|
|
|
$VERBOSE_ECHO "Activation variables:"
|
2017-03-29 00:10:30 +02:00
|
|
|
if [[ -v oldGenNum ]] ; then
|
|
|
|
$VERBOSE_ECHO " oldGenNum=$oldGenNum"
|
|
|
|
$VERBOSE_ECHO " oldGenPath=$oldGenPath"
|
|
|
|
else
|
|
|
|
$VERBOSE_ECHO " oldGenNum undefined (first run?)"
|
|
|
|
$VERBOSE_ECHO " oldGenPath undefined (first run?)"
|
|
|
|
fi
|
2017-01-21 12:27:50 +01:00
|
|
|
$VERBOSE_ECHO " newGenPath=$newGenPath"
|
2017-03-29 00:10:30 +02:00
|
|
|
$VERBOSE_ECHO " newGenNum=$newGenNum"
|
2017-01-21 12:27:50 +01:00
|
|
|
$VERBOSE_ECHO " newGenGcPath=$newGenGcPath"
|
2017-02-05 23:00:04 +01:00
|
|
|
$VERBOSE_ECHO " genProfilePath=$genProfilePath"
|