Add dev package mode to Omarchy 4 upgrade

This commit is contained in:
Ryan Hughes
2026-06-04 18:38:25 -04:00
parent ddd7e058a2
commit cb3fc79385
+52 -26
View File
@@ -1,15 +1,15 @@
#!/bin/bash #!/bin/bash
# omarchy:summary=Upgrade a legacy Omarchy install to the package-backed Omarchy 4 layout. # omarchy:summary=Upgrade a legacy Omarchy install to the package-backed Omarchy 4 layout.
# omarchy:args=[--yes] [--reboot] [--channel stable|rc|edge] [--user USER] # omarchy:args=[--yes] [--reboot] [--dev] [--channel stable|rc|edge] [--user USER]
# omarchy:examples=omarchy upgrade to 4 # omarchy:examples=omarchy upgrade to 4 | omarchy upgrade to 4 --dev
# omarchy:requires-sudo=true # omarchy:requires-sudo=true
set -euo pipefail set -euo pipefail
usage() { usage() {
cat <<'USAGE' cat <<'USAGE'
Usage: omarchy-upgrade-to-4 [--yes] [--reboot] [--channel stable|rc|edge] [--user USER] Usage: omarchy-upgrade-to-4 [--yes] [--reboot] [--dev] [--channel stable|rc|edge] [--user USER]
Upgrade any pre-4 Omarchy install to the package-backed Omarchy 4 layout. 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 This script is intentionally self-contained so it can be shipped as a command
@@ -18,6 +18,7 @@ in Omarchy 3.8.x or run directly with curl | bash on older systems.
Options: Options:
-y, --yes Do not prompt before upgrading -y, --yes Do not prompt before upgrading
--reboot Reboot automatically after a successful upgrade --reboot Reboot automatically after a successful upgrade
--dev Use stop-gap packages from the [omarchy-dev] repo
--channel stable|rc|edge Override detected Omarchy package channel --channel stable|rc|edge Override detected Omarchy package channel
--user USER User account to refresh after package install --user USER User account to refresh after package install
-h, --help Show this help -h, --help Show this help
@@ -54,6 +55,7 @@ channel_override="${OMARCHY_UPGRADE_CHANNEL:-${OMARCHY_CHANNEL:-${OMARCHY_MIRROR
target_user="${OMARCHY_INSTALL_USER:-}" target_user="${OMARCHY_INSTALL_USER:-}"
yes=0 yes=0
auto_reboot=0 auto_reboot=0
use_dev_packages=${OMARCHY_UPGRADE_DEV:-0}
while (($#)); do while (($#)); do
case "$1" in case "$1" in
@@ -65,6 +67,10 @@ while (($#)); do
auto_reboot=1 auto_reboot=1
shift shift
;; ;;
--dev)
use_dev_packages=1
shift
;;
--channel) --channel)
channel_override="${2:-}" channel_override="${2:-}"
shift 2 shift 2
@@ -83,6 +89,12 @@ while (($#)); do
esac esac
done done
case "$use_dev_packages" in
1|true|yes|on) use_dev_packages=1 ;;
0|false|no|off|"") use_dev_packages=0 ;;
*) fail "Invalid OMARCHY_UPGRADE_DEV value '$use_dev_packages'. Use 1/0, true/false, or pass --dev." ;;
esac
if ! command -v pacman >/dev/null 2>&1; then if ! command -v pacman >/dev/null 2>&1; then
fail "This upgrade is only supported on Arch/Omarchy systems with pacman." fail "This upgrade is only supported on Arch/Omarchy systems with pacman."
fi fi
@@ -313,9 +325,12 @@ case "$channel" in
esac esac
if (( ! yes )); then if (( ! yes )); then
package_mode="production Omarchy packages"
(( use_dev_packages )) && package_mode="stop-gap packages from [omarchy-dev]"
cat <<EOF cat <<EOF
This will upgrade Omarchy for user '$target_user' to Omarchy 4 using the '$channel' channel. This will upgrade Omarchy for user '$target_user' to Omarchy 4 using the '$channel' channel and $package_mode.
It will install the package-backed Omarchy 4 stack, overwrite files previously It will install the package-backed Omarchy 4 stack, overwrite files previously
written by the legacy installer, remove retired default packages, and apply the written by the legacy installer, remove retired default packages, and apply the
@@ -372,27 +387,28 @@ configure_pacman_channel() {
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-4.$backup_suffix.bak"
# TEMPORARY: also inject [omarchy-dev] above [omarchy] so dev-built # Drop any stale [omarchy-dev] block every time. Re-add it only for the
# packages from share.heyoodle.com (see omarchy-pkgs/bin/publish-dev-repo) # stop-gap dev package mode so normal upgrades resolve the real tagged
# take precedence while the omarchy-4 stack is being iterated on. Revert # packages from [omarchy] once they exist.
# this block once the production edge/stable/rc channels have caught up.
local dev_server='https://share.heyoodle.com/omarchy/dev/$arch' local dev_server='https://share.heyoodle.com/omarchy/dev/$arch'
local tmp
tmp=$(mktemp) tmp=$(mktemp)
awk -v server="$package_server" -v dev_server="$dev_server" ' awk -v server="$package_server" -v dev_server="$dev_server" -v use_dev="$use_dev_packages" '
BEGIN { in_omarchy = 0; in_dev = 0; wrote = 0 } BEGIN { in_omarchy = 0; in_dev = 0; wrote = 0; use_dev += 0 }
/^\[omarchy-dev\]$/ { /^\[omarchy-dev\]$/ {
# Drop any existing [omarchy-dev] block; we re-emit it next to [omarchy].
in_dev = 1 in_dev = 1
in_omarchy = 0 in_omarchy = 0
next next
} }
/^\[omarchy\]$/ { /^\[omarchy\]$/ {
if (!wrote) { if (!wrote) {
print "[omarchy-dev]" if (use_dev) {
print "SigLevel = Never" print "[omarchy-dev]"
print "Server = " dev_server print "SigLevel = Never"
print "" print "Server = " dev_server
print ""
}
print "[omarchy]" print "[omarchy]"
print "SigLevel = Optional TrustAll" print "SigLevel = Optional TrustAll"
print "Server = " server print "Server = " server
@@ -407,10 +423,12 @@ configure_pacman_channel() {
END { END {
if (!wrote) { if (!wrote) {
print "" print ""
print "[omarchy-dev]" if (use_dev) {
print "SigLevel = Never" print "[omarchy-dev]"
print "Server = " dev_server print "SigLevel = Never"
print "" print "Server = " dev_server
print ""
}
print "[omarchy]" print "[omarchy]"
print "SigLevel = Optional TrustAll" print "SigLevel = Optional TrustAll"
print "Server = " server print "Server = " server
@@ -535,16 +553,23 @@ migrate_1password_beta_package() {
} }
install_omarchy_4_packages() { install_omarchy_4_packages() {
# omarchy-limine and omarchy-dev-tools are no longer separate packages: # Until Omarchy 4 is tagged and published for real, --dev installs the
# omarchy-limine's content (bootloader + snapper configs) folded into # stop-gap package names from [omarchy-dev]. They provide/conflict the real
# omarchy-settings, and bin/omarchy-dev-* now ships with omarchy itself. # names so testers can later move to omarchy/omarchy-settings cleanly.
# The bootloader stack (limine, snapper, etc.) is hard-depended by local omarchy_package=omarchy
# the omarchy package, so it'll be pulled in automatically. local settings_package=omarchy-settings
if (( use_dev_packages )); then
omarchy_package=omarchy-dev
settings_package=omarchy-settings-dev
fi
# The bootloader stack (limine, snapper, etc.) is hard-depended by the
# Omarchy package, so it'll be pulled in automatically.
local core_packages=( local core_packages=(
omarchy-keyring omarchy-keyring
omarchy-settings "$settings_package"
omarchy-nvim omarchy-nvim
omarchy "$omarchy_package"
# checkupdates support for update tooling # checkupdates support for update tooling
fakeroot fakeroot
pacman-contrib pacman-contrib
@@ -552,6 +577,7 @@ install_omarchy_4_packages() {
local base_packages=() local base_packages=()
log "Installing Omarchy 4 packages" log "Installing Omarchy 4 packages"
(( use_dev_packages )) && log "Using stop-gap packages from [omarchy-dev]"
# --noconfirm answers "no" to conflict-removal prompts. --ask 4 preselects # --noconfirm answers "no" to conflict-removal prompts. --ask 4 preselects
# removing the conflicting package, which is required for legacy packages like # removing the conflicting package, which is required for legacy packages like
# ttf-jetbrains-mono-nerd -> ttf-jetbrains-mono-nerd-basic. # ttf-jetbrains-mono-nerd -> ttf-jetbrains-mono-nerd-basic.