2016-12-12 17:34:43 +01:00
|
|
|
|
#! @shell@
|
|
|
|
|
set -e
|
|
|
|
|
set -o pipefail
|
|
|
|
|
export PATH=@path@:$PATH
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
showSyntax() {
|
2017-07-24 23:08:26 +02:00
|
|
|
|
echo "darwin-rebuild [--help] {build | switch | check | changelog}" >&2
|
2017-10-20 21:45:31 +02:00
|
|
|
|
echo " [--list-generations] [{--profile-name | -p} name] [--rollback]" >&2
|
|
|
|
|
echo " [{--switch-generation | -G} generation] [--verbose...] [-v...]" >&2
|
|
|
|
|
echo " [-Q] [{--max-jobs | -j} number] [--cores number] [--dry-run]" >&1
|
|
|
|
|
echo " [--keep-going] [-k] [--keep-failed] [-K] [--fallback] [--show-trace]" >&2
|
|
|
|
|
echo " [-I path] [--option name value] [--arg name value] [--argstr name value]" >&2
|
2016-12-15 21:52:53 +01:00
|
|
|
|
exec man darwin-rebuild
|
|
|
|
|
exit 1
|
2016-12-12 17:34:43 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Parse the command line.
|
|
|
|
|
origArgs=("$@")
|
2016-12-20 00:05:01 +01:00
|
|
|
|
extraBuildFlags=()
|
2017-05-15 21:16:09 +02:00
|
|
|
|
extraProfileFlags=()
|
2016-12-20 00:05:01 +01:00
|
|
|
|
profile=@profile@
|
2016-12-12 17:34:43 +01:00
|
|
|
|
action=
|
|
|
|
|
|
|
|
|
|
while [ "$#" -gt 0 ]; do
|
2016-12-15 21:52:53 +01:00
|
|
|
|
i="$1"; shift 1
|
|
|
|
|
case "$i" in
|
|
|
|
|
--help)
|
|
|
|
|
showSyntax
|
|
|
|
|
;;
|
2017-07-24 23:08:26 +02:00
|
|
|
|
switch|build|changelog|check)
|
2016-12-15 21:52:53 +01:00
|
|
|
|
action="$i"
|
|
|
|
|
;;
|
2017-01-10 21:41:18 +01:00
|
|
|
|
--show-trace|--no-build-hook|--dry-run|--keep-going|-k|--keep-failed|-K|--verbose|-v|-vv|-vvv|-vvvv|-vvvvv|--fallback|-Q)
|
2016-12-20 00:05:01 +01:00
|
|
|
|
extraBuildFlags+=("$i")
|
|
|
|
|
;;
|
2017-01-24 21:47:34 +01:00
|
|
|
|
-j[0-9]*)
|
|
|
|
|
extraBuildFlags+=("$i")
|
|
|
|
|
;;
|
2016-12-20 00:05:01 +01:00
|
|
|
|
--max-jobs|-j|--cores|-I)
|
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
|
echo "$0: ‘$i’ requires an argument"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
j="$1"; shift 1
|
|
|
|
|
extraBuildFlags+=("$i" "$j")
|
|
|
|
|
;;
|
|
|
|
|
--arg|--argstr|--option)
|
|
|
|
|
if [ -z "$1" -o -z "$2" ]; then
|
|
|
|
|
echo "$0: ‘$i’ requires two arguments"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
j="$1"; shift 1
|
|
|
|
|
k="$1"; shift 1
|
|
|
|
|
extraBuildFlags+=("$i" "$j" "$k")
|
|
|
|
|
;;
|
2017-10-20 21:45:31 +02:00
|
|
|
|
--list-generations)
|
|
|
|
|
action="list"
|
|
|
|
|
extraProfileFlags=("$i")
|
|
|
|
|
;;
|
2017-05-15 21:16:09 +02:00
|
|
|
|
--rollback)
|
|
|
|
|
action="rollback"
|
|
|
|
|
extraProfileFlags=("$i")
|
|
|
|
|
;;
|
|
|
|
|
--switch-generation|-G)
|
|
|
|
|
action="rollback"
|
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
|
echo "$0: ‘$i’ requires an argument"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
j="$1"; shift 1
|
|
|
|
|
extraProfileFlags=("$i" "$j")
|
|
|
|
|
;;
|
2016-12-20 00:05:01 +01:00
|
|
|
|
--profile-name|-p)
|
|
|
|
|
if [ -z "$1" ]; then
|
|
|
|
|
echo "$0: ‘--profile-name’ requires an argument"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
if [ "$1" != system ]; then
|
|
|
|
|
profile="/nix/var/nix/profiles/system-profiles/$1"
|
|
|
|
|
mkdir -p -m 0755 "$(dirname "$profile")"
|
|
|
|
|
fi
|
|
|
|
|
shift 1
|
|
|
|
|
;;
|
2016-12-15 21:52:53 +01:00
|
|
|
|
*)
|
|
|
|
|
echo "$0: unknown option \`$i'"
|
|
|
|
|
exit 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
2016-12-12 17:34:43 +01:00
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [ -z "$action" ]; then showSyntax; fi
|
|
|
|
|
|
2017-07-24 23:08:26 +02:00
|
|
|
|
if ! [ "$action" = build ]; then
|
2017-03-04 20:00:23 +01:00
|
|
|
|
extraBuildFlags+=("--no-out-link")
|
|
|
|
|
fi
|
|
|
|
|
|
2017-10-20 21:45:31 +02:00
|
|
|
|
if ! [ "$action" = list -o "$action" = rollback ]; then
|
|
|
|
|
echo "building the system configuration..." >&2
|
2017-03-04 20:00:23 +01:00
|
|
|
|
systemConfig="$(nix-build '<darwin>' ${extraBuildFlags[@]} -A system)"
|
2016-12-12 17:34:43 +01:00
|
|
|
|
fi
|
|
|
|
|
|
2017-10-20 21:45:31 +02:00
|
|
|
|
if [ "$action" = list -o "$action" = rollback ]; then
|
2017-05-15 21:16:09 +02:00
|
|
|
|
if [ "$USER" != root -a ! -w $(dirname "$profile") ]; then
|
|
|
|
|
sudo nix-env -p $profile ${extraProfileFlags[@]}
|
|
|
|
|
else
|
|
|
|
|
nix-env -p $profile ${extraProfileFlags[@]}
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
systemConfig="$(cat $profile/systemConfig)"
|
|
|
|
|
fi
|
|
|
|
|
|
2016-12-22 23:25:32 +01:00
|
|
|
|
if [ -z "$systemConfig" ]; then exit 0; fi
|
|
|
|
|
|
2017-05-15 21:16:09 +02:00
|
|
|
|
if [ -n "$rollbackFlags" ]; then
|
2016-12-15 21:52:53 +01:00
|
|
|
|
echo $systemConfig
|
2016-12-14 15:45:45 +01:00
|
|
|
|
fi
|
|
|
|
|
|
2016-12-12 17:34:43 +01:00
|
|
|
|
if [ "$action" = switch ]; then
|
2016-12-20 00:05:01 +01:00
|
|
|
|
if [ "$USER" != root -a ! -w $(dirname "$profile") ]; then
|
|
|
|
|
sudo nix-env -p $profile --set $systemConfig
|
2016-12-15 21:52:53 +01:00
|
|
|
|
else
|
2016-12-20 00:05:01 +01:00
|
|
|
|
nix-env -p $profile --set $systemConfig
|
2016-12-15 21:52:53 +01:00
|
|
|
|
fi
|
2017-05-15 21:16:09 +02:00
|
|
|
|
fi
|
2016-12-14 15:45:45 +01:00
|
|
|
|
|
2017-05-15 21:16:09 +02:00
|
|
|
|
if [ "$action" = switch -o "$action" = rollback ]; then
|
2017-05-11 21:36:57 +02:00
|
|
|
|
$systemConfig/activate-user
|
|
|
|
|
|
2016-12-15 21:52:53 +01:00
|
|
|
|
if [ "$USER" != root ]; then
|
|
|
|
|
sudo $systemConfig/activate
|
|
|
|
|
else
|
|
|
|
|
$systemConfig/activate
|
|
|
|
|
fi
|
2016-12-12 17:34:43 +01:00
|
|
|
|
fi
|
2017-07-23 18:02:08 +02:00
|
|
|
|
|
2017-07-24 23:08:26 +02:00
|
|
|
|
if [ "$action" = changelog ]; then
|
|
|
|
|
echo >&2
|
|
|
|
|
echo "[1;1mCHANGELOG[0m" >&2
|
|
|
|
|
echo >&2
|
|
|
|
|
head -n 32 $systemConfig/darwin-changes
|
|
|
|
|
echo >&2
|
|
|
|
|
fi
|
|
|
|
|
|
2017-07-23 18:02:08 +02:00
|
|
|
|
if [ "$action" = check ]; then
|
2017-07-24 23:08:26 +02:00
|
|
|
|
export checkActivation=1
|
2017-07-23 18:02:08 +02:00
|
|
|
|
$systemConfig/activate-user
|
|
|
|
|
fi
|