Merge pull request #11845 from omacom/fix/linux-omarchy-default-kernel

Migrate to linux-omarchy except on T2 Macs
This commit is contained in:
Ryan Hughes authored and GitHub committed 2026-09-14 13:49:49 -07:00
commit 86a2e5830e
12 files changed
+302 -290

No files matched your search

@@ -15,7 +15,8 @@ ENABLE_LIMINE_FALLBACK=yes
# Find and add other bootloaders # Find and add other bootloaders
FIND_BOOTLOADERS=yes FIND_BOOTLOADERS=yes
BOOT_ORDER="linux-omarchy-*, *, *fallback, Snapshots" # Keep T2 Macs on their specialized kernel; prefer linux-omarchy elsewhere.
BOOT_ORDER="linux-t2, linux-omarchy, linux-omarchy-*, *, *fallback, Snapshots"
# Snapper is configured with NUMBER_LIMIT="5" (see default/snapper/root), but # Snapper is configured with NUMBER_LIMIT="5" (see default/snapper/root), but
# limine-snapper-sync can see the newly created sixth snapshot before cleanup # limine-snapper-sync can see the newly created sixth snapshot before cleanup
+1 -8
View File
@@ -14,21 +14,14 @@ run_logged "$OMARCHY_INSTALL/hardware/vulkan.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/video-acceleration.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/video-acceleration.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/lpmd.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/lpmd.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/thermald.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/thermald.sh"
# Swap in the Panther Lake kernel before anything pulls DKMS modules in.
# intel-ipu7-camera drags in ipu7-drivers, vision-drivers and v4l2loopback,
# and building all three against the stock kernel only to rebuild them against
# the PTL kernel and tear the first set down again cost ~25s of the install.
run_logged "$OMARCHY_INSTALL/hardware/intel/ptl-kernel.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/ipu7-camera.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/ipu7-camera.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/fred.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/fred.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/fix-wifi7-eht.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/fix-wifi7-eht.sh"
run_logged "$OMARCHY_INSTALL/hardware/intel/sof-firmware.sh" run_logged "$OMARCHY_INSTALL/hardware/intel/sof-firmware.sh"
# Pulls in v4l2loopback-dkms, so it sits after the Panther Lake kernel swap.
run_logged "$OMARCHY_INSTALL/hardware/fix-elgato-camlink-4k.sh" run_logged "$OMARCHY_INSTALL/hardware/fix-elgato-camlink-4k.sh"
# Rebuilds the boot image, so it has to follow the Panther Lake kernel swap # Rebuilds the boot image, so it follows camera module setup.
# above rather than sit with the other Dell leaf at the top of this file.
run_logged "$OMARCHY_INSTALL/hardware/dell-xps13-sidecar-amps.sh" run_logged "$OMARCHY_INSTALL/hardware/dell-xps13-sidecar-amps.sh"
run_logged "$OMARCHY_INSTALL/hardware/asus/fix-asus-ptl-display-backlight.sh" run_logged "$OMARCHY_INSTALL/hardware/asus/fix-asus-ptl-display-backlight.sh"
+1 -1
View File
@@ -4,7 +4,7 @@
# v4l2-relayd re-exposes it at 1280x720 under the same name. # v4l2-relayd re-exposes it at 1280x720 under the same name.
if omarchy-hw-elgato-camlink-4k; then if omarchy-hw-elgato-camlink-4k; then
mapfile -t kernel_headers < <(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy-bore|-omarchy-ptl-novrr-mm)?$' | sed 's/$/-headers/') mapfile -t kernel_headers < <(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy(-bore|-ptl-novrr-mm)?)?$' | sed 's/$/-headers/')
omarchy-pkg-add "${kernel_headers[@]}" v4l2loopback-dkms v4l2loopback-utils v4l2-relayd omarchy-pkg-add "${kernel_headers[@]}" v4l2loopback-dkms v4l2loopback-utils v4l2-relayd
sudo install -Dm644 "$OMARCHY_PATH/default/udev/elgato-camlink-4k.rules" /etc/udev/rules.d/71-elgato-camlink-4k.rules sudo install -Dm644 "$OMARCHY_PATH/default/udev/elgato-camlink-4k.rules" /etc/udev/rules.d/71-elgato-camlink-4k.rules
-26
View File
@@ -1,26 +0,0 @@
# Install Panther Lake kernel for Dell XPS Panther Lake systems
# The Omarchy PTL kernel includes Panther Lake display and memory fixes.
if omarchy-hw-match "XPS" && omarchy-hw-intel-ptl; then
echo "Detected Dell XPS Panther Lake, installing PTL kernel..."
# linux-ptl required SOF firmware; the new kernel only lists it as optional.
omarchy-pkg-add linux-omarchy-ptl-novrr-mm linux-omarchy-ptl-novrr-mm-headers sof-firmware
pacman -Rdd --noconfirm linux linux-headers || true
# The PTL kernel doesn't provide=linux, so anything depending on linux drags the
# stock kernel back in and the boot menu grows a second, slower entry.
if pacman -Qq linux &>/dev/null; then
echo "WARNING: stock linux kernel still installed alongside the Omarchy PTL kernel:"
pacman -Qi linux | grep -i "required by"
fi
mkdir -p /etc/limine-entry-tool.d
# Named to sort after omarchy-defaults.conf: drop-ins are read in order and
# the last BOOT_ORDER wins, so an earlier-sorting name is a silent no-op.
rm -f /etc/limine-entry-tool.d/dell-xps-panther-lake.conf
cat > /etc/limine-entry-tool.d/zz-dell-xps-panther-lake.conf <<'EOF'
# Prefer Omarchy kernels while keeping other kernels available for recovery
BOOT_ORDER="linux-omarchy-*, *, *fallback, Snapshots"
EOF
fi
+1 -1
View File
@@ -1,6 +1,6 @@
if lspci | grep -qi 'nvidia'; then if lspci | grep -qi 'nvidia'; then
# Check which kernel is installed and set appropriate headers package # Check which kernel is installed and set appropriate headers package
KERNEL_PACKAGE=$(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy-ptl-novrr-mm)?$' | head -1 || true) KERNEL_PACKAGE=$(pacman -Qqs '^linux(-zen|-lts|-hardened|-t2|-ptl|-omarchy(-bore|-ptl-novrr-mm)?)?$' | head -1 || true)
[[ -n $KERNEL_PACKAGE ]] && omarchy-pkg-add "$KERNEL_PACKAGE-headers" [[ -n $KERNEL_PACKAGE ]] && omarchy-pkg-add "$KERNEL_PACKAGE-headers"
if omarchy-hw-nvidia-gsp; then if omarchy-hw-nvidia-gsp; then
+2 -2
View File
@@ -23,8 +23,8 @@ limine-snapper-sync
linux linux
linux-firmware linux-firmware
linux-headers linux-headers
linux-omarchy-ptl-novrr-mm linux-omarchy
linux-omarchy-ptl-novrr-mm-headers linux-omarchy-headers
macbook12-spi-driver-dkms macbook12-spi-driver-dkms
nvidia-580xx-dkms nvidia-580xx-dkms
nvidia-dkms nvidia-dkms
-45
View File
@@ -1,45 +0,0 @@
echo "Install the Omarchy Panther Lake kernel and prefer Omarchy kernels in Limine"
omarchy-pkg-present linux-ptl || exit 0
limine_conf="${OMARCHY_PTL_LIMINE_CONF:-/etc/default/limine}"
limine_drop_ins="${OMARCHY_PTL_LIMINE_DROP_INS:-/etc/limine-entry-tool.d}"
rebuild_marker="${OMARCHY_PTL_REBUILD_MARKER:-/var/lib/omarchy/migrations/1789095456}"
kernel="linux-omarchy-ptl-novrr-mm"
# Completion is machine-wide even though migrations run once per user. Leave
# the old kernel installed so it remains available if the new one cannot boot.
[[ ! -e $rebuild_marker ]] || exit 0
omarchy-pkg-add "$kernel" "$kernel-headers"
# /etc/default/limine and the Dell drop-ins were written by the installer.
# omarchy-settings ships omarchy-defaults.conf, but pacman's backup protection
# can leave its update in a .pacnew when other settings were customized. Repair
# only the old boot order in the active files, preserving custom orders and
# unrelated settings, including the root filesystem's kernel command line.
for conf in "$limine_conf" \
"$limine_drop_ins/omarchy-defaults.conf" \
"$limine_drop_ins/dell-xps-panther-lake.conf" \
"$limine_drop_ins/zz-dell-xps-panther-lake.conf"; do
if [[ -f $conf ]]; then
sudo sed -i -E \
's/^([[:space:]]*BOOT_ORDER=)"(\*|linux-ptl\*), \*fallback, Snapshots"([[:space:]]*(#.*)?)$/\1"linux-omarchy-*, *, *fallback, Snapshots"\3/' \
"$conf"
fi
done
# Package hooks ran before the config repair. Rebuild the new kernel's image
# and boot entry explicitly, including on retries after a failed rebuild.
sudo limine-mkinitcpio "$kernel"
# limine-mkinitcpio can return success after skipping a failed kernel build.
# Do not mark the migration complete unless the new kernel is in the menu.
if ! sudo limine-entry-tool --tree | grep -F "$kernel" >/dev/null; then
echo "The new Panther Lake kernel has no Limine boot entry; rerun omarchy-migrate after fixing the boot image build." >&2
exit 1
fi
# Keeping the running kernel installed prevents the updater from detecting a
# kernel replacement, so request the reboot explicitly.
omarchy-state set reboot-required
sudo install -Dm644 /dev/null "$rebuild_marker"
+44
View File
@@ -0,0 +1,44 @@
echo "Install the Omarchy kernel and make it the first Limine boot entry"
# linux-omarchy is an x86_64 kernel. T2 Macs must keep their specialized kernel,
# including when other kernels are installed or the running T2 package is gone.
[[ $(uname -m) == "x86_64" ]] || exit 0
running_kernel=$(uname -r)
if omarchy-pkg-present linux-t2 || [[ ${running_kernel,,} == *-t2* ]]; then
exit 0
fi
limine_conf="${OMARCHY_KERNEL_LIMINE_CONF:-/etc/default/limine}"
rebuild_marker="${OMARCHY_KERNEL_REBUILD_MARKER:-/var/lib/omarchy/migrations/1789325478}"
kernel="linux-omarchy"
# Completion is machine-wide even though migrations run once per user. Leave
# the old kernel installed so it remains available if the new one cannot boot.
# The new filename and marker also reach users who completed 1789095456.
[[ ! -e $rebuild_marker ]] || exit 0
omarchy-pkg-add "$kernel" "$kernel-headers"
# /etc/default/limine has priority over every drop-in, including old Dell
# settings and customized package files whose updates landed in a .pacnew.
# Set the exact kernel first: linux-omarchy-* only matches its older variants.
# Preserve unrelated settings, especially the root filesystem's kernel cmdline.
sudo mkdir -p "$(dirname "$limine_conf")"
sudo touch "$limine_conf"
sudo sed -i -E '/^[[:space:]]*BOOT_ORDER[[:space:]]*=/d' "$limine_conf"
printf '\n%s\n' 'BOOT_ORDER="linux-omarchy, linux-omarchy-*, *, *fallback, Snapshots"' | sudo tee -a "$limine_conf" >/dev/null
# Package hooks ran before the config repair. Rebuild the new kernel's image
# and boot entry explicitly, including on retries after a failed rebuild.
sudo limine-mkinitcpio "$kernel"
# limine-mkinitcpio can return success after skipping a failed kernel build.
# Do not mark the migration complete unless the new kernel is in the menu.
if ! sudo limine-entry-tool --tree | grep -E "(^|[^[:alnum:]_-])$kernel([^[:alnum:]_-]|$)" >/dev/null; then
echo "The Omarchy kernel has no Limine boot entry; rerun omarchy-migrate after fixing the boot image build." >&2
exit 1
fi
# Keeping the running kernel installed prevents the updater from detecting a
# kernel replacement, so request the reboot explicitly.
omarchy-state set reboot-required
sudo install -Dm644 /dev/null "$rebuild_marker"
+3 -3
View File
@@ -10,6 +10,6 @@ grep -Fq 'KERNEL_CMDLINE[default]+=" initramfs_async=0"' "$packaged_defaults" ||
fail "the packaged Limine defaults still unpack the initramfs synchronously" fail "the packaged Limine defaults still unpack the initramfs synchronously"
pass "packaged Limine defaults keep Plymouth alive at the LUKS prompt" pass "packaged Limine defaults keep Plymouth alive at the LUKS prompt"
grep -Fxq 'BOOT_ORDER="linux-omarchy-*, *, *fallback, Snapshots"' "$packaged_defaults" || grep -Fxq 'BOOT_ORDER="linux-t2, linux-omarchy, linux-omarchy-*, *, *fallback, Snapshots"' "$packaged_defaults" ||
fail "packaged Limine defaults prefer Omarchy kernels and retain recovery entries" fail "packaged Limine defaults protect T2 Macs and prefer the exact Omarchy kernel elsewhere"
pass "packaged Limine defaults prefer Omarchy kernels and retain recovery entries" pass "packaged Limine defaults protect T2 Macs and prefer the exact Omarchy kernel elsewhere"
@@ -0,0 +1,248 @@
#!/bin/bash
set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
migration="$ROOT/migrations/1789325478.sh"
scratch=$(mktemp -d)
trap 'rm -rf "$scratch"' EXIT
mkdir -p "$scratch/bin" "$scratch/drop-ins"
export PATH="$scratch/bin:$ROOT/bin:$PATH"
export CALL_LOG="$scratch/calls"
export INSTALLED_PACKAGES="$scratch/packages"
export OMARCHY_KERNEL_LIMINE_CONF="$scratch/limine"
export OMARCHY_KERNEL_LIMINE_DROP_INS="$scratch/drop-ins"
export OMARCHY_KERNEL_REBUILD_MARKER="$scratch/state/1789325478"
kernel="linux-omarchy"
boot_order='BOOT_ORDER="linux-omarchy, linux-omarchy-*, *, *fallback, Snapshots"'
# Exercise the real package helpers, including their post-install queries.
cat > "$scratch/bin/pacman" <<'SH'
#!/bin/bash
case "$1" in
-Q) grep -Fxq "$2" "$INSTALLED_PACKAGES" ;;
-S)
printf 'pacman %s\n' "$*" >> "$CALL_LOG"
[[ ${INSTALL_FAIL:-0} == "0" ]] || exit 1
for arg in "$@"; do
[[ $arg == -* ]] || printf '%s\n' "$arg" >> "$INSTALLED_PACKAGES"
done
;;
*) exit 99 ;;
esac
SH
cat > "$scratch/bin/sudo" <<'SH'
#!/bin/bash
printf 'sudo %s\n' "$*" >> "$CALL_LOG"
case "$1" in
pacman | mkdir | touch | sed | tee | install | limine-mkinitcpio | limine-entry-tool) exec "$@" ;;
*) exit 99 ;;
esac
SH
cat > "$scratch/bin/limine-mkinitcpio" <<'SH'
#!/bin/bash
[[ ${REBUILD_FAIL:-0} == "0" ]]
SH
cat > "$scratch/bin/limine-entry-tool" <<'SH'
#!/bin/bash
[[ $* == "--tree" ]] || exit 99
printf '%s\n' 'Omarchy' ' linux-ptl' ' linux-omarchy-ptl-novrr-mm' ' linux-omarchy-bore' ' linux-omarchy-fallback' ' Snapshots'
if [[ ${MISSING_ENTRY:-0} == "0" ]]; then
printf '%s\n' ' linux-omarchy'
fi
SH
cat > "$scratch/bin/omarchy-state" <<'SH'
#!/bin/bash
[[ $* == "set reboot-required" ]] || exit 99
printf 'state %s\n' "$*" >> "$CALL_LOG"
SH
cat > "$scratch/bin/uname" <<'SH'
#!/bin/bash
case "$1" in
-m) printf '%s\n' "${TEST_ARCH:-x86_64}" ;;
-r) printf '%s\n' "${TEST_KERNEL_RELEASE:-7.2.5-arch1-1}" ;;
*) exit 99 ;;
esac
SH
cat > "$scratch/bin/omarchy-notification-dismiss" <<'SH'
#!/bin/bash
exit 0
SH
chmod +x "$scratch/bin/"*
reset_fixture() {
: > "$CALL_LOG"
printf '%s\n' linux-ptl linux-ptl-headers > "$INSTALLED_PACKAGES"
rm -f "$OMARCHY_KERNEL_REBUILD_MARKER" "$OMARCHY_KERNEL_LIMINE_DROP_INS/"*
cat > "$OMARCHY_KERNEL_LIMINE_CONF" <<'CONF'
KERNEL_CMDLINE[default]="root=UUID=keep-me rw cryptdevice=UUID=keep-me:root"
BOOT_ORDER="*, *fallback, Snapshots"
ENABLE_UKI=yes
CONF
cp "$OMARCHY_KERNEL_LIMINE_CONF" "$scratch/original-limine"
}
run_migration() {
bash -euo pipefail "$migration" > "$scratch/output" 2>&1
}
assert_preferred() {
grep -Fxq "$boot_order" "$1" || fail "Omarchy kernels are preferred in $1"
}
assert_skipped() {
[[ ! -s $CALL_LOG ]] || fail "excluded systems do not change" "$(<"$CALL_LOG")"
cmp -s "$OMARCHY_KERNEL_LIMINE_CONF" "$scratch/original-limine" || fail "excluded systems keep their boot settings"
[[ ! -e $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "excluded systems do not get a completion marker"
}
for old_kernel in linux linux-lts linux-zen linux-ptl linux-omarchy-ptl-novrr-mm; do
reset_fixture
printf '%s\n' "$old_kernel" "$old_kernel-headers" > "$INSTALLED_PACKAGES"
run_migration
grep -Fxq "$kernel" "$INSTALLED_PACKAGES" || fail "the generic kernel is installed"
grep -Fxq "$kernel-headers" "$INSTALLED_PACKAGES" || fail "its headers are installed"
grep -Fxq "$old_kernel" "$INSTALLED_PACKAGES" || fail "the previous kernel remains available"
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
pass "$old_kernel systems receive the generic Omarchy kernel and retain their recovery kernel"
done
for installed in linux-t2 $'linux-t2\nlinux\nlinux-ptl\nlinux-omarchy'; do
reset_fixture
printf '%s\n' "$installed" > "$INSTALLED_PACKAGES"
run_migration
assert_skipped
done
pass "linux-t2 systems are skipped even with other kernels installed"
reset_fixture
TEST_KERNEL_RELEASE=7.2.5-arch1-T2 run_migration
assert_skipped
pass "a running T2 kernel is excluded even if its package is no longer installed"
reset_fixture
TEST_ARCH=aarch64 run_migration
assert_skipped
pass "ARM systems cannot receive an x86_64 kernel"
reset_fixture
printf '%s\n' linux-omarchy-ptl-novrr-mm > "$INSTALLED_PACKAGES"
mkdir -p "$scratch/state" "$scratch/user-markers" "$scratch/omarchy/migrations"
export OMARCHY_PTL_REBUILD_MARKER="$scratch/state/1789095456"
export OMARCHY_MIGRATION_STATE="$scratch/user-markers"
touch "$OMARCHY_PTL_REBUILD_MARKER" "$OMARCHY_MIGRATION_STATE/1789095456.sh"
cp "$migration" "$scratch/omarchy/migrations/"
[[ ! -e $ROOT/migrations/1789095456.sh ]] || fail "the superseded migration must not install the PTL variant first"
pending=$(OMARCHY_PATH="$scratch/omarchy" "$ROOT/bin/omarchy-migrate" --pending)
[[ $pending == "1789325478.sh" ]] || fail "the renamed migration is pending after completing the old migration"
OMARCHY_PATH="$scratch/omarchy" "$ROOT/bin/omarchy-migrate" > "$scratch/output" 2>&1
grep -Fxq "$kernel" "$INSTALLED_PACKAGES" || fail "the old completion markers cannot skip the generic kernel"
[[ -f $OMARCHY_KERNEL_REBUILD_MARKER && -f $OMARCHY_MIGRATION_STATE/1789325478.sh ]] || fail "new machine and user completion markers are recorded"
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
pass "users who completed the PTL migration run the renamed migration with fresh completion markers"
reset_fixture
for name in dell-xps-panther-lake zz-dell-xps-panther-lake; do
printf '%s\n' 'BOOT_ORDER="linux-ptl*, *fallback, Snapshots"' > "$OMARCHY_KERNEL_LIMINE_DROP_INS/$name.conf"
done
cp "$OMARCHY_KERNEL_LIMINE_CONF" "$OMARCHY_KERNEL_LIMINE_DROP_INS/omarchy-defaults.conf"
run_migration
grep -Fxq "pacman -S --noconfirm --needed $kernel $kernel-headers" "$CALL_LOG" || fail "both new packages are installed"
grep -Fxq linux-ptl "$INSTALLED_PACKAGES" || fail "the old kernel is kept for recovery"
grep -Fxq linux-ptl-headers "$INSTALLED_PACKAGES" || fail "the old kernel headers are kept"
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
diff -u <(sed '/^BOOT_ORDER=/d; /^$/d' "$scratch/original-limine") \
<(sed '/^BOOT_ORDER=/d; /^$/d' "$OMARCHY_KERNEL_LIMINE_CONF") || fail "kernel command line and unrelated settings are preserved"
grep -Fxq "sudo limine-mkinitcpio $kernel" "$CALL_LOG" || fail "the new kernel's boot image is rebuilt"
[[ -f $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "successful completion is recorded"
grep -Fxq 'state set reboot-required' "$CALL_LOG" || fail "the updater must offer a reboot when retaining the old kernel"
pass "new packages install, the central boot order is set, and the old kernel remains available"
: > "$CALL_LOG"
run_migration
[[ ! -s $CALL_LOG ]] || fail "another user's run does not repeat the machine-wide migration"
pass "repeat runs are a no-op after successful completion"
reset_fixture
printf '%s\n' "$kernel" >> "$INSTALLED_PACKAGES"
run_migration
grep -Fxq "$kernel-headers" "$INSTALLED_PACKAGES" || fail "missing headers install when the kernel is already present"
pass "a partially installed kernel gets its missing headers"
reset_fixture
printf '%s\n' "$kernel" "$kernel-headers" >> "$INSTALLED_PACKAGES"
run_migration
! grep -q '^pacman -S' "$CALL_LOG" || fail "already installed packages are not reinstalled"
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
pass "existing new packages still receive the config repair and boot rebuild"
reset_fixture
if INSTALL_FAIL=1 run_migration; then
fail "package installation failure must fail the migration"
fi
cmp -s "$OMARCHY_KERNEL_LIMINE_CONF" "$scratch/original-limine" || fail "install failure leaves the config untouched"
! grep -q 'limine-mkinitcpio' "$CALL_LOG" || fail "install failure does not rebuild"
[[ ! -e $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "install failure stays pending"
pass "package failures leave the old boot setup intact and the migration pending"
reset_fixture
if REBUILD_FAIL=1 run_migration; then
fail "boot rebuild failure must fail the migration"
fi
[[ ! -e $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "rebuild failure stays pending"
! grep -q '^state ' "$CALL_LOG" || fail "rebuild failure must not request a reboot"
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
: > "$CALL_LOG"
run_migration
grep -Fxq "sudo limine-mkinitcpio $kernel" "$CALL_LOG" || fail "retry must rebuild even after config and packages are repaired"
[[ -f $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "retry records successful completion"
pass "a failed rebuild is retried even after config and package changes succeeded"
reset_fixture
if MISSING_ENTRY=1 run_migration; then
fail "a silently skipped kernel build must fail the migration"
fi
[[ ! -e $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "a missing boot entry stays pending"
! grep -q '^state ' "$CALL_LOG" || fail "a missing boot entry must not request a reboot"
run_migration
[[ -f $OMARCHY_KERNEL_REBUILD_MARKER ]] || fail "a missing boot entry can be repaired on retry"
pass "older Omarchy variants and fallback entries cannot satisfy generic kernel verification"
reset_fixture
cat >> "$OMARCHY_KERNEL_LIMINE_CONF" <<'CONF'
BOOT_ORDER="linux-omarchy-*, *, *fallback, Snapshots"
BOOT_ORDER = 'linux-lts, *, *fallback, Snapshots'
CONF
run_migration
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
[[ $(grep -c '^BOOT_ORDER=' "$OMARCHY_KERNEL_LIMINE_CONF") == "1" ]] || fail "only one boot order is written"
! grep -Eq '^[[:space:]]+BOOT_ORDER' "$OMARCHY_KERNEL_LIMINE_CONF" || fail "a later custom assignment cannot override first position"
pass "the exact generic kernel takes first position over previous PTL and custom orders"
reset_fixture
for name in omarchy-defaults dell-xps-panther-lake zz-dell-xps-panther-lake; do
printf '%s\n' 'BOOT_ORDER="linux-ptl*, *fallback, Snapshots"' > "$OMARCHY_KERNEL_LIMINE_DROP_INS/$name.conf"
done
printf '%s\n' 'ENABLE_SORT=yes' >> "$OMARCHY_KERNEL_LIMINE_DROP_INS/omarchy-defaults.conf"
cp "$ROOT/etc/limine-entry-tool.d/omarchy-defaults.conf" "$OMARCHY_KERNEL_LIMINE_DROP_INS/omarchy-defaults.conf.pacnew"
run_migration
effective_order=$(bash -c 'declare -A KERNEL_CMDLINE; for conf in "$1/"*.conf "$2"; do source "$conf"; done; printf "%s" "$BOOT_ORDER"' -- "$OMARCHY_KERNEL_LIMINE_DROP_INS" "$OMARCHY_KERNEL_LIMINE_CONF")
[[ $effective_order == "linux-omarchy, linux-omarchy-*, *, *fallback, Snapshots" ]] || fail "the central config wins over old and customized drop-ins"
grep -Fxq 'ENABLE_SORT=yes' "$OMARCHY_KERNEL_LIMINE_DROP_INS/omarchy-defaults.conf" || fail "custom packaged settings survive"
cmp -s "$ROOT/etc/limine-entry-tool.d/omarchy-defaults.conf" \
"$OMARCHY_KERNEL_LIMINE_DROP_INS/omarchy-defaults.conf.pacnew" || fail "the pacnew is left for the administrator to merge"
pass "the central boot order overrides legacy drop-ins and pacnew files without rewriting them"
reset_fixture
rm "$OMARCHY_KERNEL_LIMINE_CONF"
run_migration
assert_preferred "$OMARCHY_KERNEL_LIMINE_CONF"
pass "a missing central config is created with the exact kernel first"
-195
View File
@@ -1,195 +0,0 @@
#!/bin/bash
set -euo pipefail
source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh"
migration="$ROOT/migrations/1789095456.sh"
scratch=$(mktemp -d)
trap 'rm -rf "$scratch"' EXIT
mkdir -p "$scratch/bin" "$scratch/drop-ins"
export PATH="$scratch/bin:$ROOT/bin:$PATH"
export CALL_LOG="$scratch/calls"
export INSTALLED_PACKAGES="$scratch/packages"
export OMARCHY_PTL_LIMINE_CONF="$scratch/limine"
export OMARCHY_PTL_LIMINE_DROP_INS="$scratch/drop-ins"
export OMARCHY_PTL_REBUILD_MARKER="$scratch/state/completed"
kernel="linux-omarchy-ptl-novrr-mm"
boot_order='BOOT_ORDER="linux-omarchy-*, *, *fallback, Snapshots"'
# Exercise the real package helpers, including their post-install queries.
cat > "$scratch/bin/pacman" <<'SH'
#!/bin/bash
case "$1" in
-Q) grep -Fxq "$2" "$INSTALLED_PACKAGES" ;;
-S)
printf 'pacman %s\n' "$*" >> "$CALL_LOG"
[[ ${INSTALL_FAIL:-0} == "0" ]] || exit 1
for arg in "$@"; do
[[ $arg == -* ]] || printf '%s\n' "$arg" >> "$INSTALLED_PACKAGES"
done
;;
*) exit 99 ;;
esac
SH
cat > "$scratch/bin/sudo" <<'SH'
#!/bin/bash
printf 'sudo %s\n' "$*" >> "$CALL_LOG"
case "$1" in
pacman | sed | install | limine-mkinitcpio | limine-entry-tool) exec "$@" ;;
*) exit 99 ;;
esac
SH
cat > "$scratch/bin/limine-mkinitcpio" <<'SH'
#!/bin/bash
[[ ${REBUILD_FAIL:-0} == "0" ]]
SH
cat > "$scratch/bin/limine-entry-tool" <<'SH'
#!/bin/bash
[[ $* == "--tree" ]] || exit 99
printf '%s\n' 'Omarchy' ' linux-ptl' ' Snapshots'
if [[ ${MISSING_ENTRY:-0} == "0" ]]; then
printf '%s\n' ' linux-omarchy-ptl-novrr-mm'
fi
SH
cat > "$scratch/bin/omarchy-state" <<'SH'
#!/bin/bash
[[ $* == "set reboot-required" ]] || exit 99
printf 'state %s\n' "$*" >> "$CALL_LOG"
SH
chmod +x "$scratch/bin/"*
reset_fixture() {
: > "$CALL_LOG"
printf '%s\n' linux-ptl linux-ptl-headers > "$INSTALLED_PACKAGES"
rm -f "$OMARCHY_PTL_REBUILD_MARKER" "$OMARCHY_PTL_LIMINE_DROP_INS/"*.conf
cat > "$OMARCHY_PTL_LIMINE_CONF" <<'CONF'
KERNEL_CMDLINE[default]="root=UUID=keep-me rw cryptdevice=UUID=keep-me:root"
BOOT_ORDER="*, *fallback, Snapshots"
ENABLE_UKI=yes
CONF
cp "$OMARCHY_PTL_LIMINE_CONF" "$scratch/original-limine"
}
run_migration() {
bash -euo pipefail "$migration" > "$scratch/output" 2>&1
}
assert_preferred() {
grep -Fxq "$boot_order" "$1" || fail "Omarchy kernels are preferred in $1"
}
reset_fixture
printf '%s\n' linux > "$INSTALLED_PACKAGES"
run_migration
[[ ! -s $CALL_LOG ]] || fail "systems without linux-ptl do not change"
cmp -s "$OMARCHY_PTL_LIMINE_CONF" "$scratch/original-limine" || fail "unaffected Limine settings stay unchanged"
[[ ! -e $OMARCHY_PTL_REBUILD_MARKER ]] || fail "unaffected systems do not get a completion marker"
pass "systems without linux-ptl are skipped"
reset_fixture
for name in dell-xps-panther-lake zz-dell-xps-panther-lake; do
printf '%s\n' 'BOOT_ORDER="linux-ptl*, *fallback, Snapshots"' > "$OMARCHY_PTL_LIMINE_DROP_INS/$name.conf"
done
cp "$OMARCHY_PTL_LIMINE_CONF" "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
run_migration
grep -Fxq "pacman -S --noconfirm --needed $kernel $kernel-headers" "$CALL_LOG" || fail "both new packages are installed"
grep -Fxq linux-ptl "$INSTALLED_PACKAGES" || fail "the old kernel is kept for recovery"
grep -Fxq linux-ptl-headers "$INSTALLED_PACKAGES" || fail "the old kernel headers are kept"
assert_preferred "$OMARCHY_PTL_LIMINE_CONF"
for conf in "$OMARCHY_PTL_LIMINE_DROP_INS/"*.conf; do
assert_preferred "$conf"
done
diff -u <(sed '/^BOOT_ORDER=/d' "$scratch/original-limine") \
<(sed '/^BOOT_ORDER=/d' "$OMARCHY_PTL_LIMINE_CONF") || fail "kernel command line and unrelated settings are preserved"
grep -Fxq "sudo limine-mkinitcpio $kernel" "$CALL_LOG" || fail "the new kernel's boot image is rebuilt"
[[ -f $OMARCHY_PTL_REBUILD_MARKER ]] || fail "successful completion is recorded"
grep -Fxq 'state set reboot-required' "$CALL_LOG" || fail "the updater must offer a reboot when retaining the old kernel"
pass "new packages install, all stock boot orders are repaired, and the old kernel remains available"
: > "$CALL_LOG"
run_migration
[[ ! -s $CALL_LOG ]] || fail "another user's run does not repeat the machine-wide migration"
pass "repeat runs are a no-op after successful completion"
reset_fixture
printf '%s\n' "$kernel" >> "$INSTALLED_PACKAGES"
run_migration
grep -Fxq "$kernel-headers" "$INSTALLED_PACKAGES" || fail "missing headers install when the kernel is already present"
pass "a partially installed kernel gets its missing headers"
reset_fixture
printf '%s\n' "$kernel" "$kernel-headers" >> "$INSTALLED_PACKAGES"
run_migration
! grep -q '^pacman -S' "$CALL_LOG" || fail "already installed packages are not reinstalled"
assert_preferred "$OMARCHY_PTL_LIMINE_CONF"
pass "existing new packages still receive the config repair and boot rebuild"
reset_fixture
if INSTALL_FAIL=1 run_migration; then
fail "package installation failure must fail the migration"
fi
cmp -s "$OMARCHY_PTL_LIMINE_CONF" "$scratch/original-limine" || fail "install failure leaves the config untouched"
! grep -q 'limine-mkinitcpio' "$CALL_LOG" || fail "install failure does not rebuild"
[[ ! -e $OMARCHY_PTL_REBUILD_MARKER ]] || fail "install failure stays pending"
pass "package failures leave the old boot setup intact and the migration pending"
reset_fixture
if REBUILD_FAIL=1 run_migration; then
fail "boot rebuild failure must fail the migration"
fi
[[ ! -e $OMARCHY_PTL_REBUILD_MARKER ]] || fail "rebuild failure stays pending"
! grep -q '^state ' "$CALL_LOG" || fail "rebuild failure must not request a reboot"
assert_preferred "$OMARCHY_PTL_LIMINE_CONF"
: > "$CALL_LOG"
run_migration
grep -Fxq "sudo limine-mkinitcpio $kernel" "$CALL_LOG" || fail "retry must rebuild even after config and packages are repaired"
[[ -f $OMARCHY_PTL_REBUILD_MARKER ]] || fail "retry records successful completion"
pass "a failed rebuild is retried even after config and package changes succeeded"
reset_fixture
if MISSING_ENTRY=1 run_migration; then
fail "a silently skipped kernel build must fail the migration"
fi
[[ ! -e $OMARCHY_PTL_REBUILD_MARKER ]] || fail "a missing boot entry stays pending"
! grep -q '^state ' "$CALL_LOG" || fail "a missing boot entry must not request a reboot"
run_migration
[[ -f $OMARCHY_PTL_REBUILD_MARKER ]] || fail "a missing boot entry can be repaired on retry"
pass "a successful command without a new boot entry cannot complete the migration"
reset_fixture
printf '%s\n' 'BOOT_ORDER="linux-lts, *, *fallback, Snapshots"' > "$OMARCHY_PTL_LIMINE_CONF"
cp "$OMARCHY_PTL_LIMINE_CONF" "$scratch/custom-limine"
run_migration
cmp -s "$OMARCHY_PTL_LIMINE_CONF" "$scratch/custom-limine" || fail "custom boot orders stay unchanged"
pass "administrator-defined boot orders are preserved"
reset_fixture
cp "$OMARCHY_PTL_LIMINE_CONF" "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
printf '%s\n' 'ENABLE_SORT=yes' >> "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
cp "$ROOT/etc/limine-entry-tool.d/omarchy-defaults.conf" "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf.pacnew"
run_migration
assert_preferred "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
grep -Fxq 'ENABLE_SORT=yes' "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf" || fail "custom packaged settings survive the repair"
cmp -s "$ROOT/etc/limine-entry-tool.d/omarchy-defaults.conf" \
"$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf.pacnew" || fail "the pending pacnew is left for the administrator to merge"
pass "active packaged defaults are repaired when customized settings leave the update in a pacnew"
reset_fixture
printf '%s\n' ' BOOT_ORDER="*, *fallback, Snapshots" # keep this comment' > "$OMARCHY_PTL_LIMINE_CONF"
run_migration
grep -Fxq " $boot_order # keep this comment" "$OMARCHY_PTL_LIMINE_CONF" || fail "stock orders with comments are repaired"
pass "indentation and comments survive the repair"
reset_fixture
rm "$OMARCHY_PTL_LIMINE_CONF"
cp "$ROOT/etc/limine-entry-tool.d/omarchy-defaults.conf" "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
run_migration
[[ ! -e $OMARCHY_PTL_LIMINE_CONF ]] || fail "missing central config is not fabricated"
assert_preferred "$OMARCHY_PTL_LIMINE_DROP_INS/omarchy-defaults.conf"
pass "installs without a central config inherit the packaged boot order"
-8
View File
@@ -13,14 +13,6 @@ grep -q 'run_logged .*hardware/dell-xps13-sidecar-amps.sh' "$all" ||
fail "the sidecar amplifier workaround runs during hardware setup" fail "the sidecar amplifier workaround runs during hardware setup"
pass "the sidecar amplifier workaround runs during hardware setup" pass "the sidecar amplifier workaround runs during hardware setup"
# The apply step rebuilds the boot image, so it has to see the Panther Lake
# kernel that ptl-kernel.sh swaps in rather than the stock one it replaces.
ptl_line=$(grep -n 'hardware/intel/ptl-kernel.sh' "$all" | cut -d: -f1)
amps_line=$(grep -n 'hardware/dell-xps13-sidecar-amps.sh' "$all" | cut -d: -f1)
((ptl_line < amps_line)) ||
fail "the sidecar amplifier workaround runs after the Panther Lake kernel swap"
pass "the sidecar amplifier workaround runs after the Panther Lake kernel swap"
[[ -n $migration ]] || fail "a migration enables the workaround on existing installs" [[ -n $migration ]] || fail "a migration enables the workaround on existing installs"
pass "a migration enables the workaround on existing installs" pass "a migration enables the workaround on existing installs"