diff --git a/bin/omarchy-pkg-defaults b/bin/omarchy-pkg-defaults new file mode 100755 index 00000000000..c18138fe45d --- /dev/null +++ b/bin/omarchy-pkg-defaults @@ -0,0 +1,31 @@ +#!/bin/bash + +# omarchy:summary=Print the default package set for this computer's platform, or for the named one: the base list plus its architecture's and platform's additions. +# omarchy:args=[apple-silicon|qualcomm|generic-aarch64|generic] +# omarchy:hidden=true + +set -eo pipefail + +platform=${1:-} +if [[ -z $platform ]]; then + platform=$(omarchy-hw-platform) +fi + +case $platform in + apple-silicon) lists=(base aarch64 apple) ;; + qualcomm) lists=(base aarch64 qualcomm) ;; + generic-aarch64) lists=(base aarch64) ;; + generic) lists=(base) ;; + *) + echo "Error: unknown platform '$platform'" >&2 + exit 1 + ;; +esac + +files=() +for list in "${lists[@]}"; do + files+=("$OMARCHY_PATH/install/omarchy-$list.packages") +done + +# One name per line, first occurrence kept, in list order. +sed -e 's/[[:space:]]*#.*$//' -e '/^[[:space:]]*$/d' "${files[@]}" | awk '!seen[$0]++' diff --git a/bin/omarchy-reinstall-pkgs b/bin/omarchy-reinstall-pkgs index 97aff9c6a56..8cd579dc57d 100755 --- a/bin/omarchy-reinstall-pkgs +++ b/bin/omarchy-reinstall-pkgs @@ -13,6 +13,18 @@ omarchy-refresh-pacman # Downgrade any packages to the stable setup omarchy-update-pacman -Suu --noconfirm -# Ensure all packages are installed -mapfile -t packages < <(grep -v '^#' "$OMARCHY_PATH/install/omarchy-base.packages" | grep -v '^$') +# Ensure this platform's default packages are installed. A default no +# configured repository offers yet (an aarch64 build still unpublished) is +# reported and left out rather than failing the whole transaction. +default_packages=$(omarchy-pkg-defaults) +mapfile -t defaults <<<"$default_packages" +source "$OMARCHY_PATH/bin/omarchy-pkg-available" +packages=() +for package in "${defaults[@]}"; do + if omarchy-pkg-available "$package"; then + packages+=("$package") + else + echo "Skipping $package: no configured repository offers it" >&2 + fi +done omarchy-update-pacman -Syu --noconfirm --needed "${packages[@]}" diff --git a/default/pacman/aarch64/pacman-edge.conf b/default/pacman/aarch64/pacman-edge.conf index 40eeb598b4c..840661c6786 100644 --- a/default/pacman/aarch64/pacman-edge.conf +++ b/default/pacman/aarch64/pacman-edge.conf @@ -16,9 +16,6 @@ SigLevel = Required DatabaseOptional LocalFileSigLevel = Optional # pacman searches repositories in the order defined here -[asahi-alarm] -Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 - [core] Include = /etc/pacman.d/mirrorlist diff --git a/default/pacman/aarch64/pacman-rc.conf b/default/pacman/aarch64/pacman-rc.conf index a46bb0c2a7c..2e1ccf61a03 100644 --- a/default/pacman/aarch64/pacman-rc.conf +++ b/default/pacman/aarch64/pacman-rc.conf @@ -16,9 +16,6 @@ SigLevel = Required DatabaseOptional LocalFileSigLevel = Optional # pacman searches repositories in the order defined here -[asahi-alarm] -Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 - [core] Include = /etc/pacman.d/mirrorlist diff --git a/default/pacman/aarch64/pacman-stable.conf b/default/pacman/aarch64/pacman-stable.conf index 4e71e91d99f..05155580c43 100644 --- a/default/pacman/aarch64/pacman-stable.conf +++ b/default/pacman/aarch64/pacman-stable.conf @@ -16,9 +16,6 @@ SigLevel = Required DatabaseOptional LocalFileSigLevel = Optional # pacman searches repositories in the order defined here -[asahi-alarm] -Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 - [core] Include = /etc/pacman.d/mirrorlist diff --git a/default/pacman/apple-silicon/pacman-edge.conf b/default/pacman/apple-silicon/pacman-edge.conf new file mode 100644 index 00000000000..91e5cd74357 --- /dev/null +++ b/default/pacman/apple-silicon/pacman-edge.conf @@ -0,0 +1,52 @@ +# See the pacman.conf(5) manpage for option and repository directives + +[options] +Color +ILoveCandy +VerbosePkgLists +HoldPkg = pacman glibc +Architecture = auto +CheckSpace +ParallelDownloads = 5 +DownloadUser = alpm + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional + +# pacman searches repositories in the order defined here. Omarchy comes first on +# Apple Silicon, so its builds for the Mac (the Aurora kernel, m1n1, U-Boot and +# the Hyprland stack) win over the same names in Asahi ALARM and Arch Linux ARM. +[omarchy] +Server = https://pkgs.omarchy.org/edge/$arch + +[asahi-alarm] +Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[alarm] +Include = /etc/pacman.d/mirrorlist + +[aur] +Include = /etc/pacman.d/mirrorlist + +# Repositories for debug symbol packages. +# +# These upstream debug packages will only match core/extra/multilib packages from the Omarchy edge +# channel. Also note that you may not need to enable these repositories for many debugging tools -- +# debuginfod will work fine if you're on Omarchy edge. +# +# [core-debug] +# Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch +# +# [extra-debug] +# Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch +# +# [multilib-debug] +# Server = https://geo.mirror.pkgbuild.com/$repo/os/$arch diff --git a/default/pacman/apple-silicon/pacman-rc.conf b/default/pacman/apple-silicon/pacman-rc.conf new file mode 100644 index 00000000000..1b1139e0430 --- /dev/null +++ b/default/pacman/apple-silicon/pacman-rc.conf @@ -0,0 +1,37 @@ +# See the pacman.conf(5) manpage for option and repository directives + +[options] +Color +ILoveCandy +VerbosePkgLists +HoldPkg = pacman glibc +Architecture = auto +CheckSpace +ParallelDownloads = 5 +DownloadUser = alpm + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional + +# pacman searches repositories in the order defined here. Omarchy comes first on +# Apple Silicon, so its builds for the Mac (the Aurora kernel, m1n1, U-Boot and +# the Hyprland stack) win over the same names in Asahi ALARM and Arch Linux ARM. +[omarchy] +Server = https://pkgs.omarchy.org/rc/$arch + +[asahi-alarm] +Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[alarm] +Include = /etc/pacman.d/mirrorlist + +[aur] +Include = /etc/pacman.d/mirrorlist diff --git a/default/pacman/apple-silicon/pacman-stable.conf b/default/pacman/apple-silicon/pacman-stable.conf new file mode 100644 index 00000000000..e974fa815b3 --- /dev/null +++ b/default/pacman/apple-silicon/pacman-stable.conf @@ -0,0 +1,37 @@ +# See the pacman.conf(5) manpage for option and repository directives + +[options] +Color +ILoveCandy +VerbosePkgLists +HoldPkg = pacman glibc +Architecture = auto +CheckSpace +ParallelDownloads = 5 +DownloadUser = alpm + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional + +# pacman searches repositories in the order defined here. Omarchy comes first on +# Apple Silicon, so its builds for the Mac (the Aurora kernel, m1n1, U-Boot and +# the Hyprland stack) win over the same names in Asahi ALARM and Arch Linux ARM. +[omarchy] +Server = https://pkgs.omarchy.org/stable/$arch + +[asahi-alarm] +Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/aarch64 + +[core] +Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +[alarm] +Include = /etc/pacman.d/mirrorlist + +[aur] +Include = /etc/pacman.d/mirrorlist diff --git a/default/settings-runtime-profile b/default/settings-runtime-profile new file mode 100644 index 00000000000..bccfe841bf7 --- /dev/null +++ b/default/settings-runtime-profile @@ -0,0 +1,21 @@ +# omarchy-settings ships the same files on every architecture when its source +# has this file: the recipe stops leaving drop-ins out of the aarch64 package. +# Each platform-specific file below takes its decision at runtime instead. +# +# etc/mkinitcpio.conf.d/00-omarchy-hooks.conf +# Sets each platform's HOOKS baseline (omarchy-hw-platform), and leaves alone +# a Mac whose own mkinitcpio.conf carries asahi or busybox encrypt. +# etc/mkinitcpio.conf.d/thunderbolt_module.conf +# thunderbolt? is optional, so a kernel without the module skips it. +# etc/limine-entry-tool.d/, default/limine/, the limine-snapper-notify mask +# Read only where Limine and limine-snapper-sync are installed. On Apple +# Silicon the boot package's /etc/default/limine outranks every key it sets. +# etc/systemd/oomd.conf.d/, usr/lib/systemd/user/app.slice.d/10-oomd.conf +# Inert unless systemd-oomd runs (install/config/enable-services.sh, +# migration 1785424256). +# usr/lib/systemd/zram-generator.conf.d/90-omarchy.conf, +# etc/sysctl.d/99-omarchy-sysctl.conf, etc/tmpfiles.d/omarchy-zswap.conf +# Swap on zram everywhere: the installer provides zram-generator on x86_64, +# install/omarchy-aarch64.packages and migration 1790328426 on aarch64. +# etc/modprobe.d/omarchy-usb-autosuspend.conf +# Applies where usbcore is a module; Apple Silicon kernels build it in. diff --git a/docs/file-layout.md b/docs/file-layout.md index 16f269daf04..235a5d473d9 100644 --- a/docs/file-layout.md +++ b/docs/file-layout.md @@ -331,6 +331,10 @@ The package lists the ISO pacstraps live at `install/omarchy-base.packages` and `install/omarchy-other.packages`; the ISO builder also reads them when constructing its offline mirror. +A platform's default package set is the base list plus its architecture's and its platform's additions: `install/omarchy-aarch64.packages` on every aarch64 platform, then `install/omarchy-apple.packages` on Apple Silicon or `install/omarchy-qualcomm.packages` on Qualcomm. `omarchy-pkg-defaults [platform]` prints the composed set (for the running machine by default, via `omarchy-hw-platform`), and `omarchy-reinstall-pkgs` installs it. The pacman repositories follow the platform the same way: `default/pacman/` on x86_64, `default/pacman/aarch64/` on other aarch64 platforms, and `default/pacman/apple-silicon/`, the only one with the Asahi repository, on Apple Silicon. + +`omarchy-settings` ships the same files on every architecture. The platform-specific ones (the mkinitcpio, Limine, zram and oomd drop-ins) decide at runtime whether they apply; `default/settings-runtime-profile` lists each one and tells the package recipe the source works this way. + ## Explicit resync (`omarchy-reinstall-configs`) When an existing user wants to reset to shipped defaults: diff --git a/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf b/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf index 119f72afc78..f133dcded0d 100644 --- a/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf +++ b/etc/mkinitcpio.conf.d/00-omarchy-hooks.conf @@ -12,7 +12,18 @@ if command -v omarchy-hw-platform >/dev/null; then _omarchy_platform=$(omarchy-hw-platform) || return 1 fi +# A Mac whose mkinitcpio.conf carries the asahi hook, or the busybox encrypt +# hook that unlocks it through cryptdevice= (sd-encrypt cannot parse that), boots +# the initramfs its platform set up without the Apple boot package: a legacy +# install until ticket 45 moves it. Its line stays as it is. The asahi hook also +# marks such a root off a Mac, as in a chroot or a VM. +if [[ " ${HOOKS[*]:-} " == *" asahi "* ]] || + [[ $_omarchy_platform == "apple-silicon" && " ${HOOKS[*]:-} " == *" encrypt "* ]]; then + _omarchy_platform=platform-owned +fi + case $_omarchy_platform in + platform-owned) ;; apple-silicon) HOOKS=(base systemd plymouth autodetect microcode modconf kms keyboard sd-vconsole block filesystems fsck) ;; diff --git a/etc/mkinitcpio.conf.d/thunderbolt_module.conf b/etc/mkinitcpio.conf.d/thunderbolt_module.conf index 9518f8b1201..9b7eb59da96 100644 --- a/etc/mkinitcpio.conf.d/thunderbolt_module.conf +++ b/etc/mkinitcpio.conf.d/thunderbolt_module.conf @@ -1 +1 @@ -MODULES+=(thunderbolt) +MODULES+=(thunderbolt?) diff --git a/install/config/enable-services.sh b/install/config/enable-services.sh index 04c04bc5a46..1af5d7269d5 100644 --- a/install/config/enable-services.sh +++ b/install/config/enable-services.sh @@ -16,8 +16,9 @@ systemctl enable sddm.service # whole session down. [Install] pulls in systemd-oomd.socket via Also=, which # is what the user manager reports app.slice candidacy over. # -# Not on Apple Silicon: that install ships neither the oomd drop-ins nor the -# zram swap they are tuned against (see the omarchy-settings package), so -# enabling the killer there would run it on its stock thresholds alone. +# Not on a fresh Apple Silicon install: turning systemd-oomd on there is a +# change of its own, even though omarchy-settings now ships its drop-ins and +# zram swap on every platform. Macs updated through migration 1785424256 +# already run it. omarchy-hw-apple-silicon || systemctl enable systemd-oomd.service diff --git a/install/helpers/pacman.sh b/install/helpers/pacman.sh index 3e8a2fd27f3..80e08a57488 100644 --- a/install/helpers/pacman.sh +++ b/install/helpers/pacman.sh @@ -24,14 +24,20 @@ omarchy_pacman_channel_qualified() { } # Render into a caller-owned temporary directory. Never sync or touch /etc. +# Only Apple Silicon adds the Asahi repositories; every aarch64 platform uses +# the Arch Linux ARM mirrors. omarchy_pacman_stage() { - local channel=$1 destination=$2 templates="$OMARCHY_PATH/default/pacman" + local channel=$1 destination=$2 platform templates="$OMARCHY_PATH/default/pacman" + local repositories mirrors omarchy_pacman_validate_channel "$channel" || return 1 - if omarchy-hw-apple-silicon; then - templates+=/aarch64 - fi - cp "$templates/pacman-$channel.conf" "$destination/pacman.conf" || return 1 - cp "$templates/mirrorlist-$channel" "$destination/mirrorlist" || return 1 + platform=$(omarchy-hw-platform) || return 1 + case $platform in + apple-silicon) repositories=$templates/apple-silicon mirrors=$templates/aarch64 ;; + qualcomm | generic-aarch64) repositories=$templates/aarch64 mirrors=$templates/aarch64 ;; + *) repositories=$templates mirrors=$templates ;; + esac + cp "$repositories/pacman-$channel.conf" "$destination/pacman.conf" || return 1 + cp "$mirrors/mirrorlist-$channel" "$destination/mirrorlist" || return 1 } # Read candidate databases in isolation before touching live configuration. diff --git a/install/login/grub-splash.sh b/install/login/grub-splash.sh index 86ac8e8bca8..96cfeb9c5a2 100644 --- a/install/login/grub-splash.sh +++ b/install/login/grub-splash.sh @@ -1,8 +1,8 @@ # Limine machines get "quiet splash" from the limine-entry-tool drop-in and the # plymouth hook from the mkinitcpio drop-in, both shipped by omarchy-settings. -# Apple Silicon boots m1n1 -> U-Boot -> GRUB, and the aarch64 omarchy-settings -# deliberately ships neither drop-in, so both have to land in the files GRUB -# and mkinitcpio read directly. The menu title comes from GRUB_DISTRIBUTOR, +# Apple Silicon boots m1n1 -> U-Boot -> GRUB, and omarchy-settings applies +# neither drop-in there, so both have to land in the files GRUB and mkinitcpio +# read directly. The menu title comes from GRUB_DISTRIBUTOR, # which defaults to the os-release name, so those machines otherwise offer to # boot "Arch Linux". Nothing here runs where Limine is installed or GRUB is not. omarchy-cmd-missing limine || return 0 diff --git a/install/omarchy-aarch64.packages b/install/omarchy-aarch64.packages new file mode 100644 index 00000000000..38cf63098e4 --- /dev/null +++ b/install/omarchy-aarch64.packages @@ -0,0 +1,4 @@ +# Additions for every aarch64 platform, composed after omarchy-base.packages +# (omarchy-pkg-defaults). x86_64 gets zram-generator from its installer, and +# omarchy-settings' zram and reclaim settings expect it everywhere. +zram-generator diff --git a/install/omarchy-apple.packages b/install/omarchy-apple.packages index d1d421f2743..1d605060974 100644 --- a/install/omarchy-apple.packages +++ b/install/omarchy-apple.packages @@ -1,5 +1,20 @@ -# Apple Silicon profile additions; install before omarchy-apply-system. -# Consume alongside the shared base manifest, never on Intel/T2 or other ARM. +# Apple Silicon additions, composed after omarchy-base.packages and +# omarchy-aarch64.packages (omarchy-pkg-defaults apple-silicon); never on +# Intel/T2 or other ARM. Install them before omarchy-apply-system. The kernel +# and boot chain come with the image, as the kernel and bootloader do on x86_64. omarchy-mac + +# Audio: PipeWire's PulseAudio server and realtime scheduling, which x86_64 +# gets from its installer, and the Asahi speaker stack (install/hardware/apple/audio.sh). +asahi-audio +pipewire-alsa +pipewire-pulse +rtkit +speakersafetyd + +# Hardware video decode (install/hardware/apple/video-decode.sh). avd-fw libva-v4l2_request-avd + +# Widevine for DRM streaming. +widevine diff --git a/install/omarchy-qualcomm.packages b/install/omarchy-qualcomm.packages new file mode 100644 index 00000000000..735a5bb93b5 --- /dev/null +++ b/install/omarchy-qualcomm.packages @@ -0,0 +1,3 @@ +# Qualcomm (Snapdragon) additions, composed after omarchy-base.packages and +# omarchy-aarch64.packages (omarchy-pkg-defaults qualcomm). +linux-firmware-qcom diff --git a/migrations/1790328426.sh b/migrations/1790328426.sh new file mode 100644 index 00000000000..66ac51cda73 --- /dev/null +++ b/migrations/1790328426.sh @@ -0,0 +1,24 @@ +echo "Give aarch64 machines the zram swap omarchy-settings now configures there" + +# omarchy-settings used to leave its zram drop-in and reclaim tuning out on +# aarch64. It ships them on every platform now, and they expect swap on zram, +# so install the generator where this platform's default packages name it +# (x86_64 gets it from its installer) and start the device it configures. +if omarchy-pkg-defaults | grep -x zram-generator >/dev/null && omarchy-pkg-missing zram-generator; then + omarchy-pkg-add zram-generator + if ! systemctl is-active --quiet dev-zram0.swap; then + sudo systemctl daemon-reload + sudo systemctl start systemd-zram-setup@zram0.service || true + fi +fi + +# Migration 1789154627 copied the drop-in into /etc on Macs under the same +# name. An identical copy would only hide the packaged one's updates; a copy +# that differs is the administrator's and stays. +vendor="${OMARCHY_ZRAM_DROPIN_USR:-/usr/lib/systemd/zram-generator.conf.d/90-omarchy.conf}" +copy="${OMARCHY_ZRAM_DROPIN_ETC:-/etc/systemd/zram-generator.conf.d/90-omarchy.conf}" + +if [[ -f $vendor && -f $copy && ! -L $copy ]] && cmp -s -- "$vendor" "$copy"; then + sudo rm -f -- "$copy" + sudo rmdir --ignore-fail-on-non-empty -- "${copy%/*}" +fi diff --git a/packages/omarchy-mac/README.md b/packages/omarchy-mac/README.md index 36bdc534386..0e373f37576 100644 --- a/packages/omarchy-mac/README.md +++ b/packages/omarchy-mac/README.md @@ -10,7 +10,7 @@ Runtime dependencies: `omarchy` (the `omarchy-hw-platform` detector and its Appl ## Setup contract -Install the matching runtime, settings and add-on candidates in one pacman transaction. Their transferred commands and user unit must have only one owner. On Apple Silicon, include `install/omarchy-apple.packages` alongside the desktop base package list before calling `omarchy-apply-system`. The desktop checks the package is already present before its network hardware setup; offline setup never downloads it. +Install the matching runtime, settings and add-on candidates in one pacman transaction. Their transferred commands and user unit must have only one owner. On Apple Silicon, install the platform's default set (`omarchy-pkg-defaults apple-silicon`: the base, aarch64 and Apple lists) before calling `omarchy-apply-system`. The desktop checks the package is already present before its network hardware setup; offline setup never downloads it. Run `omarchy-mac-setup-system` as root on the target hardware (inside its target chroot for offline provisioning). An optional absolute root argument supports staging against the same target hardware without a bus. It exits without changes unless `omarchy-hw-platform` reports `apple-silicon`, and fails if the detector does. It retires only exact generated Wi-Fi, module and service files, retaining a `.omarchy-mac-retired` backup; the `/etc/NetworkManager/conf.d/wifi_backend.conf` that earlier Apple installs wrote is one of them, and any edited copy stays in place and keeps precedence. It enables resume recovery only for BCM4378, BCM4387 and BCM4388 on Apple Silicon; Intel/T2 Macs are excluded. It is the only enabler of `speakersafetyd`, without which the kernel keeps the speakers muted: it applies the package's `80-omarchy-mac-audio.preset` once speakersafetyd is installed, so `/etc` presets that sort before it or replace it by name, masks and later explicit disables win, and image builders that apply presets get the same result. A live run also restarts a speakersafetyd left dead by a start-limit. No NetworkManager restart or driver reload occurs during setup. The backend applies when NetworkManager next starts; notch changes apply when appledrm next loads. The greeter drop-in needs no setup: from the next `sddm` start it holds the greeter, for at most 10 s, until Apple's display controller has replaced the boot framebuffer. diff --git a/test/shell.d/mkinitcpio-hooks-test.sh b/test/shell.d/mkinitcpio-hooks-test.sh index 879178d25b5..edd33101e7c 100755 --- a/test/shell.d/mkinitcpio-hooks-test.sh +++ b/test/shell.d/mkinitcpio-hooks-test.sh @@ -117,6 +117,27 @@ grep -q "contradictory platform identity" "$test_tmp/contradiction.err" || fail "a platform the detector cannot place stops the build" "stderr: $(<"$test_tmp/contradiction.err")" pass "a platform the detector cannot place stops the build" +# A Mac that set up its own initramfs before the Apple boot package keeps it: +# busybox encrypt unlocks through cryptdevice=, which sd-encrypt cannot parse, +# and the asahi hook carries the firmware. The asahi hook marks such a root off +# a Mac too. Busybox encrypt alone means nothing off Apple Silicon. +legacy_encrypted="base udev plymouth autodetect microcode modconf kms keyboard keymap consolefont block encrypt asahi filesystems fsck" +legacy_plain="base udev autodetect microcode modconf kms keyboard keymap consolefont block asahi filesystems fsck" +for legacy in "$legacy_encrypted" "$legacy_plain" "${legacy_encrypted/ asahi / }"; do + new_etc + sed -i "s/^HOOKS=.*/HOOKS=($legacy)/" "$etc/mkinitcpio.conf" + assert_hooks "a Mac keeps its own HOOKS=($legacy)" apple-silicon "$legacy" +done +new_etc +sed -i "s/^HOOKS=.*/HOOKS=($legacy_plain)/" "$etc/mkinitcpio.conf" +assert_hooks "an asahi root keeps its HOOKS off a Mac" generic-aarch64 "$legacy_plain" +new_etc +sed -i "s/^HOOKS=.*/HOOKS=(base udev autodetect modconf block encrypt filesystems fsck)/" "$etc/mkinitcpio.conf" +assert_hooks "busybox encrypt off Apple Silicon still gets the Omarchy baseline" generic "$x86_hooks" +new_etc +sed -i "s/^HOOKS=.*/HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems fsck)/" "$etc/mkinitcpio.conf" +assert_hooks "a Mac with a stock busybox line and no asahi hook gets the systemd baseline" apple-silicon "$apple_hooks" + # A platform fragment sorts after the baseline and before omarchy_hooks.conf, # as omarchy-mac-boot's 90- drop-ins do. Its hooks must reach the image. new_etc @@ -145,27 +166,28 @@ assert_hooks "the NVIDIA filter keeps a platform fragment's hooks" generic \ "base udev plymouth keyboard autodetect microcode modconf keymap consolefont block encrypt platform-firmware filesystems fsck btrfs-overlayfs platform-late" # Existing x86 configurations build the image they built before the baseline -# moved: the same HOOKS, MODULES and FILES. +# moved: the same HOOKS, MODULES and FILES. thunderbolt? is the same module, +# optional so that a kernel without it (as on ARM) still builds. new_etc assert_composed "x86 without hardware drop-ins is unchanged" generic \ - "$x86_hooks" "thunderbolt" "" + "$x86_hooks" "thunderbolt?" "" new_etc drop_in nvidia.conf <<<"MODULES+=($nvidia_modules)" pci_devices 0x10de:0x030000 assert_composed "NVIDIA-only x86 drops only kms" generic \ - "$x86_hooks_without_kms" "$nvidia_modules thunderbolt" "" + "$x86_hooks_without_kms" "$nvidia_modules thunderbolt?" "" new_etc drop_in nvidia.conf <<<"MODULES+=($nvidia_modules)" pci_devices 0x8086:0x030000 0x10de:0x030200 assert_composed "hybrid x86 keeps kms for the iGPU" generic \ - "$x86_hooks" "$nvidia_modules thunderbolt" "" + "$x86_hooks" "$nvidia_modules thunderbolt?" "" new_etc pci_devices 0x10de:0x030000 assert_composed "NVIDIA-only x86 without early nvidia_drm keeps kms" generic \ - "$x86_hooks" "thunderbolt" "" + "$x86_hooks" "thunderbolt?" "" new_etc drop_in nvidia.conf <<<"MODULES+=($nvidia_modules)" @@ -173,21 +195,21 @@ drop_in omarchy_resume.conf <<<"HOOKS+=(resume)" drop_in 99-omarchy-provisioning-key.conf <<<"FILES+=(/etc/omarchy/provisioning.key)" pci_devices 0x10de:0x030000 assert_composed "NVIDIA-only x86 with hibernation and a provisioning key is unchanged" generic \ - "$x86_hooks_without_kms resume" "$nvidia_modules thunderbolt" "/etc/omarchy/provisioning.key" + "$x86_hooks_without_kms resume" "$nvidia_modules thunderbolt?" "/etc/omarchy/provisioning.key" new_etc drop_in apple-t2.conf <<<"MODULES+=(t2bce_vhci usbhid hid_apple hid_generic xhci_pci xhci_hcd)" assert_composed "T2 Mac x86 is unchanged" generic \ - "$x86_hooks" "t2bce_vhci usbhid hid_apple hid_generic xhci_pci xhci_hcd thunderbolt" "" + "$x86_hooks" "t2bce_vhci usbhid hid_apple hid_generic xhci_pci xhci_hcd thunderbolt?" "" new_etc drop_in macbook_spi_modules.conf <<<"MODULES=(applespi intel_lpss_pci spi_pxa2xx_platform)" assert_composed "SPI keyboard MacBook x86 is unchanged" generic \ - "$x86_hooks" "applespi intel_lpss_pci spi_pxa2xx_platform thunderbolt" "" + "$x86_hooks" "applespi intel_lpss_pci spi_pxa2xx_platform thunderbolt?" "" new_etc drop_in nvidia.conf <<<"MODULES+=($nvidia_modules)" drop_in surface_device_modules.conf <<<"MODULES=(pinctrl_tigerlake surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw)" pci_devices 0x8086:0x030000 assert_composed "Surface x86 is unchanged" generic \ - "$x86_hooks" "pinctrl_tigerlake surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw thunderbolt" "" + "$x86_hooks" "pinctrl_tigerlake surface_aggregator surface_aggregator_registry surface_aggregator_hub surface_hid_core surface_hid surface_kbd intel_lpss_pci 8250_dw thunderbolt?" "" diff --git a/test/shell.d/pacman-staging-test.sh b/test/shell.d/pacman-staging-test.sh index f93d0658930..9d843a078f3 100644 --- a/test/shell.d/pacman-staging-test.sh +++ b/test/shell.d/pacman-staging-test.sh @@ -5,31 +5,45 @@ work=$(mktemp -d) trap 'rm -rf "$work"' EXIT export OMARCHY_PATH="$ROOT" source "$ROOT/install/helpers/pacman.sh" -omarchy-hw-apple-silicon() { [[ ${apple:-0} == 1 ]]; } -for apple in 0 1; do +omarchy-hw-platform() { echo "${fixture_platform:-generic}"; } +omarchy-hw-apple-silicon() { [[ ${fixture_platform:-generic} == "apple-silicon" ]]; } +repositories() { grep -o '^\[[^]]*\]' "$1" | tr -d '[]' | grep -vx options | tr '\n' ' '; } +for fixture_platform in generic apple-silicon qualcomm generic-aarch64; do for channel in stable rc edge; do omarchy_pacman_stage "$channel" "$work" - if [[ $apple == 1 ]]; then - for repo in asahi-alarm core extra alarm aur omarchy; do - grep -Fxq "[$repo]" "$work/pacman.conf" || fail "ARM staging preserves $repo" - done + case $fixture_platform in + apple-silicon) + [[ $(repositories "$work/pacman.conf") == "omarchy asahi-alarm core extra alarm aur " ]] || + fail 'Apple Silicon puts Omarchy first, then Asahi ALARM and Arch Linux ARM' "$(repositories "$work/pacman.conf")" + ! omarchy_pacman_channel_qualified "$channel" || fail 'unqualified ARM channel refused' + ;; + qualcomm | generic-aarch64) + [[ $(repositories "$work/pacman.conf") == "core extra alarm aur omarchy " ]] || + fail "$fixture_platform gets Arch Linux ARM and Omarchy, no Asahi repository" "$(repositories "$work/pacman.conf")" + ;; + generic) + cmp -s "$work/pacman.conf" "$ROOT/default/pacman/pacman-$channel.conf" || fail 'x86 keeps its template' + cmp -s "$work/mirrorlist" "$ROOT/default/pacman/mirrorlist-$channel" || fail 'x86 keeps its mirrors' + omarchy_pacman_channel_qualified "$channel" || fail 'x86 channels remain available' + ;; + esac + if [[ $fixture_platform != "generic" ]]; then ! grep -Fq '[multilib]' "$work/pacman.conf" || fail 'no x86 repository on ARM' grep -Fq '/$arch/$repo' "$work/mirrorlist" || fail 'ALARM mirror layout' - ! omarchy_pacman_channel_qualified "$channel" || fail 'unqualified ARM channel refused' - else - grep -Fq '[multilib]' "$work/pacman.conf" || fail 'x86 retains multilib' - omarchy_pacman_channel_qualified "$channel" || fail 'x86 channels remain available' fi grep -Fq "https://pkgs.omarchy.org/$channel/" "$work/pacman.conf" || fail 'selected channel URL' done done ! omarchy_pacman_stage nonsense "$work" || fail 'invalid channel refused' -pass 'staging preserves architecture repositories for every channel' +omarchy-hw-platform() { return 1; } +! omarchy_pacman_stage stable "$work" || fail 'an unknown platform stages nothing' +omarchy-hw-platform() { echo "${fixture_platform:-generic}"; } +pass "staging selects each platform's repositories for every channel" # Exercise the source-controlled enablement seam with a test-only copy. sed 's/qualified_arm_channels=()/qualified_arm_channels=(stable rc edge)/' "$ROOT/install/helpers/pacman.sh" >"$work/qualified.sh" source "$work/qualified.sh" -apple=1 +fixture_platform=apple-silicon for channel in stable rc edge; do omarchy_pacman_channel_qualified "$channel" || fail 'qualified ARM channel selectable'; done # Preflight failures occur in an isolated database; no live package command. @@ -53,3 +67,12 @@ source "$ROOT/install/helpers/pacman.sh" cp() { fail 'offline unqualified ARM finalization must preserve existing files'; } omarchy_pacman_finalize stable pass 'offline finalization performs no sync or live configuration replacement' + +# The package-resolution fixtures resolve the same repositories, in the same +# order, as each platform's edge template. +for fixture in apple:apple-silicon qualcomm:aarch64 generic-aarch64:aarch64; do + [[ $(repositories "$ROOT/tools/package-resolution/platforms/${fixture%%:*}/pacman.conf") == \ + "$(repositories "$ROOT/default/pacman/${fixture#*:}/pacman-edge.conf")" ]] || + fail "the ${fixture%%:*} resolution fixture follows default/pacman/${fixture#*:}" +done +pass "package-resolution fixtures follow each platform's repositories" diff --git a/test/shell.d/platform-packages-test.sh b/test/shell.d/platform-packages-test.sh new file mode 100755 index 00000000000..7592a7fb54d --- /dev/null +++ b/test/shell.d/platform-packages-test.sh @@ -0,0 +1,105 @@ +#!/bin/bash + +set -euo pipefail + +source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" + +require_platform_fixtures "platform package lists" + +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT +export OMARCHY_PATH="$ROOT" + +names() { + sed -e 's/[[:space:]]*#.*$//' -e '/^[[:space:]]*$/d' "$@" +} + +# Package names that exist only for Apple Silicon. +apple_only='^(omarchy-mac(-.*)?|linux-aurora(-.*)?|linux-asahi(-.*)?|m1n1(-.*)?|uboot-asahi|asahi-.*|avd-fw|libva-v4l2_request-avd|speakersafetyd|widevine)$' + +base=$(names "$ROOT/install/omarchy-base.packages") +aarch64=$(names "$ROOT/install/omarchy-aarch64.packages") + +for platform in apple-silicon qualcomm generic-aarch64 generic; do + fake_platform "$work/$platform" "$platform" + defaults=$(OMARCHY_PROC_ROOT="$work/$platform/proc" PATH="$work/$platform/bin:$ROOT/bin:$PATH" omarchy-pkg-defaults) + [[ $defaults == "$(omarchy-pkg-defaults "$platform")" ]] || + fail "$platform: the detected platform selects its own list" + printf '%s\n' "$defaults" >"$work/$platform.packages" + + [[ -z $(sort "$work/$platform.packages" | uniq -d) ]] || fail "$platform: each package is listed once" + [[ $(head -n "$(wc -l <<<"$base")" "$work/$platform.packages") == "$base" ]] || + fail "$platform: the base list comes first, unchanged" + + case $platform in + generic) + [[ $defaults == "$base" ]] || fail "x86_64 installs exactly the base list" + [[ $defaults == "$(grep -v '^#' "$ROOT/install/omarchy-base.packages" | grep -v '^$')" ]] || + fail "x86_64 installs what omarchy-reinstall-pkgs read from the base list before" + ;; + *) + while IFS= read -r package; do + grep -Fxq "$package" "$work/$platform.packages" || fail "$platform: aarch64 addition $package" + done <<<"$aarch64" + ;; + esac + + if [[ $platform == "apple-silicon" ]]; then + while IFS= read -r package; do + grep -Fxq "$package" "$work/$platform.packages" || fail "Apple Silicon: $package" + done < <(names "$ROOT/install/omarchy-apple.packages") + else + ! grep -Eq "$apple_only" "$work/$platform.packages" || + fail "$platform: no Apple Silicon package" "$(grep -E "$apple_only" "$work/$platform.packages")" + fi + + if [[ $platform == "qualcomm" ]]; then + grep -Fxq linux-firmware-qcom "$work/$platform.packages" || fail "Qualcomm adds its firmware" + else + ! grep -Fxq linux-firmware-qcom "$work/$platform.packages" || fail "$platform: no Qualcomm firmware" + fi +done +pass "each platform composes base, architecture and platform lists, and only Apple Silicon names Apple packages" + +! omarchy-pkg-defaults riscv 2>/dev/null || fail "an unknown platform is refused" +pass "an unknown platform is refused" + +# omarchy-reinstall-pkgs installs the detected platform's set. +mkdir -p "$work/stubs" +cat >"$work/stubs/omarchy-update-pacman" <<'SH' +#!/bin/bash +printf '%s\n' "$*" >>"$STUB_LOG" +SH +cat >"$work/stubs/omarchy-refresh-pacman" <<'SH' +#!/bin/bash +printf 'refresh %s\n' "$*" >>"$STUB_LOG" +SH +printf '#!/bin/bash\n' >"$work/stubs/lspci" +# The configured repositories offer every default except $UNPUBLISHED. +cat >"$work/stubs/pacman" <<'SH' +#!/bin/bash +[[ $1 == "-Slq" ]] || exit 1 +grep -vx "${UNPUBLISHED:-}" "$DEFAULTS_FILE" +SH +chmod +x "$work/stubs/"* + +for platform in apple-silicon generic; do + export STUB_LOG="$work/$platform.log" DEFAULTS_FILE="$work/$platform.packages" UNPUBLISHED="" + : >"$STUB_LOG" + OMARCHY_PROC_ROOT="$work/$platform/proc" PATH="$work/stubs:$work/$platform/bin:$ROOT/bin:$PATH" \ + omarchy-reinstall-pkgs + expected="-Syu --noconfirm --needed $(tr '\n' ' ' <"$work/$platform.packages")" + [[ $(tail -n 1 "$STUB_LOG") == "${expected% }" ]] || + fail "$platform: reinstall installs the platform's default set" "$(tail -n 1 "$STUB_LOG")" +done +pass "omarchy-reinstall-pkgs installs the platform's default set" + +export STUB_LOG="$work/unpublished.log" DEFAULTS_FILE="$work/apple-silicon.packages" UNPUBLISHED=omarchy-mac +: >"$STUB_LOG" +OMARCHY_PROC_ROOT="$work/apple-silicon/proc" PATH="$work/stubs:$work/apple-silicon/bin:$ROOT/bin:$PATH" \ + omarchy-reinstall-pkgs 2>"$work/unpublished.err" +expected="-Syu --noconfirm --needed $(grep -vx omarchy-mac "$work/apple-silicon.packages" | tr '\n' ' ')" +[[ $(tail -n 1 "$STUB_LOG") == "${expected% }" ]] || + fail "reinstall leaves out a default no repository offers" "$(tail -n 1 "$STUB_LOG")" +grep -Fq "Skipping omarchy-mac" "$work/unpublished.err" || fail "reinstall reports the default it leaves out" +pass "omarchy-reinstall-pkgs reports and leaves out a default no repository offers" diff --git a/test/shell.d/settings-runtime-profile-test.sh b/test/shell.d/settings-runtime-profile-test.sh new file mode 100755 index 00000000000..1945add2b6f --- /dev/null +++ b/test/shell.d/settings-runtime-profile-test.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -euo pipefail + +source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" + +# The omarchy-settings recipe ships the same files on every architecture when +# the source has default/settings-runtime-profile, which lists the files that +# decide at runtime whether they apply. Every file it lists must exist. +profile="$ROOT/default/settings-runtime-profile" +[[ -f $profile ]] || fail "the source marks itself for the omarchy-settings recipe" + +listed=$(grep -oE '(^|[[:space:]])(etc|default|usr/lib)/[^ ,]*' "$profile" | sed 's/^[[:space:]]*//' | sort -u) +[[ -n $listed ]] || fail "the runtime profile lists its files" +while IFS= read -r path; do + source_path=$path + case $path in + usr/lib/systemd/zram-generator.conf.d/*) source_path=default/systemd/zram-generator.conf.d/${path##*/} ;; + usr/lib/systemd/user/*) source_path=default/systemd/user/${path#usr/lib/systemd/user/} ;; + esac + [[ -e $ROOT/${source_path%/} ]] || fail "the runtime profile lists an existing file: $path" +done <<<"$listed" +pass "every file the runtime profile lists exists in the source" diff --git a/test/shell.d/zram-aarch64-migration-test.sh b/test/shell.d/zram-aarch64-migration-test.sh new file mode 100755 index 00000000000..98f7b36af83 --- /dev/null +++ b/test/shell.d/zram-aarch64-migration-test.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +set -euo pipefail + +source "$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)/base-test.sh" + +migration="$ROOT/migrations/1790328426.sh" +work=$(mktemp -d) +trap 'rm -rf "$work"' EXIT + +mkdir -p "$work/bin" +printf '#!/bin/bash\nexec "$@"\n' >"$work/bin/sudo" +printf '#!/bin/bash\nprintf "%%s\\n" $DEFAULTS\n' >"$work/bin/omarchy-pkg-defaults" +printf '#!/bin/bash\n[[ $MISSING == 1 ]]\n' >"$work/bin/omarchy-pkg-missing" +printf '#!/bin/bash\necho "pkg-add $*" >>"$CALLS"\n' >"$work/bin/omarchy-pkg-add" +cat >"$work/bin/systemctl" <<'SH' +#!/bin/bash +echo "systemctl $*" >>"$CALLS" +[[ $1 != "is-active" ]] || [[ $ZRAM_ACTIVE == 1 ]] +SH +chmod +x "$work/bin/"* + +# $1: vendor drop-in content or "absent", $2: /etc copy content, "absent" or +# "link". Prints what is left at the copy's path. +run_migration() { + local root="$work/root" + rm -rf "$root" + mkdir -p "$root/usr" "$root/etc/systemd/zram-generator.conf.d" + if [[ $1 != "absent" ]]; then + mkdir -p "$root/usr/zram" + printf '%s\n' "$1" >"$root/usr/zram/90-omarchy.conf" + fi + case $2 in + absent) ;; + link) ln -s "$root/usr/zram/90-omarchy.conf" "$root/etc/systemd/zram-generator.conf.d/90-omarchy.conf" ;; + *) printf '%s\n' "$2" >"$root/etc/systemd/zram-generator.conf.d/90-omarchy.conf" ;; + esac + + OMARCHY_ZRAM_DROPIN_USR="$root/usr/zram/90-omarchy.conf" \ + OMARCHY_ZRAM_DROPIN_ETC="$root/etc/systemd/zram-generator.conf.d/90-omarchy.conf" \ + PATH="$work/bin:$PATH" bash -euo pipefail "$migration" >/dev/null + + if [[ -L $root/etc/systemd/zram-generator.conf.d/90-omarchy.conf ]]; then + echo link + elif [[ -f $root/etc/systemd/zram-generator.conf.d/90-omarchy.conf ]]; then + cat "$root/etc/systemd/zram-generator.conf.d/90-omarchy.conf" + elif [[ -d $root/etc/systemd/zram-generator.conf.d ]]; then + echo empty-dir + else + echo gone + fi +} + +export CALLS="$work/calls" DEFAULTS="base-package" MISSING=0 ZRAM_ACTIVE=0 +: >"$CALLS" + +[[ $(run_migration '[zram0]' '[zram0]') == "gone" ]] || fail "an identical copy and its directory are removed" +pass "an identical /etc copy of the packaged drop-in is retired" + +[[ $(run_migration '[zram0]' '[zram0] edited') == "[zram0] edited" ]] || fail "an edited copy stays" +[[ $(run_migration absent '[zram0]') == "[zram0]" ]] || fail "the copy stays while the package ships no drop-in" +[[ $(run_migration '[zram0]' link) == "link" ]] || fail "a symlink is not a copy" +[[ $(run_migration '[zram0]' absent) == "empty-dir" ]] || fail "nothing to retire is a no-op" +pass "an edited copy, a symlink or a missing packaged drop-in leaves /etc alone" + +# zram-generator: installed and started only where the platform's defaults name +# it and it is missing. +MISSING=1 run_migration '[zram0]' absent >/dev/null +[[ ! -s $CALLS ]] || fail "a platform without zram-generator in its defaults installs nothing" "$(cat "$CALLS")" +DEFAULTS="base-package zram-generator" MISSING=0 run_migration '[zram0]' absent >/dev/null +[[ ! -s $CALLS ]] || fail "an installed zram-generator is left alone" "$(cat "$CALLS")" +DEFAULTS="base-package zram-generator" MISSING=1 run_migration '[zram0]' absent >/dev/null +grep -Fxq 'pkg-add zram-generator' "$CALLS" || fail "aarch64 installs zram-generator" +grep -Fxq 'systemctl start systemd-zram-setup@zram0.service' "$CALLS" || fail "the zram device is started" +: >"$CALLS" +DEFAULTS="base-package zram-generator" MISSING=1 ZRAM_ACTIVE=1 run_migration '[zram0]' absent >/dev/null +! grep -Fq 'systemctl start' "$CALLS" || fail "an active zram swap is not restarted" +pass "zram-generator is installed and started where the platform's defaults name it" diff --git a/tools/package-resolution/platforms/apple/pacman.conf b/tools/package-resolution/platforms/apple/pacman.conf index 2af1be1d584..7be210e2578 100644 --- a/tools/package-resolution/platforms/apple/pacman.conf +++ b/tools/package-resolution/platforms/apple/pacman.conf @@ -1,7 +1,11 @@ -# Apple Silicon: the aarch64 edge channel with the Asahi repositories first. +# Apple Silicon: the aarch64 edge channel in default/pacman/apple-silicon order, +# Omarchy first, then the Asahi repositories and Arch Linux ARM. [options] Architecture = aarch64 +[omarchy] +Server = https://pkgs.omarchy.org/edge/$arch + [asahi-alarm] Server = https://github.com/asahi-alarm/asahi-alarm/releases/download/$arch @@ -24,6 +28,3 @@ Server = http://mirror.archlinuxarm.org/$arch/$repo Server = https://ca.us.mirror.archlinuxarm.org/$arch/$repo Server = https://fl.us.mirror.archlinuxarm.org/$arch/$repo Server = http://mirror.archlinuxarm.org/$arch/$repo - -[omarchy] -Server = https://pkgs.omarchy.org/edge/$arch diff --git a/tools/package-resolution/platforms/apple/platform b/tools/package-resolution/platforms/apple/platform index 278e3ec67a3..965756ba98c 100644 --- a/tools/package-resolution/platforms/apple/platform +++ b/tools/package-resolution/platforms/apple/platform @@ -1,8 +1,12 @@ # Sourced by check. Lists are relative to the repository root. -lists=(install/omarchy-base.packages install/omarchy-apple.packages) -packages=(omarchy omarchy-settings omarchy-mac-boot linux-aurora m1n1-aurora uboot-asahi) +lists=(install/omarchy-base.packages install/omarchy-aarch64.packages install/omarchy-apple.packages) +# The image's kernel, boot chain and Asahi platform packages. +packages=(omarchy omarchy-settings omarchy-mac-boot linux-aurora linux-aurora-headers m1n1-aurora uboot-asahi + limine limine-mkinitcpio-hook limine-snapper-sync asahi-alarm-keyring asahi-bless asahi-desktop-meta + asahi-fwextract asahi-scripts alsa-ucm-conf-asahi lzfse startup-disk tiny-dfr) forbidden_repos=(omarchy-aarch64) -transitions=(omarchy omarchy-settings omarchy-mac omarchy-mac-boot linux-aurora m1n1-aurora uboot-asahi) +transitions=(omarchy omarchy-settings omarchy-mac omarchy-mac-boot linux-aurora m1n1-aurora uboot-asahi + hyprland aquamarine limine-mkinitcpio-hook) kernel=linux-aurora unpublished=( [obs-studio]="not built for aarch64 by Arch Linux ARM" diff --git a/tools/package-resolution/platforms/generic-aarch64/platform b/tools/package-resolution/platforms/generic-aarch64/platform index bb7afb98f26..96cf2bb9322 100644 --- a/tools/package-resolution/platforms/generic-aarch64/platform +++ b/tools/package-resolution/platforms/generic-aarch64/platform @@ -1,5 +1,5 @@ # Sourced by check. Lists are relative to the repository root. -lists=(install/omarchy-base.packages) +lists=(install/omarchy-base.packages install/omarchy-aarch64.packages) packages=(omarchy omarchy-settings linux) forbidden_repos=('asahi*' omarchy-aarch64) forbidden_packages=("${mac_only[@]}") diff --git a/tools/package-resolution/platforms/qualcomm/platform b/tools/package-resolution/platforms/qualcomm/platform index 3270465632b..e2bb4fef60b 100644 --- a/tools/package-resolution/platforms/qualcomm/platform +++ b/tools/package-resolution/platforms/qualcomm/platform @@ -1,5 +1,5 @@ # Sourced by check. Lists are relative to the repository root. -lists=(install/omarchy-base.packages) +lists=(install/omarchy-base.packages install/omarchy-aarch64.packages install/omarchy-qualcomm.packages) packages=(omarchy omarchy-settings) forbidden_repos=('asahi*' omarchy-aarch64) forbidden_packages=("${mac_only[@]}") diff --git a/tools/release/lib/omacom.sh b/tools/release/lib/omacom.sh index d63a5eebe24..0d7e0b693c8 100644 --- a/tools/release/lib/omacom.sh +++ b/tools/release/lib/omacom.sh @@ -16,8 +16,9 @@ mac_arch=aarch64 channel_order=(edge rc stable) # Packages that decide what a Mac boots: VM acceptance boots a generic kernel # and cannot qualify them, so a promotion that moves one needs a record from -# a real Mac. The same rule as the fork lane's. -boot_package_pattern='^(linux-.+|m1n1.*|uboot-.+|asahi-fwextract|asahi-scripts|omarchy-apple-boot|omarchy-mac-boot|limine-mkinitcpio-hook|.+-dkms)$' +# a real Mac. The same rule as the fork lane's, plus omarchy-settings, whose +# mkinitcpio and Limine drop-ins ship on aarch64 too. +boot_package_pattern='^(linux-.+|m1n1.*|uboot-.+|asahi-fwextract|asahi-scripts|omarchy-apple-boot|omarchy-mac-boot|omarchy-settings|limine-mkinitcpio-hook|.+-dkms)$' sha256_of() { if command -v sha256sum >/dev/null; then