#!/bin/bash # omarchy:summary=Run pending Omarchy system migrations as root. # omarchy:args=[--pending] # omarchy:requires-sudo=true set -euo pipefail mode="run" while (($#)); do case "$1" in --pending|--check) mode="pending" shift ;; -h|--help) echo "Usage: omarchy-migrate-system [--pending]" exit 0 ;; *) echo "Unknown option: $1" >&2 exit 1 ;; esac done OMARCHY_PATH="${OMARCHY_PATH:-/usr/share/omarchy}" STATE_DIR="${OMARCHY_SYSTEM_MIGRATION_STATE:-/var/lib/omarchy/migrations/system}" MIGRATIONS_DIR="$OMARCHY_PATH/migrations/system" pending_migrations() { [[ -d $MIGRATIONS_DIR ]] || return 0 for file in "$MIGRATIONS_DIR"/*.sh; do [[ -f $file ]] || continue filename=$(basename "$file") if [[ ! -f $STATE_DIR/$filename ]]; then printf '%s\n' "$filename" fi done } if [[ $mode == "pending" ]]; then pending_output=$(pending_migrations) if [[ -n $pending_output ]]; then printf '%s\n' "$pending_output" exit 0 else exit 1 fi fi if (( EUID != 0 )) && [[ -z ${OMARCHY_SYSTEM_MIGRATION_STATE:-} ]]; then if ! "$0" --pending >/dev/null; then exit 0 fi exec sudo --preserve-env=OMARCHY_PATH "$0" "$@" fi mkdir -p "$STATE_DIR" [[ -d $MIGRATIONS_DIR ]] || exit 0 for file in "$MIGRATIONS_DIR"/*.sh; do [[ -f $file ]] || continue filename=$(basename "$file") if [[ ! -f $STATE_DIR/$filename ]]; then echo -e "\e[32m\nRunning system migration (${filename%.sh})\e[0m" OMARCHY_PATH="$OMARCHY_PATH" bash -euo pipefail "$file" touch "$STATE_DIR/$filename" fi done