Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-998GitHub issuePublicDecided· Out of scope

Hibernate restore hangs on iMac17,1 (amdgpu Bonaire/CIK), and every Limine entry carries resume= — no bootable menu entry left after a failed resume

Reported by madakas · filed Sep 3, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Hibernate restore hangs on iMac17,1 (amdgpu Bonaire/CIK), and every Limine entry carries resume= — no bootable menu entry left after a failed resumerevision 1 · captured 2026-09-28 21:24 UTC via poll

What happened

Fresh Omarchy 4.0.1 install (Btrfs + LUKS, Limine/UKI) on an Apple iMac17,1. The installer configured hibernation automatically (swapfile, resume hook, resume=/dev/mapper/root resume_offset=… on the cmdline), and the setup itself was correct — earlier boots logged PM: Image not found (code -22), i.e. the kernel probed exactly the configured location and moved on.

First actual use of the Hibernate menu entry wrote a valid image and powered off. From then on the machine appeared dead: every boot showed a black screen immediately after the LUKS passphrase. No journal lines exist for any of these attempts. Adding nomodeset while keeping resume= changed nothing.

Mechanism

Omarchy's initramfs is udev-based with the resume hook running right after encrypt. So directly after the passphrase, the kernel found the valid image and jumped into the restored pre-hibernate kernel. That kernel then hung re-initializing the GPU — a Radeon R9 M380 Mac Edition (Bonaire, GCN 2 "CIK", amdgpu), a generation whose S4 restore is long known to be unreliable, particularly in the Apple variants.

Two properties turn this hardware quirk into an apparent brick:

  • The image persists until something rewrites the swap signature, so every boot retries the same doomed restore.
  • nomodeset (the natural first rescue attempt) is powerless: it only configures the freshly booted kernel, but the hang happens inside the restored kernel, which already has amdgpu loaded. Together with quiet splash loglevel=0, the user sees nothing at all.

Recovery required knowing to edit the Limine entry and delete resume=/resume_offset=; the system then booted normally and re-activating the swapfile invalidated the stale image.

Why file this against Omarchy

The amdgpu/CIK restore hang itself is a kernel problem, not Omarchy's. But two things in Omarchy's sphere decide whether this ends as "hibernate didn't work" or as "my machine is bricked":

  1. Hibernation is enabled by default at install and exposed as a one-click menu entry, including on hardware classes where restore is known-shaky. This failure class is already represented here across drivers: #10039 (NVIDIA), #8352 (hybrid Intel+NVIDIA), #7848 (nouveau on MacBookPro11,3).
  2. There is no stock recovery path. The default entry, the fallback entry, and every snapshot entry all carry resume=, so once a restore hangs there is no bootable choice left in the menu. (Related config asymmetry: #10037.)

Suggested fix — make hibernation safe to keep, not remove it

This is deliberately not a request to gate or disable hibernation on Macs. Hibernation is a great default; what needs fixing is the cost of a failed restore, which today is an apparently bricked machine and should be one lost session.

  1. A generated rescue entry. Emit one additional Limine entry, identical to the default but without resume=/resume_offset= — e.g. "Omarchy (skip hibernation image)". One entry in the limine-entry-tool config makes the entire failure class — any GPU that cannot survive S4 restore, across #10039 / #8352 / #7848 and this report — self-recoverable from the boot menu with zero cmdline knowledge. Once booted, swap activation rewrites the swap signature, so the stale image clears itself and the next hibernate is a fresh attempt. With that entry in place, hibernation can safely stay enabled by default everywhere: worst case becomes "pick the second menu entry, lose the session", not "machine appears dead".
  1. A one-line manual note closing the loop: "Black screen right after the LUKS passphrase, following a hibernate → choose the skip-hibernation-image entry; the stale image is cleared automatically once the system is up."
  1. (Optional, longer-term) a per-hardware quirk lane so machines like this one can eventually hibernate successfully rather than merely recover. For Bonaire/CIK the candidate is booting with radeon.cik_support=1 amdgpu.cik_support=0 — the older radeon driver's S4 path is far more exercised on this generation. I have not verified this on my machine (it stays flagged as an experiment, and I'm happy to test and report back if useful); the point is that install/hardware/ already exists as the natural home for such known-hardware cmdline quirks, and the rescue entry from (1) is exactly what makes that kind of experimentation safe for users.

Evidence

Last journal line of the pre-incident boot (Sep 3 20:47:13):

systemd-sleep[3154049]: Performing sleep operation 'hibernate'...
kernel: PM: hibernation: hibernation entry

journalctl --list-boots shows zero boots between the hibernate and the successful recovery boot 63 minutes later — the failed attempts died in the initramfs before logging starts. Earlier boot proving the resume config was read and valid:

kernel: Kernel command line: … resume=/dev/mapper/root resume_offset=1901397 …
kernel: PM: Image not found (code -22)

Side casualty worth knowing about for other Mac users: the failed restore + hard power-offs left the SMC wedged (applesmc: #KEY: read data[0] fail on every read), fans at failsafe full speed until an SMC reset (power cord out ~20 s).

System

Omarchy4.0.1-1
Kernel7.1.9-arch1-2
HardwareApple iMac17,1 (27" Retina 5K, Late 2015), firmware 170.0.0.0.0
CPU / RAMIntel Core i5-6500 / 32 GB
GPUAMD Radeon R9 M380 Mac Edition — Bonaire/CIK [1002:6640], subsystem [106b:014b], driver amdgpu
RootBtrfs on LUKS, Limine 12.6.0-1 + UKI, limine-mkinitcpio-hook 1.37.1-1, limine-snapper-sync 1.31.0-1
Swap31.2 GB Btrfs swapfile (pri 0) + zram (pri 100), zswap.enabled=0

Full omarchy-debug log available on request.

Filed by Claude Fable 5 via Claude Code.

View raw text
## What happened

Fresh Omarchy 4.0.1 install (Btrfs + LUKS, Limine/UKI) on an Apple iMac17,1. The installer configured hibernation automatically (swapfile, `resume` hook, `resume=/dev/mapper/root resume_offset=…` on the cmdline), and the setup itself was **correct** — earlier boots logged `PM: Image not found (code -22)`, i.e. the kernel probed exactly the configured location and moved on.

First actual use of the Hibernate menu entry wrote a valid image and powered off. From then on the machine appeared dead: every boot showed a black screen immediately after the LUKS passphrase. No journal lines exist for any of these attempts. Adding `nomodeset` while keeping `resume=` changed nothing.

## Mechanism

Omarchy's initramfs is udev-based with the `resume` hook running right after `encrypt`. So directly after the passphrase, the kernel found the valid image and jumped into the restored pre-hibernate kernel. That kernel then hung re-initializing the GPU — a Radeon R9 M380 Mac Edition (Bonaire, GCN 2 "CIK", `amdgpu`), a generation whose S4 restore is long known to be unreliable, particularly in the Apple variants.

Two properties turn this hardware quirk into an apparent brick:

- The image persists until something rewrites the swap signature, so **every** boot retries the same doomed restore.
- `nomodeset` (the natural first rescue attempt) is powerless: it only configures the freshly booted kernel, but the hang happens inside the *restored* kernel, which already has `amdgpu` loaded. Together with `quiet splash loglevel=0`, the user sees nothing at all.

Recovery required knowing to edit the Limine entry and delete `resume=`/`resume_offset=`; the system then booted normally and re-activating the swapfile invalidated the stale image.

## Why file this against Omarchy

The amdgpu/CIK restore hang itself is a kernel problem, not Omarchy's. But two things in Omarchy's sphere decide whether this ends as "hibernate didn't work" or as "my machine is bricked":

1. Hibernation is enabled by default at install and exposed as a one-click menu entry, including on hardware classes where restore is known-shaky. This failure class is already represented here across drivers: #10039 (NVIDIA), #8352 (hybrid Intel+NVIDIA), #7848 (nouveau on MacBookPro11,3).
2. **There is no stock recovery path.** The default entry, the fallback entry, and every snapshot entry all carry `resume=`, so once a restore hangs there is no bootable choice left in the menu. (Related config asymmetry: #10037.)

## Suggested fix — make hibernation safe to keep, not remove it

This is deliberately **not** a request to gate or disable hibernation on Macs. Hibernation is a great default; what needs fixing is the *cost of a failed restore*, which today is an apparently bricked machine and should be one lost session.

1. **A generated rescue entry.** Emit one additional Limine entry, identical to the default but without `resume=`/`resume_offset=` — e.g. *"Omarchy (skip hibernation image)"*. One entry in the limine-entry-tool config makes the entire failure class — any GPU that cannot survive S4 restore, across #10039 / #8352 / #7848 and this report — self-recoverable from the boot menu with zero cmdline knowledge. Once booted, swap activation rewrites the swap signature, so the stale image clears itself and the *next* hibernate is a fresh attempt. With that entry in place, hibernation can safely stay enabled by default everywhere: worst case becomes "pick the second menu entry, lose the session", not "machine appears dead".

2. **A one-line manual note** closing the loop: "Black screen right after the LUKS passphrase, following a hibernate → choose the skip-hibernation-image entry; the stale image is cleared automatically once the system is up."

3. **(Optional, longer-term) a per-hardware quirk lane** so machines like this one can eventually hibernate successfully rather than merely recover. For Bonaire/CIK the candidate is booting with `radeon.cik_support=1 amdgpu.cik_support=0` — the older `radeon` driver's S4 path is far more exercised on this generation. I have **not** verified this on my machine (it stays flagged as an experiment, and I'm happy to test and report back if useful); the point is that `install/hardware/` already exists as the natural home for such known-hardware cmdline quirks, and the rescue entry from (1) is exactly what makes that kind of experimentation safe for users.

## Evidence

Last journal line of the pre-incident boot (Sep 3 20:47:13):

```
systemd-sleep[3154049]: Performing sleep operation 'hibernate'...
kernel: PM: hibernation: hibernation entry
```

`journalctl --list-boots` shows zero boots between the hibernate and the successful recovery boot 63 minutes later — the failed attempts died in the initramfs before logging starts. Earlier boot proving the resume config was read and valid:

```
kernel: Kernel command line: … resume=/dev/mapper/root resume_offset=1901397 …
kernel: PM: Image not found (code -22)
```

Side casualty worth knowing about for other Mac users: the failed restore + hard power-offs left the SMC wedged (`applesmc: #KEY: read data[0] fail` on every read), fans at failsafe full speed until an SMC reset (power cord out ~20 s).

## System

|  |  |
|---|---|
| Omarchy | 4.0.1-1 |
| Kernel | 7.1.9-arch1-2 |
| Hardware | Apple iMac17,1 (27" Retina 5K, Late 2015), firmware 170.0.0.0.0 |
| CPU / RAM | Intel Core i5-6500 / 32 GB |
| GPU | AMD Radeon R9 M380 Mac Edition — Bonaire/CIK `[1002:6640]`, subsystem `[106b:014b]`, driver `amdgpu` |
| Root | Btrfs on LUKS, Limine 12.6.0-1 + UKI, limine-mkinitcpio-hook 1.37.1-1, limine-snapper-sync 1.31.0-1 |
| Swap | 31.2 GB Btrfs swapfile (pri 0) + zram (pri 100), `zswap.enabled=0` |

Full `omarchy-debug` log available on request.

Filed by Claude Fable 5 via Claude Code.

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 10:46 UTC