about summary refs log tree commit diff stats
path: root/hm/soispha/pkgs/scripts/small_functions/update-sys.sh
diff options
context:
space:
mode:
Diffstat (limited to 'hm/soispha/pkgs/scripts/small_functions/update-sys.sh')
-rwxr-xr-xhm/soispha/pkgs/scripts/small_functions/update-sys.sh78
1 files changed, 78 insertions, 0 deletions
diff --git a/hm/soispha/pkgs/scripts/small_functions/update-sys.sh b/hm/soispha/pkgs/scripts/small_functions/update-sys.sh
new file mode 100755
index 00000000..20e38841
--- /dev/null
+++ b/hm/soispha/pkgs/scripts/small_functions/update-sys.sh
@@ -0,0 +1,78 @@
+#!/usr/bin/env dash
+
+# shellcheck source=/dev/null
+SHELL_LIBRARY_VERSION="2.0.13" . %SHELL_LIBRARY_PATH
+
+help() {
+    cat << EOF
+This is a NixOS System flake update manager.
+
+Usage:
+    $NAME [--branch <branchname>] [--help]
+
+Options:
+    --branch | -b  BRANCHNAME
+                                select a branch to update from.
+    --mode | -m  MODE
+                                select a mode to update with
+    --help   | -h
+                                output this help.
+EOF
+    exit "$1";
+}
+default_branch=$(mktmp);
+BRANCH="";
+
+while [ "$#" -gt 0 ];do
+    case "$1" in
+        "--help" | "-h")
+            help 0;
+            ;;
+        "--branch" | "-b")
+            if [ -n "$2" ];then
+                BRANCH="$2";
+            else
+                error "$1 requires an argument";
+                help 1;
+            fi
+            shift 2;
+            ;;
+        "--mode" | "-m")
+            if [ -n "$2" ];then
+                MODE="$2";
+            else
+                error "$1 requires an argument";
+                help 1;
+            fi
+            shift 2;
+            ;;
+        *)
+            error "the option $1 does not exist!";
+            help 1;
+            ;;
+    esac
+done
+
+
+cd /etc/nixos || die "No /etc/nixos";
+msg "Starting system update...";
+git remote update origin --prune > /dev/null 2>&1;
+if ! [ "$BRANCH" = "" ];then
+    git switch "$BRANCH" > /dev/null 2>&1 && msg2 "Switched to branch '$BRANCH'";
+fi
+msg2 "Updating git repository...";
+git pull --rebase;
+
+git remote show origin | grep 'HEAD' | cut -d':' -f2 | sed -e 's/^ *//g' -e 's/ *$//g' > "$default_branch" &
+
+msg2 "Updating system...";
+if [ -n "$MODE" ]; then
+    nixos-rebuild "$MODE";
+else
+    nixos-rebuild switch;
+fi
+
+git switch "$(cat "$default_branch")" > /dev/null 2>&1 && msg2 "Switched to branch '$(cat "$default_branch")'";
+msg "Finished Update!";
+
+# vim: ft=sh