Skip to the content.

Omarchy on the 2015 MacBook Pro

As of 2026-10-14. Omarchy-specific setup only; the hardware findings, kernel parameter reasons and sleep results are in hardware.md.

Install: Omarchy 4.0.4, linux-omarchy 7.2.5, Limine 12.8 booting a UKI, LUKS + btrfs (subvol=@), Hyprland on Wayland, Mesa 26.2.

Current setup

Setting Value Where
GPU driver radeon.si_support=0 amdgpu.si_support=1 /etc/default/limine
amdgpu video blocks off amdgpu.ip_block_mask=0x7f /etc/default/limine
amdgpu deep-sleep fix patched amdgpu.ko (reset at load) /usr/lib/modules/7.2.5-3-omarchy/updates/; built for that kernel only, see Patched amdgpu module
Kernel-update guard pacman hook + boot check + notification kernel/amdgpu-module/guard/
IOMMU off, NVMe APST off intel_iommu=off nvme_core.default_ps_max_latency_us=0 /etc/limine-entry-tool.d/hardware-quirks.conf
Sleep mode mem_sleep_default=deep /etc/limine-entry-tool.d/hardware-quirks.conf
Lid close suspend-then-hibernate, hibernate after 2 h /etc/systemd/logind.conf.d/30-lid-suspend-then-hibernate.conf, /etc/systemd/sleep.conf.d/suspend-then-hibernate.conf
Bluetooth fix btusb option + udev rule + bt-check.service bluetooth/bt-fix.sh
Wi-Fi sleep hook unloads brcmfmac before deep sleep and hibernate /usr/lib/systemd/system-sleep/brcmfmac, from wifi/brcmfmac-sleep
Fans no daemon (SMC automatic) —

Decision (2026-10-14): stay on amdgpu for Vulkan and a working Chromium. With the patched module, deep sleep works at about 0.46 W (about 9 days on a full battery) instead of s2idle at about 22 W. A kernel update brings back the stock module, which hangs on resume from deep sleep. The guard (see Patched amdgpu module) then falls back to s2idle for that boot and shows a notification; rebuild the module and reboot.

Boot options

Kernel parameters go in /etc/default/limine or a drop-in under /etc/limine-entry-tool.d/. Run sudo limine-update and reboot. Don’t edit the files owned by the omarchy-settings package, because updates overwrite them.

File Owner Contents
/etc/default/limine you ESP_PATH, base cmdline (LUKS, btrfs, zswap.enabled=0), GPU driver + ip_block_mask
limine-entry-tool.d/hardware-quirks.conf you Mac workarounds + mem_sleep_default
limine-entry-tool.d/resume.conf Omarchy install resume=/dev/mapper/root resume_offset=1941580
limine-entry-tool.d/omarchy-defaults.conf omarchy-settings quiet splash …, initramfs_async=0 (works around a kernel 7.1 race that breaks the themed LUKS prompt), boot order, snapshot entries
limine-entry-tool.d/omarchy-uki.conf omarchy-settings ENABLE_UKI=yes (overrides ENABLE_UKI=no in /etc/limine-entry-tool.conf)
sudo limine-update                                    # rebuilds /boot/EFI/Linux/omarchy_linux-omarchy.efi + /boot/limine.conf
sudo grep -c 'mem_sleep_default' /boot/limine.conf    # /boot is root-only
cat /proc/cmdline                                     # after reboot

Sleep, lid and power

GPU / apps

Patched amdgpu module

The patch and the reason for it are in hardware.md. Build only amdgpu.ko for the installed linux-omarchy and install it as an override. The build needs the same source as the installed kernel: the kernel.org release plus linux-omarchy’s own patches.

  1. Install the headers: sudo pacman -S linux-omarchy-headers.
  2. Download the kernel.org tarball for the version in pacman -Q linux-omarchy (for example linux-7.2.5.tar.xz), and unpack it.
  3. Download the linux-omarchy patches from omacom-io/omarchy-pkgs (pkgbuilds/linux-omarchy/), from the commit that matches the installed package release.
  4. Apply them in their numbered order: for p in /path/to/patches/*.patch; do patch -Np1 < "$p"; done.
  5. Apply the fix: patch -p1 < kernel/amdgpu-si-reset-on-init.patch.
  6. Build the module: bash kernel/amdgpu-module/build.sh /path/to/linux-7.2.5. This takes about 7 minutes.
  7. Install it: sudo bash kernel/amdgpu-module/install.sh. This also rebuilds the initramfs and UKI.
  8. Reboot, then check the log: journalctl -k -b | grep -E 'PCI CONFIG reset|GPU posting|VRAM:' must show VRAM at 0x000000F400000000.

The module is unsigned, so loading it taints the kernel. That’s harmless here, because the kernel doesn’t enforce module signatures.

Kernel updates: the module only matches the kernel it was built for.

The guard in kernel/amdgpu-module/guard/ handles the switch (sudo bash kernel/amdgpu-module/guard/install.sh):

So a kernel update is:

  1. Update and reboot. You get the notification, and the system runs on s2idle.
  2. Rebuild and install the module for the new version (steps 2–8 above), then reboot. Deep sleep and suspend-then-hibernate are back.

To test the fallback without an update: sudo amdgpu-override-check --force, then systemctl --user start amdgpu-override-notify.service. A reboot undoes it.

Without the guard, switch to s2idle by hand before updating (sudo sed -i 's/mem_sleep_default=deep/mem_sleep_default=s2idle/' /etc/limine-entry-tool.d/hardware-quirks.conf && sudo limine-update), keep the lid closed for less than HibernateDelaySec, and switch back after rebuilding.

Once the fix is in linux-omarchy (accepted upstream on 2026-10-15; see hardware.md), no new kernel series is needed. A normal update brings it in:

  1. Update and reboot. The guard falls back to s2idle and shows its notification, as for any kernel update.
  2. Check that the stock module has the fix: journalctl -k -b | grep -E 'PCI CONFIG reset|GPU posting now|VRAM: ' must show the reset, the post and VRAM: 2048M 0x000000F400000000. If VRAM is at 0x0000000000000000, the fix isn’t in this kernel yet: rebuild the patched module instead.
  3. Remove the patched module: sudo bash kernel/amdgpu-module/install.sh remove.
  4. Remove the guard: sudo bash kernel/amdgpu-module/guard/install.sh remove.
  5. Reboot. mem_sleep_default=deep is still in the boot options, and the guard’s fallback was only under /run.
  6. Test with sudo rtcwake -m mem -s 20 a few times, then lid close and suspend-then-hibernate.

Keep amdgpu.ip_block_mask=0x7f and the Wi-Fi sleep hook: they fix other problems.

Fallback: radeon + deep sleep

sudo sed -i 's/radeon.si_support=0 amdgpu.si_support=1 amdgpu.ip_block_mask=0x7f/radeon.si_support=1 amdgpu.si_support=0/' /etc/default/limine
sudo sed -i '/mem_sleep_default=s2idle/d' /etc/limine-entry-tool.d/hardware-quirks.conf
sudo limine-update   # then reboot and test: sudo rtcwake -m mem -s 20

You lose Vulkan, and the Chromium artifacts seen on radeon here are unexplained. Waking takes about 20 s unless you build linux-omarchy with the MTRR patch (not done; kernel/build-kernel-ubuntu.sh is Ubuntu-only, but kernel/mtrr-resume.patch can go into a linux-omarchy PKGBUILD).

Open items