M3-family support: SoC detection, software rendering, M3 installer path, branch kernels - #343
staccDOTsol wants to merge 14 commits into
Conversation
…ection Reads the SoC id from the device tree (t8103..t6051) and maps it to m1..m4, prints the machine codename, and answers --gpu: whether the Asahi GPU driver is actually bound, which is the question the M3 generation raises today. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The M3 generation boots the public Asahi kernel but its GPU (G15) has no driver and its display is the firmware framebuffer. vulkan-asahi is now installed only when the driver is bound, and default/hypr/apple.lua turns on software-rendering settings (AQ_NO_MODIFIERS, software cursors, no direct scanout, vfr) whenever omarchy-hw-apple-soc --gpu says there is no driver, checked at every session start so a kernel that binds it turns them off. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The Asahi Alarm installer already knows every M3 device (expert mode, firmware 14.8.3) but its installer_data.json lists no image built against 14.8.3, so on an M3 it stops with 'Your system firmware is too old'. The Asahi developers' own instruction is to add 14.8.3 to supported_fw by hand (asahi-installer PR 424). This does that against the stock package and images, from macOS, in bash 3.2, and runs the stock data unchanged on M1/M2. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
M3 display support will be on a branch before it is in a tagged release, and Asahi Alarm follows tags. The PKGBUILD builds any branch of any fork with Asahi Alarm's kernel config and installs next to linux-asahi rather than over it, so a branch that does not boot costs one reboot. The branch is a build-time choice; omarchy-mac-kernel-wip drives it and refreshes GRUB. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
docs/apple-m3.md records where the public Asahi trees are for M3 (device trees and boot: yes; display driver and GPU: not in any public branch), what each piece of this repo does about it, how to install, and how to try a newer kernel. The README's step 1 gets its M3 variant and omarchy-mac-setup says what the machine will not do before asking to start. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Piped, BASH_SOURCE is empty and the guard never called main, so the script printed nothing. Same guard omarchy-mac-setup uses. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…as no M3 table Asahi Alarm's installer package (0.8.4) is an older asahi-installer build whose device table ends at M2, so on an M3 it exits with "This device is not supported yet!" before the firmware list is ever consulted, and before the expert-mode question, which the installer only asks when EXPERT is set. Fetch Asahi Alarm's package as before, check its main.py for the M3 rows, and when they are missing fetch Asahi's own package from cdn.asahilinux.org and run it against Asahi Alarm's image list and images. Set EXPERT=1 on an M3 so the question appears. Keep the 14.8.3 supported_fw patch, which the M3-aware installer still needs. Work beside a root-owned /tmp/asahi-install instead of failing to rename it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
omarchy-mac-kernel-wip runs on an installed system, so use omarchy-cmd-present. omarchy-mac-asahi-install still runs on macOS before those helpers exist, so allowlist it next to omarchy-mac-setup. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
malik-na
left a comment
There was a problem hiding this comment.
-
Set
AQ_NO_MODIFIERS=1before Hyprland starts (for example in the UWSM environment). Setting it fromapple.luahappens after Aquamarine initializes, so the M3 workaround may not apply. -
Do not promise that the released kernel is a safe GRUB fallback.
update-m1n1installs the WIP kernel’s DTBs into the sharedboot.bin, so both kernel entries can fail with incompatible DTBs. Add a real boot-image rollback path or document recovery viaboot.bin.old.
|
Can you look at this as well, @scottjones ? |
|
Reviewed the SoC detector here against #326, which adds a second one. Ran both on an M2 Max ( bug:
I should be honest about provenance: suggestion: The Both of your sysfs views fire, no false positive. Keying the software-rendering decisions off "is the driver bound" rather than "which generation is this" is the right abstraction — a generation table goes stale the day Asahi ships an M3 driver, the binding check never does, and The duplicationThere are now three device-tree detectors in flight:
Different filenames, so git will not stop any of them and we could land all three. My read is that this PR has the better shape and #326 has the better table: yours is env-stubbable ( Granularity is a real interface decision someone should make deliberately rather than by merge order — nit: One heads-up that is not stale, despite the commit name. - | rg -v '/omarchy-(cmd-|pkg-|upgrade-to-quattro|mac-setup$|system-...)'
+ | rg -v '/omarchy-(cmd-|pkg-|upgrade-to-quattro|mac-(setup|asahi-install)$|system-...)'#289 fails the same lint rule and I have asked it to delete its |
Bring the outbound M3 PR up to date with upstream quattro. Keep both the new Apple hardware leaves (Wi-Fi resume, video decode) and the M3 software- rendering leaf. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
|
Still blocked on the existing AQ_NO_MODIFIERS timing and boot.bin rollback points. Please also reconcile the SoC detector with #326 so we do not ship two overlapping interfaces or lose the t6032 mapping. |
Set AQ_NO_MODIFIERS in the UWSM environment before Aquamarine starts. Snapshot and restore m1n1/boot.bin instead of treating the released GRUB entry as a fallback. Reconcile omarchy-hw-apple-soc with omacom#326 (t6032, no unsourced M4 rows). Drop command -v from the macOS installer wrapper. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
extra published a newer hyprtoolkit than pkgs.omarchy.org/edge. The installer -Syu then skipped the explicit omarchy/ target as up to date and upgraded from extra, so the ARM install assertion failed. Ignore the selected stack on the sysupgrade half only. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
|
I prepared a focused follow-up for the It corrects the stale M3 briefing (webcam/video decoding are supported; sleep is unavailable), updates |
Keep both ARM helpers: sysupgrade --ignore for recovery/WIP paths and package_upgrade_args for installer/updater channel work. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
The quattro merge kept both helpers; exercise upgrade_args so a host pacman cannot silently change the selected stack in this fixture. Co-authored-by: Jarett Dunn <jarettrsdunn+git@gmail.com>
Summary
Makes Omarchy Mac installable and usable on M3, M3 Pro and M3 Max Macs on the public Asahi trees as they are today, and shaped so the day Asahi ships the M3 display driver and GPU driver nothing here needs a migration.
Where Asahi is (September 2026): the kernel Asahi Alarm ships (7.1.6) has device trees for every M3 machine, m1n1 1.6.1 boots them, and Asahi's own installer (0.9.x) lists them in expert mode against firmware 14.8.3. What is in no public tree: the M3 display driver wiring and any M3 GPU (G15) support in the kernel driver or Mesa. Asahi says an official M3 release is weeks away; the GPU is later.
bin/omarchy-hw-apple-soc— generation from the device tree (m1..m4), codename, and--gpu: whether the Asahi GPU driver is actually bound. Everything keys off that rather than a model list.vulkan.shinstallsvulkan-asahionly when the driver is bound;default/hypr/apple.lua(loaded fromenvs.luanext tonvidia.lua) setsAQ_NO_MODIFIERS, software cursors, no direct scanout and vfr, checked at every session start so a kernel that binds the driver turns them off by itself.install/hardware/apple/m3.shsays on the console what the machine will not do.bin/omarchy-mac-asahi-install— runs on macOS (bash 3.2). Two things stop the stock Asahi Alarm bootstrap on an M3. First, Asahi Alarm's installer package (0.8.4) is an older asahi-installer build whose device table ends at M2, so it exits with "This device is not supported yet!" before asking anything, and the expert-mode question only appears whenEXPERTis set. Second,installer_data.jsonlists no image against firmware 14.8.3 (Add M3, M3 Pro and M3 Max devices using macOS 14.8.3 OTA AsahiLinux/asahi-installer#424, Add llmman to Install > AI and Remove > AI #438). The wrapper fetches Asahi Alarm's package, checks its device table, and when M3 is missing fetches Asahi's own installer from cdn.asahilinux.org and runs it against Asahi Alarm's image list and images (the installer is data-driven; the package layout is identical). It adds"14.8.3"to everysupported_fw, setsEXPERT=1, briefs the user, and hands over. The day Asahi Alarm rebuilds its installer with the M3 table, the wrapper uses it with no change. On M1/M2 it runs the stock package and data unchanged.pkgbuilds/linux-asahi-wip+bin/omarchy-mac-kernel-wip— build any branch of any Asahi fork with Asahi Alarm's kernel config and install it alongsidelinux-asahi(GRUB lists both). The branch is a build-time choice, so the M3 display branch is a one-line change when it is public.docs/apple-m3.md, README step 1 M3 variant, manual note, and an M3 warning inomarchy-mac-setupbefore "Start?".Test plan
test/shell.d/apple-soc-test.sh— 15 cases against stubbed device trees and sysfstest/shell.d/apple-m3-test.sh— leaf wiring, vulkan gating, envs.lua, PKGBUILD parses and does not conflict, installer wrapper parses under bash 3.2, falls back to Asahi's package and enables the expert question,installer_knows_m3against an M2-only and an M3 table,patch_installer_dataagainst multi-line / one-line / already-present / empty / null lists, idempotent, target-name mappingtests/test-asahi-compatibility.shpasses🤖 Generated with Claude Code