MX Mac Manual
Channels and updates
A channel decides two things: which signed image a new install writes, and which kernel an installed Mac follows. Macs are offered two, stable and rc.
| Channel | What a new install gets today | Who it is for |
|---|---|---|
stable |
os-v4.0.4-mac.1.20260924-rc, the Aurora kernel on the stable lane |
Daily drivers |
rc |
os-v4.0.4-mac.1.20260924-rc, the Aurora kernel on the release-candidate pin |
Macs that should take new Aurora kernels first |
Both channels write the same image and differ only in the kernel lane the Mac follows afterwards. Since 2026-09-24 that image is os-v4.0.4-mac.1.20260924-rc, and it admits the 22 M1 and M2 models the earlier Asahi image did; only the 14-inch M1 Pro (apple,j314s) and the 16-inch M2 Max (apple,j416c) are qualified on hardware. The installer refuses any other model, including every M3 and M4, before touching the disk. The previous images, os-v4.0.3-mac.5.20260923-rc (two models) and the Asahi os-v4.0.3-mac.1.20260913, are kept for rollback but are no longer offered.
Kernels
The default kernel is linux-aurora, built here from aurora-silicon/linux. It builds on the Asahi Linux kernel and adds DisplayPort alt-mode and USB4 external monitors, variable refresh rate, the camera signal processor and the always-on processor; see Hardware support. Macs installed from the earlier Asahi stable image still run linux-asahi, which comes from the Asahi Linux project through the [asahi-alarm] repository.
An installed Mac is therefore in one of three states, and the updater refuses any other combination:
| Channel | Kernel | Meaning |
|---|---|---|
stable |
linux-asahi |
A legacy Asahi Mac, installed from the stable image before 2026-09-23 |
stable |
linux-aurora |
An Aurora Mac on the stable lane, which carries rc's hardware-qualified kernel; includes new Stable installs |
rc |
linux-aurora |
An Aurora Mac on the release-candidate pin |
New installs on both channels get Aurora. What remains is migrating the legacy Asahi Macs and retiring the Asahi kernel; they are migrated rather than stranded. Until that finishes, "stable" describes a channel, not a single kernel.
There is a third Aurora lane, edge, which floats on the upstream branch head. It is for lab Macs. The installer does not offer it and omarchy-channel-set refuses it on a Mac.
Picking a channel
The installer opens on Stable at every launch. To install on rc, choose it in the Release Channel menu before the download starts; the choice lasts until the app quits.
Choose at install time, because the kernel family stays. A Mac installed on the Asahi kernel stays on it, and the switch command refuses: moving between kernel families is not available. A Mac on the Aurora kernel can move between the Aurora lanes, stable and rc, with the ordinary Omarchy command, which records the request, takes the update lock and runs an update that moves the kernel and proves it boots:
omarchy-channel-set rc
The Mac's own record lives in /var/lib/omarchy/apple-silicon-channel, and the installed kernel is named in /usr/share/omarchy/apple-silicon-kernel. A lane switch is a request until an update has proven the new kernel boots; only then is it recorded as done.
How an update arrives
omarchy update behaves as it does on x86, with three Apple-specific steps in front:
- Runtime bundle.
omarchy-update-asahi-bundlereads the runtime channel pointer, verifies the release descriptor, the six-package manifest, the checksums and the signatures, then installsomarchy-keyring,omarchy-settings-dev,omarchy-dev,omarchy-nvim,quickshell-gitandttf-jetbrains-mono-nerd-basicas one transaction. It refuses to downgrade any of them, with one exception: a package the retired[omarchy-aarch64]repository built, proven by its name, version and build date in that repository's sync database. - Legacy repository cleanup. On a Mac that came from the omarchy-mac project,
omarchy-update-asahi-legacy-repositoryremoves its unsigned[omarchy-aarch64]repository from/etc/pacman.conf(backup under/var/lib/omarchy/backups/), keeps[omarchy]ahead of what that repository shadowed, and replacesobsidian-appimageandhyprland-preview-share-picker-gitwith the[omarchy]packages. It also replaces those two packages where they came from elsewhere, such as the AUR. Once no pacman configuration file lists the repository, it takes that repository's leftover sync files out of/var/lib/pacman/sync/. Signatures and file lists are deleted. The database moves to/var/lib/omarchy/retired-repositories/, where the bundle step still reads it, while an installed package still has a build from it (same name, version and build date), and is deleted once none does. When that cannot be decided (an unreadable database or local package entry), or an earlier kept copy that differs still proves a package, the database stays. On a Mac with none of the repository, those packages or those files it does nothing. A step that cannot finish keeps the section, the legacy package or the database in place and the next update tries again; the update carries on either way. - Package repository.
omarchy-update-asahi-repositorypoints[omarchy]at the current promoted package channel. Rollbacks of the package or release sequence are refused. - Everything else comes from the live Arch Linux ARM and Asahi mirrors, as upstream.
A snapper snapshot is taken before the package sync. snapper list shows it. On a lab Mac with /var/lib/omarchy/snapshot-restore.enabled, omarchy-snapshot restore <number> reboots into a writable clone of a snapshot.
When a new kernel is installed the updater rebuilds the initramfs, refreshes m1n1 and the device trees, runs the boot check and offers a reboot.
What is signed, and by what
| Artefact | Key |
|---|---|
Packages in [omarchy] |
The ARM repository signing subkey |
| Runtime bundle and release descriptors | The Omarchy MX Mac release key, 5983B1CA…5959 |
| Channel catalogs read by the installer | One Ed25519 key that never leaves the owner's Keychain |
Installer app and .pkg |
Apple Developer ID T2C384FJBD, notarized |
Only four keys on the download host are ever rewritten: each channel's catalog.signed.json and channel.json, and each channel's installer .pkg and installer.json. Everything under releases/ is immutable and held by a bucket lock.