Files
omarchycn/bin/omarchy-cn-update
T

48 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
# omarchy:summary=Update an overlay install: pull source, reinstall, run migrations
# omarchy:examples=omarchycn update
set -euo pipefail
MANIFEST="$HOME/.local/state/omarchycn/overlay-manifest"
MIGRATION_STATE="$HOME/.local/state/omarchycn/last-migration"
if [[ ! -f $MANIFEST ]]; then
echo "Not an overlay install (no $MANIFEST)." >&2
echo "Package-based installs update through 'omarchy update' / pacman." >&2
exit 1
fi
src=$(grep -m1 '^source=' "$MANIFEST" | cut -d= -f2-)
if [[ ! -d $src/.git ]]; then
echo "Overlay source $src is not a git checkout" >&2
exit 1
fi
old=$(git -C "$src" rev-parse --short HEAD)
git -C "$src" pull --ff-only
new=$(git -C "$src" rev-parse --short HEAD)
echo "Source: $old -> $new"
"$src/bin/omarchy-cn-install-overlay"
# Run migrations newer than the last recorded one, in filename order
last=""
if [[ -f $MIGRATION_STATE ]]; then
last=$(<"$MIGRATION_STATE")
fi
if [[ -d $src/cn/migrations ]]; then
for m in "$src"/cn/migrations/*.sh; do
[[ -f $m ]] || continue
name="${m##*/}"
if [[ $name > $last ]]; then
echo "Migration: $name"
bash "$m"
echo "$name" > "$MIGRATION_STATE"
fi
done
fi
echo "OmarchyCN update complete ($(omarchy-cn-version 2>/dev/null || echo unknown))"