Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
ThinkPad X1 Carbon Gen 14: lid s2idle never wakes; hibernate reboots; lid-open leaves panel dark
Reported by heredia21 · filed Sep 4, 2026 · open at source
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
System details
Lenovo ThinkPad X1 Carbon Gen 14 (21V7CTO1WW), Intel Core Ultra 7 365 (Panther Lake), Intel Graphics, firmware N4OET49W (1.12), Omarchy 4.0.2-1, Hyprland 0.56.2, kernel 7.1.9-arch1-2. Sleep mode is s2idle only (/sys/power/mem_sleep is [s2idle]). Swap is a 30.8G btrfs swapfile (resume=/dev/mapper/root resume_offset=1915076) plus zram0 at priority 100.
What's wrong?
On this machine, stock lid-close sleep is not recoverable. Related reports (#10170, #9628, #9378, #9753) describe pieces of this, but not this model or the hibernate/zram reboot.
1. s2idle on lid close does not come back when the lid opens
- Kernel:
ACPI: button: The lid device is not compliant to SW_LID. /proc/acpi/wakeuplistsLIDas S4 only.SLPBis S3. There is no S0/s2idle lid wake.- Closing the lid with no external display: logind logs
Lid closed/Suspending...andPM: suspend entry (s2idle). - Opening the lid often produces no
Lid opened/suspend exit. The machine stays dark until a long power hold (hard reboot). - When a resume does happen (one 6h sleep this morning), journald hit a watchdog on thaw (
systemd-journald.service: Watchdog timeout) and the panel path is the same hole as #10170: lock screen blanks withomarchy-brightness-display off, and lid-open only runsomarchy-hyprland-monitor-clamshell, which never DPMS-enables eDP-1 when no external monitor is connected.
2. Hibernate is not a fallback — it reboots into a cold login
systemctl hibernate is allowed (CanHibernate=yes). After hibernate + lid open, the next boot is a full SDDM + user login, not a resume. Clear Stale Hibernate Storage Info skipped (HibernateLocation EFI var missing). zram0 is prio 100 vs the resume swapfile at prio 0, so hibernate can land on zram, which is gone after power-off.
3. Stock lid-open cannot light the panel even when the kernel did resume
Defaults:
o.bind("switch:on:Lid Switch", nil, "omarchy-system-lid-close", { locked = true })
o.bind("switch:off:Lid Switch", nil, "omarchy-hyprland-monitor-clamshell", { locked = true })omarchy-system-wake (dpms/backlight on, then clamshell) is never used on lid-open. Same as #10170 / #9628. Power key is ignored (10-ignore-power-button.conf), so a dark-but-alive resume looks like a hang.
Steps
- X1 Carbon Gen 14, no HDMI/USB-C display.
- Close the lid (stock Omarchy: lock + logind
HandleLidSwitch=suspend). - Open the lid.
- Observe: no wake, or wake with a black panel, or (if hibernate was used) a cold boot.
Expected
Lid close locks and sleeps. Lid open resumes, lights eDP-1, shows the lock screen in the same session.
Journal excerpts
kernel: ACPI: button: The lid device is not compliant to SW_LID.
kernel: PM: suspend entry (s2idle)
# often no matching suspend exit until a forced power cycle
# on a successful thaw:
systemd[1]: systemd-journald.service: Watchdog timeout (limit 3min)!
systemd[1]: systemd-journald.service: Failed with result 'watchdog'.
kernel: PM: suspend exit/proc/acpi/wakeup (relevant rows):
SLPB S3 *enabled platform:PNP0C0E:00
LID S4 *enabled platform:PNP0C0D:00Suggested direction
- Use
omarchy-system-wakeonswitch:off:Lid Switch(superset of clamshell reconcile; fixes the dark-panel case in #10170). - Do not treat hibernate as available while zram outranks the resume swapfile; document or force hibernate onto the swapfile.
- For s2idle-only + SW_LID-broken lids: do not rely on logind suspend-on-lid with no working wake source. Lock + DPMS off (and a real wake on lid-open) is safer than a bag full of s2idle that never returns.
Happy to attach omarchy-debug output or retest a patch.
View raw text
### System details
Lenovo ThinkPad X1 Carbon Gen 14 (21V7CTO1WW), Intel Core Ultra 7 365 (Panther Lake), Intel Graphics, firmware N4OET49W (1.12), Omarchy 4.0.2-1, Hyprland 0.56.2, kernel 7.1.9-arch1-2. Sleep mode is **s2idle only** (`/sys/power/mem_sleep` is `[s2idle]`). Swap is a 30.8G btrfs swapfile (`resume=/dev/mapper/root resume_offset=1915076`) **plus** zram0 at priority 100.
### What's wrong?
On this machine, stock lid-close sleep is not recoverable. Related reports (#10170, #9628, #9378, #9753) describe pieces of this, but not this model or the hibernate/zram reboot.
**1. s2idle on lid close does not come back when the lid opens**
- Kernel: `ACPI: button: The lid device is not compliant to SW_LID.`
- `/proc/acpi/wakeup` lists `LID` as **S4** only. `SLPB` is S3. There is no S0/s2idle lid wake.
- Closing the lid with no external display: logind logs `Lid closed` / `Suspending...` and `PM: suspend entry (s2idle)`.
- Opening the lid often produces **no** `Lid opened` / `suspend exit`. The machine stays dark until a long power hold (hard reboot).
- When a resume *does* happen (one 6h sleep this morning), journald hit a watchdog on thaw (`systemd-journald.service: Watchdog timeout`) and the panel path is the same hole as #10170: lock screen blanks with `omarchy-brightness-display off`, and lid-open only runs `omarchy-hyprland-monitor-clamshell`, which never DPMS-enables eDP-1 when no external monitor is connected.
**2. Hibernate is not a fallback — it reboots into a cold login**
`systemctl hibernate` is allowed (`CanHibernate=yes`). After hibernate + lid open, the next boot is a **full SDDM + user login**, not a resume. `Clear Stale Hibernate Storage Info` skipped (`HibernateLocation` EFI var missing). zram0 is **prio 100** vs the resume swapfile at **prio 0**, so hibernate can land on zram, which is gone after power-off.
**3. Stock lid-open cannot light the panel even when the kernel did resume**
Defaults:
```lua
o.bind("switch:on:Lid Switch", nil, "omarchy-system-lid-close", { locked = true })
o.bind("switch:off:Lid Switch", nil, "omarchy-hyprland-monitor-clamshell", { locked = true })
```
`omarchy-system-wake` (dpms/backlight on, then clamshell) is never used on lid-open. Same as #10170 / #9628. Power key is ignored (`10-ignore-power-button.conf`), so a dark-but-alive resume looks like a hang.
### Steps
1. X1 Carbon Gen 14, no HDMI/USB-C display.
2. Close the lid (stock Omarchy: lock + logind `HandleLidSwitch=suspend`).
3. Open the lid.
4. Observe: no wake, or wake with a black panel, or (if hibernate was used) a cold boot.
### Expected
Lid close locks and sleeps. Lid open resumes, lights eDP-1, shows the lock screen in the same session.
### Journal excerpts
```
kernel: ACPI: button: The lid device is not compliant to SW_LID.
kernel: PM: suspend entry (s2idle)
# often no matching suspend exit until a forced power cycle
# on a successful thaw:
systemd[1]: systemd-journald.service: Watchdog timeout (limit 3min)!
systemd[1]: systemd-journald.service: Failed with result 'watchdog'.
kernel: PM: suspend exit
```
`/proc/acpi/wakeup` (relevant rows):
```
SLPB S3 *enabled platform:PNP0C0E:00
LID S4 *enabled platform:PNP0C0D:00
```
### Suggested direction
- Use `omarchy-system-wake` on `switch:off:Lid Switch` (superset of clamshell reconcile; fixes the dark-panel case in #10170).
- Do not treat hibernate as available while zram outranks the resume swapfile; document or force hibernate onto the swapfile.
- For s2idle-only + SW_LID-broken lids: do not rely on logind suspend-on-lid with no working wake source. Lock + DPMS off (and a real wake on lid-open) is safer than a bag full of s2idle that never returns.
Happy to attach `omarchy-debug` output or retest a patch.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
- Related PRpr/9211· confirmed
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 09:15 UTC