mirror of
https://github.com/LnL7/nix-darwin.git
synced 2025-03-16 21:38:21 +00:00
darwin-rebuild: add support for --rollback and --switch-generation
This commit is contained in:
parent
2ed3ca511f
commit
32bfad7cc6
1 changed files with 29 additions and 4 deletions
|
@ -5,7 +5,7 @@ export PATH=@path@:$PATH
|
||||||
|
|
||||||
|
|
||||||
showSyntax() {
|
showSyntax() {
|
||||||
echo "darwin-rebuild [--help] {build | switch} [{--profile-name | -p} name]" >&2
|
echo "darwin-rebuild [--help] {build | switch} [{--profile-name | -p} name] [{--switch-generation | -G} generation] [--rollback]" >&2
|
||||||
echo " [--verbose...] [-v...] [-Q] [{--max-jobs | -j} number] [--cores number]" >&2
|
echo " [--verbose...] [-v...] [-Q] [{--max-jobs | -j} number] [--cores number]" >&2
|
||||||
echo " [--dry-run] [--keep-going] [-k] [--keep-failed] [-K] [--fallback] [--show-trace] [-I path]" >&2
|
echo " [--dry-run] [--keep-going] [-k] [--keep-failed] [-K] [--fallback] [--show-trace] [-I path]" >&2
|
||||||
echo " [--option name value] [--arg name value] [--argstr name value]" >&2
|
echo " [--option name value] [--arg name value] [--argstr name value]" >&2
|
||||||
|
@ -16,6 +16,7 @@ showSyntax() {
|
||||||
# Parse the command line.
|
# Parse the command line.
|
||||||
origArgs=("$@")
|
origArgs=("$@")
|
||||||
extraBuildFlags=()
|
extraBuildFlags=()
|
||||||
|
extraProfileFlags=()
|
||||||
profile=@profile@
|
profile=@profile@
|
||||||
action=
|
action=
|
||||||
|
|
||||||
|
@ -51,6 +52,19 @@ while [ "$#" -gt 0 ]; do
|
||||||
k="$1"; shift 1
|
k="$1"; shift 1
|
||||||
extraBuildFlags+=("$i" "$j" "$k")
|
extraBuildFlags+=("$i" "$j" "$k")
|
||||||
;;
|
;;
|
||||||
|
--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")
|
||||||
|
;;
|
||||||
--profile-name|-p)
|
--profile-name|-p)
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
echo "$0: ‘--profile-name’ requires an argument"
|
echo "$0: ‘--profile-name’ requires an argument"
|
||||||
|
@ -80,12 +94,21 @@ if [ "$action" = switch -o "$action" = build ]; then
|
||||||
systemConfig="$(nix-build '<darwin>' ${extraBuildFlags[@]} -A system)"
|
systemConfig="$(nix-build '<darwin>' ${extraBuildFlags[@]} -A system)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$systemConfig" ]; then exit 0; fi
|
if [ "$action" = rollback ]; then
|
||||||
|
if [ "$USER" != root -a ! -w $(dirname "$profile") ]; then
|
||||||
|
sudo nix-env -p $profile ${extraProfileFlags[@]}
|
||||||
|
else
|
||||||
|
nix-env -p $profile ${extraProfileFlags[@]}
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$action" = build ]; then
|
systemConfig="$(cat $profile/systemConfig)"
|
||||||
echo $systemConfig
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$systemConfig" ]; then exit 0; fi
|
||||||
|
|
||||||
|
if [ -n "$rollbackFlags" ]; then
|
||||||
|
echo $systemConfig
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "$action" = switch ]; then
|
if [ "$action" = switch ]; then
|
||||||
if [ "$USER" != root -a ! -w $(dirname "$profile") ]; then
|
if [ "$USER" != root -a ! -w $(dirname "$profile") ]; then
|
||||||
|
@ -93,7 +116,9 @@ if [ "$action" = switch ]; then
|
||||||
else
|
else
|
||||||
nix-env -p $profile --set $systemConfig
|
nix-env -p $profile --set $systemConfig
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$action" = switch -o "$action" = rollback ]; then
|
||||||
$systemConfig/activate-user
|
$systemConfig/activate-user
|
||||||
|
|
||||||
if [ "$USER" != root ]; then
|
if [ "$USER" != root ]; then
|
||||||
|
|
Loading…
Add table
Reference in a new issue