Rebuild boot images the Plymouth migration left stale

1784917531 gated its UKI rebuild on initramfs_async=0 being present in
the Limine config, but omarchy-settings ships omarchy-defaults.conf with
that parameter already in it. Any machine that installed the package and
ran the migration in the same update matched the config the package had
just written, skipped the rebuild, and kept booting an image baked
before the config existed — without initramfs_async=0, so encrypted
boots still fell back to an unthemed text LUKS prompt. Compare the
booted command line against the configured one and rebuild when they
disagree.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
David Heinemeier Hansson
2026-08-11 23:35:40 -07:00
co-authored by Claude Opus 5
parent 4727bad5eb
commit 2fa490dc96
2 changed files with 146 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
echo "Rebuild the boot image when it predates the Limine kernel command line"
# 1784917531 gated its rebuild on initramfs_async=0 being present in the Limine
# config, but omarchy-settings ships omarchy-defaults.conf with that parameter
# already in it. On a machine that installed the package and ran the migration
# in the same update, the guard matched the config the package had just
# written, skipped the rebuild, and left a boot image baked before the config
# landed. Such a machine boots without any of omarchy-defaults.conf's command
# line — including initramfs_async=0, so Plymouth still loses the LUKS prompt.
defaults_conf="${OMARCHY_LIMINE_DEFAULTS_CONF:-/etc/limine-entry-tool.d/omarchy-defaults.conf}"
running_cmdline="${OMARCHY_RUNNING_CMDLINE:-/proc/cmdline}"
rebuild_marker="${OMARCHY_LIMINE_REBUILD_MARKER:-/var/lib/omarchy/migrations/1786482992}"
omarchy-cmd-present limine-mkinitcpio || exit 0
[[ -f $defaults_conf && -r $running_cmdline ]] || exit 0
# The running kernel keeps its old command line until reboot, so a marker
# records the machine-wide rebuild instead: another user's migration must not
# repeat it before then, while a missing marker still retries an interrupted
# rebuild.
[[ ! -e $rebuild_marker ]] || exit 0
booted=$(<"$running_cmdline")
missing=()
for param in $(sed -n 's/^KERNEL_CMDLINE\[default\]+="\(.*\)"[[:space:]]*$/\1/p' "$defaults_conf"); do
[[ " $booted " == *" $param "* ]] || missing+=("$param")
done
(( ${#missing[@]} )) || exit 0
echo "The booted kernel is missing ${missing[*]}; rebuilding the boot image"
sudo limine-mkinitcpio
sudo install -Dm644 /dev/null "$rebuild_marker"