Use omarchy-upgrade-to-quattro

This commit is contained in:
David Heinemeier Hansson
2026-06-21 12:31:06 +02:00
parent c2e5614b65
commit 428b9c7b29
10 changed files with 67 additions and 67 deletions
+1 -1
View File
@@ -188,6 +188,6 @@ New migration format:
- Use `$OMARCHY_PATH` to reference the omarchy directory
- Prefer helper commands such as `omarchy-cmd-present`, `omarchy-cmd-missing`, `omarchy-pkg-present`, and `omarchy-pkg-missing`
Omarchy 4.0 is upgraded through `bin/omarchy-upgrade-to-4`, not through the normal migration runner. Do not add compatibility migrations for old installer layouts; put pre-4 package-layout transition work in the upgrade command instead.
Omarchy 4.0 is upgraded through `bin/omarchy-upgrade-to-quattro`, not through the normal migration runner. Do not add compatibility migrations for old installer layouts; put pre-4 package-layout transition work in the upgrade command instead.
Migrations may use raw `pacman`, `command -v`, or direct config edits when needed for one-off repair work.
@@ -2,14 +2,14 @@
# omarchy:summary=Upgrade a legacy Omarchy install to the package-backed Omarchy 4 layout.
# omarchy:args=[--yes] [--reboot] [--dev] [--channel stable|rc|edge] [--user USER]
# omarchy:examples=omarchy upgrade to 4 | omarchy upgrade to 4 --dev
# omarchy:examples=omarchy upgrade to quattro | omarchy upgrade to quattro --dev
# omarchy:requires-sudo=true
set -euo pipefail
usage() {
cat <<'USAGE'
Usage: omarchy-upgrade-to-4 [--yes] [--reboot] [--dev] [--channel stable|rc|edge] [--user USER]
Usage: omarchy-upgrade-to-quattro [--yes] [--reboot] [--dev] [--channel stable|rc|edge] [--user USER]
Upgrade any pre-4 Omarchy install to the package-backed Omarchy 4 layout.
This script is intentionally self-contained so it can be shipped as a command
@@ -342,7 +342,7 @@ configure_pacman_channel() {
as_root install -d -m 0755 /etc/pacman.d
if [[ -f /etc/pacman.d/mirrorlist ]]; then
as_root cp -f /etc/pacman.d/mirrorlist "/etc/pacman.d/mirrorlist.omarchy-upgrade-to-4.$backup_suffix.bak"
as_root cp -f /etc/pacman.d/mirrorlist "/etc/pacman.d/mirrorlist.omarchy-upgrade-to-quattro.$backup_suffix.bak"
fi
printf 'Server = %s\n' "$mirror_server" | as_root tee /etc/pacman.d/mirrorlist >/dev/null
@@ -350,7 +350,7 @@ configure_pacman_channel() {
fail "/etc/pacman.conf does not exist."
fi
as_root cp -f /etc/pacman.conf "/etc/pacman.conf.omarchy-upgrade-to-4.$backup_suffix.bak"
as_root cp -f /etc/pacman.conf "/etc/pacman.conf.omarchy-upgrade-to-quattro.$backup_suffix.bak"
# Replace the normal Omarchy package repository. Dev package mode uses the
# edge channel and resolves omarchy-dev / omarchy-settings-dev from [omarchy].
@@ -759,8 +759,8 @@ populate_legacy_hypr_defaults() {
create_live_omarchy_overlay() {
local backup="$1" compat_root shim_hypr_dir entry base cleanup_hook
compat_root="$TARGET_HOME/.local/state/omarchy/upgrade-to-4-live-omarchy"
shim_hypr_dir="$TARGET_HOME/.local/state/omarchy/upgrade-to-4-hypr-defaults"
compat_root="$TARGET_HOME/.local/state/omarchy/upgrade-to-quattro-live-omarchy"
shim_hypr_dir="$TARGET_HOME/.local/state/omarchy/upgrade-to-quattro-hypr-defaults"
populate_legacy_hypr_defaults "$shim_hypr_dir" "$backup" || return 1
@@ -782,7 +782,7 @@ create_live_omarchy_overlay() {
done
ln -s "$shim_hypr_dir" "$compat_root/default/hypr"
cleanup_hook="$TARGET_HOME/.config/omarchy/hooks/post-boot.d/cleanup-upgrade-to-4-live-shim"
cleanup_hook="$TARGET_HOME/.config/omarchy/hooks/post-boot.d/cleanup-upgrade-to-quattro-live-shim"
mkdir -p "$(dirname "$cleanup_hook")"
cat >"$cleanup_hook" <<CLEANUP_HOOK
#!/bin/bash
@@ -813,7 +813,7 @@ if [[ -e /usr/share/omarchy ]]; then
if [[ -L $legacy_root ]]; then
rm -f "$legacy_root"
elif [[ -e $legacy_root ]]; then
backup="$legacy_root.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
backup="$legacy_root.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
mv "$legacy_root" "$backup"
fi
@@ -1075,7 +1075,7 @@ run_post_upgrade_migrations() {
USER="$target_user" \
LOGNAME="$target_user" \
OMARCHY_PATH=/usr/share/omarchy \
OMARCHY_UPGRADE_TO_4_LIVE=1 \
OMARCHY_UPGRADE_TO_QUATTRO_LIVE=1 \
PATH="$package_path" \
omarchy-migrate; then
warn "Could not run Omarchy migrations; the user may be prompted to run them after login."
@@ -1534,7 +1534,7 @@ is_known_default_hash() {
backup_config_file() {
local file="$1"
[[ -e $file || -L $file ]] || return 0
cp -af "$file" "$file.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
cp -af "$file" "$file.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
}
mapfile -t retired_config_files < <(default_hash_paths retire)
@@ -1785,7 +1785,7 @@ BASHRC_PATCH_PY
# cleanup, then keep only real user customizations active.
uwsm_env="$HOME/.config/uwsm/env"
if [[ -f $uwsm_env ]]; then
cp -f "$uwsm_env" "$uwsm_env.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
cp -f "$uwsm_env" "$uwsm_env.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
migrate_uwsm_env_customizations "$uwsm_env"
fi
@@ -1806,7 +1806,7 @@ repair_chromium_copy_url_extension_flags
# Carry over user-added backgrounds from the legacy git checkout backup, then
# remove old symlinks that pointed ~/.config/omarchy/themes/* back into the
# pre-4 checkout. Omarchy 4 reads stock themes from /usr/share/omarchy/themes.
legacy_omarchy_backup="$HOME/.local/share/omarchy.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
legacy_omarchy_backup="$HOME/.local/share/omarchy.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
if [[ -d $legacy_omarchy_backup/themes && -d $legacy_omarchy_backup/.git ]]; then
(
cd "$legacy_omarchy_backup"
@@ -1837,7 +1837,7 @@ fi
for rel in waybar swayosd mako walker; do
file="$HOME/.config/$rel"
if [[ -e $file || -L $file ]]; then
backup="$file.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
backup="$file.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
rm -rf "$backup"
mv "$file" "$backup"
fi
@@ -1845,7 +1845,7 @@ done
for rel in "${retired_config_files[@]}"; do
file="$HOME/.config/$rel"
backup="$file.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
backup="$file.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
# UWSM env was hardcoded to the legacy checkout on older installs. Custom
# non-Omarchy lines were migrated to env.d above; never keep the active file.
@@ -2079,7 +2079,7 @@ for desktop in \
done
legacy_icons_dir="$HOME/.local/share/applications/icons"
legacy_icons_backup="$HOME/.local/share/applications/icons.omarchy-upgrade-to-4.$BACKUP_SUFFIX.bak"
legacy_icons_backup="$HOME/.local/share/applications/icons.omarchy-upgrade-to-quattro.$BACKUP_SUFFIX.bak"
if [[ -d $legacy_icons_dir ]]; then
mkdir -p "$legacy_icons_backup"
for icon in \
+1 -1
View File
@@ -149,6 +149,6 @@ rm ~/.local/state/omarchy/migrations/<migration>.sh
omarchy-migrate
```
Omarchy 4.0 is upgraded through `bin/omarchy-upgrade-to-4`, not through the
Omarchy 4.0 is upgraded through `bin/omarchy-upgrade-to-quattro`, not through the
normal migration runner. Do not add compatibility migrations for old installer
layouts; put pre-4 package-layout transition work in the upgrade command instead.
+1 -1
View File
@@ -41,7 +41,7 @@ networkd_units=(
systemd-networkd-resolve-hook.socket
)
if [[ ${OMARCHY_UPGRADE_TO_4_LIVE:-0} == "1" ]]; then
if [[ ${OMARCHY_UPGRADE_TO_QUATTRO_LIVE:-0} == "1" ]]; then
as_root systemctl enable NetworkManager.service >/dev/null 2>&1 || true
if systemctl is-active --quiet NetworkManager.service 2>/dev/null; then
+1 -1
View File
@@ -300,7 +300,7 @@ jq -e '
' "$TMPDIR/home/.config/omarchy/shell.json" >/dev/null
pass "shell config removes widgets with remove alias"
if grep -RIl 'upgrade-to-4\|Omarchy 4\.0 is upgraded' "$ROOT/migrations" >/dev/null; then
if grep -RIl 'upgrade-to-quattro\|Omarchy 4\.0 is upgraded' "$ROOT/migrations" >/dev/null; then
fail "4.0 upgrade is not modeled as a migration"
fi
pass "4.0 upgrade is handled outside the migration runner"
+5 -5
View File
@@ -157,12 +157,12 @@ cmp -s "$ROOT/config/hypr/bindings.lua" "$migration_home/.config/hypr/bindings.l
fail "plain legacy bindings preserve preinstall removal state"
pass "migration converts plain legacy bindings to package-owned defaults"
upgrade_script="$ROOT/bin/omarchy-upgrade-to-4"
upgrade_script="$ROOT/bin/omarchy-upgrade-to-quattro"
grep -Fq 'touch "$state_dir/preinstalls-removed"' "$upgrade_script" ||
fail "upgrade-to-4 preserves preinstall removal state"
fail "upgrade-to-quattro preserves preinstall removal state"
mark_line=$(awk '/^mark_removed_preinstalls_from_legacy_bindings$/ { print NR; exit }' "$upgrade_script")
copy_line=$(awk '/^copy_always_config_defaults$/ { print NR; exit }' "$upgrade_script")
[[ -n $mark_line && -n $copy_line ]] || fail "upgrade-to-4 preinstall marker and config refresh calls exist"
(( mark_line < copy_line )) || fail "upgrade-to-4 detects plain legacy bindings before overwriting Hyprland bindings"
pass "upgrade-to-4 preserves preinstall removal before refreshing Hyprland bindings"
[[ -n $mark_line && -n $copy_line ]] || fail "upgrade-to-quattro preinstall marker and config refresh calls exist"
(( mark_line < copy_line )) || fail "upgrade-to-quattro detects plain legacy bindings before overwriting Hyprland bindings"
pass "upgrade-to-quattro preserves preinstall removal before refreshing Hyprland bindings"
@@ -27,7 +27,7 @@ grep -F '20-wlan.network' "$hardware_network" >/dev/null
grep -F 'omarchy-networkd-retired' "$hardware_network" >/dev/null
pass "hardware setup retires archinstall networkd state"
grep -F 'OMARCHY_UPGRADE_TO_4_LIVE' "$migration" >/dev/null
grep -F 'OMARCHY_UPGRADE_TO_QUATTRO_LIVE' "$migration" >/dev/null
grep -F 'systemctl disable --now "$unit"' "$migration" >/dev/null
grep -F 'systemctl stop systemd-networkd.service' "$migration" >/dev/null
grep -F 'NetworkManager.service' "$migration" >/dev/null
+5 -5
View File
@@ -21,9 +21,9 @@ grep -Fx 'systemctl --user daemon-reload' "$first_run_units" >/dev/null
grep -F 'omarchy-sleep-lock.service' "$first_run_units" >/dev/null
pass "first-run reloads and enables the sleep lock service"
upgrade_to_4="$ROOT/bin/omarchy-upgrade-to-4"
grep -F '6870b232a6c0474b59187882e6d25ae771bba735098bcbedef8a2b73b97e2b6a' "$upgrade_to_4" >/dev/null
grep -F 'ExecStart=%h/.local/share/omarchy/bin/omarchy-system-sleep-monitor' "$upgrade_to_4" >/dev/null
grep -F 'ExecStart=/usr/bin/omarchy-system-sleep-monitor' "$upgrade_to_4" >/dev/null
grep -F 'reset-failed omarchy-sleep-lock.service' "$upgrade_to_4" >/dev/null
upgrade_to_quattro="$ROOT/bin/omarchy-upgrade-to-quattro"
grep -F '6870b232a6c0474b59187882e6d25ae771bba735098bcbedef8a2b73b97e2b6a' "$upgrade_to_quattro" >/dev/null
grep -F 'ExecStart=%h/.local/share/omarchy/bin/omarchy-system-sleep-monitor' "$upgrade_to_quattro" >/dev/null
grep -F 'ExecStart=/usr/bin/omarchy-system-sleep-monitor' "$upgrade_to_quattro" >/dev/null
grep -F 'reset-failed omarchy-sleep-lock.service' "$upgrade_to_quattro" >/dev/null
pass "Omarchy 4 upgrade repairs the legacy sleep lock unit path"
-37
View File
@@ -1,37 +0,0 @@
#!/bin/bash
set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
upgrade_to_4="$ROOT/bin/omarchy-upgrade-to-4"
first_run_wifi="$ROOT/install/user/first-run/wifi.sh"
grep -F 'pacman -Syu --needed' "$upgrade_to_4" >/dev/null
grep -F 'omarchy-update-aur-pkgs' "$upgrade_to_4" >/dev/null
grep -F 'omarchy-update-available' "$upgrade_to_4" >/dev/null
grep -F 'omarchy-update-mise' "$upgrade_to_4" >/dev/null
grep -F 'run_final_system_package_upgrade' "$upgrade_to_4" >/dev/null
pass "Omarchy 4 upgrade completes package update checks"
grep -F 'run_post_upgrade_migrations' "$upgrade_to_4" >/dev/null
grep -F 'omarchy-migrate' "$upgrade_to_4" >/dev/null
grep -F 'dust' "$upgrade_to_4" >/dev/null
grep -F 'satty' "$upgrade_to_4" >/dev/null
pass "Omarchy 4 upgrade applies packaged migrations"
grep -F 'skip-first-run-update-notification' "$upgrade_to_4" >/dev/null
grep -F 'skip-first-run-update-notification' "$first_run_wifi" >/dev/null
grep -F '(( skip_update_notification )) && return 0' "$first_run_wifi" >/dev/null
pass "Omarchy 4 upgrade suppresses the fresh-install update toast"
grep -F 'configure_snapper_policy' "$upgrade_to_4" >/dev/null
grep -F '/usr/share/omarchy/install/config/snapper.sh' "$upgrade_to_4" >/dev/null
grep -F 'bash -euo pipefail "$snapper_config_script"' "$upgrade_to_4" >/dev/null
pass "Omarchy 4 upgrade normalizes Snapper retention"
grep -F 'OMARCHY_UPGRADE_TO_4_LIVE=1' "$upgrade_to_4" >/dev/null
grep -F 'systemd-networkd.service' "$upgrade_to_4" >/dev/null
grep -F 'systemd-networkd.socket' "$upgrade_to_4" >/dev/null
grep -F 'systemd-networkd-resolve-hook.socket' "$upgrade_to_4" >/dev/null
pass "Omarchy 4 upgrade retires systemd-networkd for NetworkManager"
+37
View File
@@ -0,0 +1,37 @@
#!/bin/bash
set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
upgrade_to_quattro="$ROOT/bin/omarchy-upgrade-to-quattro"
first_run_wifi="$ROOT/install/user/first-run/wifi.sh"
grep -F 'pacman -Syu --needed' "$upgrade_to_quattro" >/dev/null
grep -F 'omarchy-update-aur-pkgs' "$upgrade_to_quattro" >/dev/null
grep -F 'omarchy-update-available' "$upgrade_to_quattro" >/dev/null
grep -F 'omarchy-update-mise' "$upgrade_to_quattro" >/dev/null
grep -F 'run_final_system_package_upgrade' "$upgrade_to_quattro" >/dev/null
pass "Omarchy 4 upgrade completes package update checks"
grep -F 'run_post_upgrade_migrations' "$upgrade_to_quattro" >/dev/null
grep -F 'omarchy-migrate' "$upgrade_to_quattro" >/dev/null
grep -F 'dust' "$upgrade_to_quattro" >/dev/null
grep -F 'satty' "$upgrade_to_quattro" >/dev/null
pass "Omarchy 4 upgrade applies packaged migrations"
grep -F 'skip-first-run-update-notification' "$upgrade_to_quattro" >/dev/null
grep -F 'skip-first-run-update-notification' "$first_run_wifi" >/dev/null
grep -F '(( skip_update_notification )) && return 0' "$first_run_wifi" >/dev/null
pass "Omarchy 4 upgrade suppresses the fresh-install update toast"
grep -F 'configure_snapper_policy' "$upgrade_to_quattro" >/dev/null
grep -F '/usr/share/omarchy/install/config/snapper.sh' "$upgrade_to_quattro" >/dev/null
grep -F 'bash -euo pipefail "$snapper_config_script"' "$upgrade_to_quattro" >/dev/null
pass "Omarchy 4 upgrade normalizes Snapper retention"
grep -F 'OMARCHY_UPGRADE_TO_QUATTRO_LIVE=1' "$upgrade_to_quattro" >/dev/null
grep -F 'systemd-networkd.service' "$upgrade_to_quattro" >/dev/null
grep -F 'systemd-networkd.socket' "$upgrade_to_quattro" >/dev/null
grep -F 'systemd-networkd-resolve-hook.socket' "$upgrade_to_quattro" >/dev/null
pass "Omarchy 4 upgrade retires systemd-networkd for NetworkManager"