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-40GitHub issuePublicDecided· Out of scope

Hybrid NVIDIA laptop: HDMI (dGPU-wired) external monitor corrupted after deep suspend; s2idle workaround

Reported by ButtercupRobrts · filed Sep 27, 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

Hybrid NVIDIA laptop: HDMI (dGPU-wired) external monitor corrupted after deep suspend; s2idle workaroundrevision 1 · captured 2026-09-28 21:23 UTC via poll

Summary

On a hybrid-graphics laptop where the HDMI port is wired to the NVIDIA dGPU, resuming from deep suspend leaves the external monitor permanently corrupted (pink screen, or black backlit). The dGPU's display engine cannot complete a modeset after resume until reboot. Switching to s2idle works around it.

Hardware

  • MSI GL65 9SEK (MS-16U5), Intel Core i7-9750H
  • iGPU: Intel UHD 630 (i915, drives internal eDP-1)
  • dGPU: NVIDIA RTX 2060 Mobile (TU106), nvidia-open 610.57.04 — HDMI-A-1 is wired to the dGPU (verified via /sys/class/drm/card1-HDMI-A-1)
  • Omarchy 4.0.4-1, Hyprland 0.56.2, Linux 7.2.3-1-omarchy

Reproduction

  1. Boot normally (default mem_sleep = deep)
  2. systemctl suspend, resume
  3. External monitor shows a pink screen (or black backlit) — internal panel is fine

100% reproducible on this machine, including on the first suspend after a fresh boot.

Evidence

Journal from resume:

[drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] Failed to apply atomic modeset. Error code: -11
[drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] Flip event timeout on head 0
NVRM: Xid (PCI:0000:01:00): 13, Graphics Exception: Shader Program Header 11 Error
NVRM: Xid (PCI:0000:01:00): 13, pid=..., name=Hyprland, Graphics Exception: channel 0x00000005

After this failure the output is unrecoverable in-session: hyprctl reload, a full DPMS off/on cycle, disabling/re-enabling the output, hl.dsp.force_renderer_reload(), and a VT switch round-trip all fail; every subsequent modeset attempt on HDMI-A-1 hits Flip event timeout on head 0 / atomic modeset -11 again.

Related observations:

  • The nvidia-suspend/nvidia-resume/nvidia-hibernate services are a no-op on this driver: /proc/driver/nvidia/suspend does not exist in 610.57.04, and nvidia-sleep.sh exits early in that case.
  • NVreg_PreserveVideoMemoryAllocations=0 (set by Omarchy, cf. reverted #5519 and discussion #5500) is required here: with the preserve parameter set and no procfs suspend interface, the driver aborts sleep with pci_pm_freeze(): nv_pmops_freeze returns -5.

Workaround that works

mem_sleep_default=s2idle on the kernel cmdline. With s2idle:

  • No Xid 13, no GPU corruption; the desktop on the external monitor returns after ~4s of Flip event timeout retries and stays stable.
  • s2idle is properly supported on this CPU (cat /sys/power/mem_sleep → [s2idle] deep after the change), and hibernation is unaffected.

Suggestion

Consider either:

  • documenting this in the manual for laptops where an output is wired to the dGPU, and/or
  • shipping an opt-in setup command (e.g. omarchy setup nvidia-sleep-fix) that adds the mem_sleep_default=s2idle limine-entry-tool drop-in:
echo 'KERNEL_CMDLINE[default]+=" mem_sleep_default=s2idle"' | sudo tee /etc/limine-entry-tool.d/mem-sleep.conf
sudo limine-mkinitcpio

Full context

  • omarchy debug --no-sudo --print output: attached (omarchy-debug.log)
  • Suspected root cause is in the NVIDIA driver (dGPU VRAM/display state not preserved across S3 without the procfs suspend path), but Omarchy users on MSI/ASUS-style hybrids will keep hitting this.
View raw text
## Summary

On a hybrid-graphics laptop where the HDMI port is wired to the NVIDIA dGPU, resuming from `deep` suspend leaves the external monitor permanently corrupted (pink screen, or black backlit). The dGPU's display engine cannot complete a modeset after resume until reboot. Switching to `s2idle` works around it.

## Hardware

- MSI GL65 9SEK (MS-16U5), Intel Core i7-9750H
- iGPU: Intel UHD 630 (`i915`, drives internal `eDP-1`)
- dGPU: NVIDIA RTX 2060 Mobile (TU106), `nvidia-open` 610.57.04 — **HDMI-A-1 is wired to the dGPU** (verified via `/sys/class/drm/card1-HDMI-A-1`)
- Omarchy 4.0.4-1, Hyprland 0.56.2, Linux 7.2.3-1-omarchy

## Reproduction

1. Boot normally (default `mem_sleep` = `deep`)
2. `systemctl suspend`, resume
3. External monitor shows a pink screen (or black backlit) — internal panel is fine

100% reproducible on this machine, including on the first suspend after a fresh boot.

## Evidence

Journal from resume:

```
[drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] Failed to apply atomic modeset. Error code: -11
[drm:nv_drm_atomic_commit [nvidia_drm]] *ERROR* [nvidia-drm] Flip event timeout on head 0
NVRM: Xid (PCI:0000:01:00): 13, Graphics Exception: Shader Program Header 11 Error
NVRM: Xid (PCI:0000:01:00): 13, pid=..., name=Hyprland, Graphics Exception: channel 0x00000005
```

After this failure the output is unrecoverable in-session: `hyprctl reload`, a full DPMS off/on cycle, disabling/re-enabling the output, `hl.dsp.force_renderer_reload()`, and a VT switch round-trip all fail; every subsequent modeset attempt on `HDMI-A-1` hits `Flip event timeout on head 0` / atomic modeset `-11` again.

Related observations:

- The `nvidia-suspend`/`nvidia-resume`/`nvidia-hibernate` services are a no-op on this driver: `/proc/driver/nvidia/suspend` does not exist in 610.57.04, and `nvidia-sleep.sh` exits early in that case.
- `NVreg_PreserveVideoMemoryAllocations=0` (set by Omarchy, cf. reverted #5519 and discussion #5500) is required here: with the preserve parameter set and no procfs suspend interface, the driver aborts sleep with `pci_pm_freeze(): nv_pmops_freeze returns -5`.

## Workaround that works

`mem_sleep_default=s2idle` on the kernel cmdline. With s2idle:

- No Xid 13, no GPU corruption; the desktop on the external monitor returns after ~4s of `Flip event timeout` retries and stays stable.
- `s2idle` is properly supported on this CPU (`cat /sys/power/mem_sleep` → `[s2idle] deep` after the change), and hibernation is unaffected.

## Suggestion

Consider either:

- documenting this in the manual for laptops where an output is wired to the dGPU, and/or
- shipping an opt-in setup command (e.g. `omarchy setup nvidia-sleep-fix`) that adds the `mem_sleep_default=s2idle` limine-entry-tool drop-in:

```bash
echo 'KERNEL_CMDLINE[default]+=" mem_sleep_default=s2idle"' | sudo tee /etc/limine-entry-tool.d/mem-sleep.conf
sudo limine-mkinitcpio
```

## Full context

- `omarchy debug --no-sudo --print` output: attached (omarchy-debug.log)
- Suspected root cause is in the NVIDIA driver (dGPU VRAM/display state not preserved across S3 without the procfs suspend path), but Omarchy users on MSI/ASUS-style hybrids will keep hitting this.

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 19:29 UTC