Additional tweaks and configurations for running Omarchy on a MacBook with T2 chip — beyond what Omarchy ships out of the box.
Warning — Suspend/Wake is broken. T2 Macs only support
s2idle(no S3 deep sleep). Waking from suspend frequently results in a black screen with an unresponsive keyboard, requiring a hard reboot. This is a known issue with no reliable fix — see Open Issues for details. If you rely on suspend, be aware that you may lose unsaved work.
Omarchy's installer auto-detects T2 hardware and handles the basics:
- T2 kernel (
linux-t2) + headers apple-bcedriver (keyboard, trackpad, storage)- WiFi/Bluetooth firmware (
apple-bcm-firmware) + Bluetooth driver (hci_bcm4377) - Audio routing (
apple-t2-audio-config) - Fan daemon (
t2fanrd) with default config - Boot parameters (
intel_iommu=on iommu=pt pcie_ports=compat) - Kernel module configs (initramfs, modprobe, modules-load)
- F-key behavior (
hid_apple fnmode=2) - USB autosuspend disable
Install Omarchy first, then run this setup for the extras.
git clone https://github.com/fedesapuppo/t2-mac-customizations.git
cd t2-mac-customizations
bash setup.shThe setup script walks you through every step interactively — it explains what each component does, asks before installing anything, and lets you skip what you don't need. Safe to re-run.
Omarchy installs t2fanrd with its default config. This repo provides a custom fan curve optimized for the MacBook Air.
etc/t2fand.conf— linear fan curve from 55°C to 75°C. Fans stay off below 55°C and ramp linearly to full speed at 75°C.
Automatically switches to performance on AC and power-saver on battery. Also plays plug/unplug sounds. Without this, the system stays on whatever profile was last set manually.
usr/local/bin/power-config.sh— main script (profile switch + sound)etc/udev/rules.d/95-power-config.rules— udev rule triggers script on power supply changeetc/systemd/system/power-profile-boot.service— systemd service sets correct profile at boot
etc/udev/rules.d/99-wifi-powersave.rules— toggles WiFi power save based on AC state: enabled on battery, disabled on AC. Update the username in the path before using.usr/lib/systemd/system-sleep/wifi-resume— reloadsbrcmfmacafter resume. The Broadcom driver loses its connection state through suspend on T2 Macs.
The T2 MacBook Air has 512 brightness levels for keyboard backlight (apple::kbd_backlight). Omarchy's default script steps by 1 unit (~0.2% — invisible).
usr/local/bin/omarchy-brightness-keyboard— replacement script that steps by 10% of max brightness
Copy to ~/.local/share/omarchy/bin/omarchy-brightness-keyboard to override the default. Change the divisor from 10 to 20 for 5% steps if 10% feels too coarse.
Omarchy does not ship with a screen reader. For accessibility, you need to install Orca separately (sudo pacman -S orca). Orca's default TTS engine is espeak-ng, which produces a robotic, hard-to-understand voice. I replaced it with Piper, a fast neural TTS engine that produces a natural human voice — a much better experience for extended use.
Note: The
piper-ttsAUR package currently fails to build due to an espeak-ng phoneme compilation bug. The setup script downloads the prebuilt binary from GitHub releases instead.
orca— install withsudo pacman -S orcaspeech-dispatcher(comes with orca)- Internet connection (for initial download of piper binary + voice model)
bash usr/local/bin/setup-orca-piper.shThe script:
- Downloads the piper binary to
~/.local/bin/piper-tts - Downloads shared libraries to
~/.local/share/piper-tts/lib/ - Downloads the
en_US-lessac-mediumvoice model to~/.local/share/piper-tts/voices/ - Configures speech-dispatcher to use piper as the default module (requires sudo)
- Restarts speech-dispatcher and plays a test sentence
After setup, Orca will automatically use the natural piper voice. Test manually with:
spd-say -o piper-tts "hello world"Press F3 to start Orca, press F3 again to quit it. The setup script adds this binding to Hyprland automatically. To add it manually, append to ~/.config/hypr/bindings.conf:
bindd = , F3, Toggle Orca screen reader, exec, omarchy-toggle-orca
usr/local/bin/setup-orca-piper.sh— setup script (idempotent, safe to re-run)usr/local/bin/omarchy-toggle-orca— toggle script: starts Orca if not running, quits it if runningetc/speech-dispatcher/modules/piper-tts.conf— speech-dispatcher module config (reference — the setup script generates a user-specific version with resolved paths)
Sources:
| Feature | Status |
|---|---|
| Custom fan curve | Done |
WiFi resume hook (reload brcmfmac after suspend) |
Done |
| Keyboard backlight 10% step size | Done |
| Auto power profile (performance/power-saver) | Done |
| Natural voice screen reader (Orca + Piper TTS) | Done |
| Suspend/wake black screen fix | Not solved (open issue) |
This is the big unsolved issue. After suspending via s2idle (the only option — T2 Macs lack ACPI S3 deep sleep), waking results in a black screen with unresponsive keyboard. Hard reboot is the only recovery.
Why it's broken (multiple layers):
- The
apple-bcedriver cannot cleanly suspend/resume. This reverse-engineered driver (keyboard, trackpad, internal USB/PCIe) does not handle power state transitions properly. Suspend works fine whenapple-bceis not loaded — the driver itself is the primary culprit. s2idleis inherently fragile. Unlike S3 (where hardware manages power-down),s2idlerequires every driver to correctly freeze and thaw. One misbehaving driver breaks the entire chain.- macOS Sonoma firmware regression. A T2 firmware update bundled with Sonoma made suspend worse, even for users who previously had it partially working. The T2 firmware is only updatable through macOS and Apple controls it.
- The T2 chip is a black box. Apple has never published documentation for its power management interface. Proper suspend/resume would require understanding undocumented firmware-level transitions.
Known workaround (partial): The t2linux wiki documents a systemd service that force-unloads apple-bce before suspend and reloads it after wake. This helps some users but results in ~30 second resume times and does not work reliably across suspend cycles.
Honest prognosis: This is unlikely to be fully fixed. The T2 chip is undocumented, Apple has moved on to Apple Silicon, the apple-bce driver has no upstream maintainer investing in power management, and the developer pool working on T2 Linux is small and shrinking. The most practical alternatives are hibernate (suspend-to-disk) or simply locking the screen on lid close instead of suspending.
References: