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

Hibernate resume fails (nv_pmops_freeze → -EIO) on single-NVIDIA-GPU desktops — initramfs nvidia load blocks the resume hook

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

Decided: Out of scope — decided by agents · verified 4 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 resume fails (nv_pmops_freeze → -EIO) on single-NVIDIA-GPU desktops — initramfs nvidia load blocks the resume hookrevision 1 · captured 2026-09-28 21:24 UTC via poll

System details

AMD Ryzen 9 5900X · NVIDIA RTX 4070 (AD104), nvidia-open-dkms 610.57.04 · single discrete GPU, no iGPU · MSI MPG X570 GAMING EDGE WIFI · 64 GB RAM · Omarchy 4.0.2-1 (stable channel) · kernel 7.1.9-arch1-2 · Limine + UKI · LUKS-encrypted btrfs root, /swap/swapfile (btrfs) with resume=/dev/mapper/root resume_offset=… on the cmdline.

What's wrong?

Hibernation never resumes on a single-NVIDIA-GPU desktop. Selecting Hibernate writes the image and powers off correctly, but on the next boot the image restore is aborted and the machine does a normal cold boot instead — all programs/windows lost.

Failure sequence (from journalctl -b, every attempt is identical)

PM: Image signature found, resuming
PM: hibernation: Read 21213392 kbytes in 10.99 seconds (1930.24 MB/s)
PM: Image successfully loaded
NVRM: GPU 0000:2d:00.0: PreserveVideoMemoryAllocations module parameter is set.
      System Power Management attempted without driver procfs suspend interface.
      Please refer to the 'Configuring Power Management Support' section in the driver README.
nvidia 0000:2d:00.0: PM: pci_pm_freeze(): nv_pmops_freeze [nvidia] returns -5
nvidia 0000:2d:00.0: PM: dpm_run_callback(): pci_pm_freeze returns -5
nvidia 0000:2d:00.0: PM: failed to quiesce async: error -5
PM: hibernation: Failed to load image, recovering.
PM: hibernation: resume failed (-5)

Root cause

Omarchy early-loads the NVIDIA modules in the initramfs (/etc/mkinitcpio.conf.d/nvidia.conf → MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm), for the Plymouth LUKS screen). The resume hook (/etc/mkinitcpio.conf.d/omarchy_resume.conf) runs in that same initramfs, after nvidia has already bound to the card and taken the framebuffer console.

NVreg_PreserveVideoMemoryAllocations=1 is set (by /usr/lib/modprobe.d/gsr-nvidia.conf). With that parameter, the NVIDIA driver requires every PM transition — including the device quiesce done during image restore — to go through its /proc/driver/nvidia/suspend handshake, and returns -EIO if it didn't. That handshake was performed by nvidia-hibernate.service in the pre-hibernate userspace on the old kernel; it does not, and structurally cannot, carry over to the fresh initramfs nvidia instance that comes up at resume time. So nv_pmops_freeze fails, and the whole restore is discarded.

Relationship to #9696

#9696 is the same -EIO freeze failure but is explicitly scoped to hybrid ASUS laptops, where the fix is supergfxctl + the force-igpu sleep hook (Vfio-detach the dGPU before hibernate). That workaround is inapplicable here: this is a desktop with a single NVIDIA GPU and no iGPU — there is nothing to switch to, supergfxctl isn't installed, and force-igpu isn't (and can't be) active. omarchy-hibernation-setup offers and configures hibernation on this machine but the default initramfs makes resume impossible.

Steps to reproduce

  1. Single discrete NVIDIA GPU desktop (no iGPU), nvidia-open-dkms, LUKS + btrfs.
  2. Run hibernation setup (swap file + resume hook + resume= cmdline) — as omarchy-hibernation-setup does.
  3. systemctl enable nvidia-suspend.service nvidia-hibernate.service nvidia-resume.service (does not help).
  4. systemctl hibernate, then power the machine back on.
  5. Machine cold-boots; session not restored. journalctl -b shows the nv_pmops_freeze … returns -5 / Failed to load image, recovering sequence above.

Workaround that does work

Remove NVIDIA from the initramfs so the resume hook quiesces devices before any GPU driver is bound:

sudo rm /etc/mkinitcpio.conf.d/nvidia.conf   # drop MODULES+=(nvidia …)
sudo limine-mkinitcpio

After this, resume completes and the session is restored; NVIDIA loads normally in userspace. Cost: the LUKS passphrase prompt is text-mode instead of graphical Plymouth (no other KMS driver on a single-NVIDIA box).

Suggested fix

On single-NVIDIA-GPU systems, either (a) don't early-load nvidia in the initramfs when hibernation is configured, or (b) don't offer/enable hibernation via omarchy-hibernation-setup unless the initramfs is compatible — mirroring #9860's "fail hibernation setup when the host can't hibernate".

View raw text
## System details

AMD Ryzen 9 5900X · NVIDIA RTX 4070 (AD104), `nvidia-open-dkms` 610.57.04 · single discrete GPU, **no iGPU** · MSI MPG X570 GAMING EDGE WIFI · 64 GB RAM · Omarchy 4.0.2-1 (stable channel) · kernel 7.1.9-arch1-2 · Limine + UKI · LUKS-encrypted btrfs root, `/swap/swapfile` (btrfs) with `resume=/dev/mapper/root resume_offset=…` on the cmdline.

## What's wrong?

**Hibernation never resumes on a single-NVIDIA-GPU desktop.** Selecting Hibernate writes the image and powers off correctly, but on the next boot the image restore is aborted and the machine does a normal cold boot instead — all programs/windows lost.

### Failure sequence (from `journalctl -b`, every attempt is identical)

```
PM: Image signature found, resuming
PM: hibernation: Read 21213392 kbytes in 10.99 seconds (1930.24 MB/s)
PM: Image successfully loaded
NVRM: GPU 0000:2d:00.0: PreserveVideoMemoryAllocations module parameter is set.
      System Power Management attempted without driver procfs suspend interface.
      Please refer to the 'Configuring Power Management Support' section in the driver README.
nvidia 0000:2d:00.0: PM: pci_pm_freeze(): nv_pmops_freeze [nvidia] returns -5
nvidia 0000:2d:00.0: PM: dpm_run_callback(): pci_pm_freeze returns -5
nvidia 0000:2d:00.0: PM: failed to quiesce async: error -5
PM: hibernation: Failed to load image, recovering.
PM: hibernation: resume failed (-5)
```

### Root cause

Omarchy early-loads the NVIDIA modules in the initramfs (`/etc/mkinitcpio.conf.d/nvidia.conf` → `MODULES+=(nvidia nvidia_modeset nvidia_uvm nvidia_drm)`, for the Plymouth LUKS screen). The `resume` hook (`/etc/mkinitcpio.conf.d/omarchy_resume.conf`) runs in that **same initramfs**, after `nvidia` has already bound to the card and taken the framebuffer console.

`NVreg_PreserveVideoMemoryAllocations=1` is set (by `/usr/lib/modprobe.d/gsr-nvidia.conf`). With that parameter, the NVIDIA driver requires every PM transition — including the device quiesce done during image restore — to go through its `/proc/driver/nvidia/suspend` handshake, and returns `-EIO` if it didn't. That handshake was performed by `nvidia-hibernate.service` in the *pre-hibernate* userspace on the *old* kernel; it does not, and structurally cannot, carry over to the fresh initramfs `nvidia` instance that comes up at resume time. So `nv_pmops_freeze` fails, and the whole restore is discarded.

### Relationship to #9696

#9696 is the same `-EIO` freeze failure but is explicitly scoped to **hybrid ASUS laptops**, where the fix is `supergfxctl` + the `force-igpu` sleep hook (Vfio-detach the dGPU before hibernate). That workaround is inapplicable here: this is a **desktop with a single NVIDIA GPU and no iGPU** — there is nothing to switch to, `supergfxctl` isn't installed, and `force-igpu` isn't (and can't be) active. `omarchy-hibernation-setup` offers and configures hibernation on this machine but the default initramfs makes resume impossible.

### Steps to reproduce

1. Single discrete NVIDIA GPU desktop (no iGPU), `nvidia-open-dkms`, LUKS + btrfs.
2. Run hibernation setup (swap file + `resume` hook + `resume=` cmdline) — as `omarchy-hibernation-setup` does.
3. `systemctl enable nvidia-suspend.service nvidia-hibernate.service nvidia-resume.service` (does not help).
4. `systemctl hibernate`, then power the machine back on.
5. Machine cold-boots; session not restored. `journalctl -b` shows the `nv_pmops_freeze … returns -5` / `Failed to load image, recovering` sequence above.

### Workaround that does work

Remove NVIDIA from the initramfs so the `resume` hook quiesces devices before any GPU driver is bound:

```
sudo rm /etc/mkinitcpio.conf.d/nvidia.conf   # drop MODULES+=(nvidia …)
sudo limine-mkinitcpio
```

After this, resume completes and the session is restored; NVIDIA loads normally in userspace. Cost: the LUKS passphrase prompt is text-mode instead of graphical Plymouth (no other KMS driver on a single-NVIDIA box).

### Suggested fix

On single-NVIDIA-GPU systems, either (a) don't early-load `nvidia` in the initramfs when hibernation is configured, or (b) don't offer/enable hibernation via `omarchy-hibernation-setup` unless the initramfs is compatible — mirroring #9860's "fail hibernation setup when the host can't hibernate".

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:41 UTC