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-4271GitHub issuePublicReceived

Hibernate resume broken after 3.5.0

Reported by twiking · filed Apr 9, 2026Closed upstream on 2026-04-20 by its own reporter twiking. GitHub close reason: completed. Closed by its own reporter — not by itself evidence of a fix.

Received and recorded verbatim. Nothing has been checked yet.

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?
Not yet mapped to any requirement or component.
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?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.

Original report

Hibernate resume broken after 3.5.0revision 1 · captured 2026-10-04 11:56 UTC via poll

System details

Framework Laptop 13 (AMD Ryzen AI 300), Omarchy 3.5.0

What's wrong?

Below is my debugging with Claude. After applying the fix, it works again.


Generated with Claude

Hibernate resume broken after kernel update: resume_offset= is empty in boot config

Description

Hibernate resume has been failing consistently since the kernel was updated on Apr 3 (6.19.10-arch1-1). The system hibernates successfully but does a fresh boot instead of resuming — the hibernate image is discarded every time.

The root cause is that /etc/limine-entry-tool.d/resume.conf contains an empty resume_offset=:

KERNEL_CMDLINE[default]+="resume=/dev/mapper/root resume_offset="

This propagates to /boot/limine.conf:

cmdline: ... resume=/dev/mapper/root resume_offset=

Without the offset, the initramfs resume hook cannot locate the hibernate image on the btrfs swapfile. The system boots normally, and swapon overwrites the hibernate image:

swapon: /swap/swapfile: software suspend data detected. Rewriting the swap signature.

Evidence

Hibernate worked reliably from early March through Apr 3 (28 successful hibernate/resume cycles in journalctl). Since the kernel update on Apr 3, every hibernate resume has failed (4 consecutive failures: Apr 5, 7, 8, 9):

# Every boot since Apr 5 shows this pattern:
systemd-hibernate-resume[704]: Reported hibernation image: ID=arch kernel=6.19.10-arch1-1 UUID=068db438-b09d-4266-8fe1-edd9cf5cc6a9 offset=45139143
systemd-hibernate-resume[704]: Successfully cleared HibernateLocation EFI variable.
swapon[725]: swapon: /swap/swapfile: software suspend data detected. Rewriting the swap signature.

systemd-hibernate-resume knows the correct offset (45139143) from the EFI variable, but by the time it runs, the filesystem is already mounted — it's too late. The resume must happen in the initramfs.

Setup

  • Framework Laptop 13 (AMD Ryzen AI 300)
  • LUKS-encrypted btrfs root (/dev/mapper/root)
  • Swap: /swap/swapfile (30.6G btrfs swapfile)
  • Kernel: 6.19.10-arch1-1 (installed Apr 3)
  • mkinitcpio 40-4
  • Resume hook is present via /etc/mkinitcpio.conf.d/omarchy_resume.conf

Likely cause

It looks like omarchy-hibernation-setup (or limine-entry-tool during kernel update) regenerated the boot config but failed to compute/preserve the resume_offset value from btrfs inspect-internal map-swapfile. The correct offset is 45139143 (as seen in the EFI HibernateLocation variable that systemd writes during hibernate).

Fix

Manually setting the offset and regenerating the boot config fixed the issue:

OFFSET=$(sudo btrfs inspect-internal map-swapfile -r /swap/swapfile)
sudo sed -i "s/resume_offset=.*\"/resume_offset=${OFFSET}\"/" /etc/limine-entry-tool.d/resume.conf
sudo limine-mkinitcpio && sudo limine-update

After this, hibernate and resume works correctly again. Confirmed via journalctl — same boot ID preserved across hibernate/resume:

# Hibernate entry (08:29)
Apr 09 08:29:13 systemd-logind[1094]: The system will hibernate now!
Apr 09 08:29:13 kernel: PM: hibernation: hibernation entry

# Successful resume (08:32) — same boot, no "Rewriting the swap signature"
Apr 09 08:32:08 kernel: PM: hibernation: Allocated 12580444 kbytes in 2.10 seconds (5990.68 MB/s)
Apr 09 08:32:08 kernel: PM: hibernation: hibernation exit
Apr 09 08:32:08 systemd-sleep[270380]: System returned from sleep operation 'hibernate'.
Apr 09 08:32:08 systemd-logind[1094]: Operation 'hibernate' finished.

Underlying bug

The resume_offset value is lost when the boot config is regenerated during a kernel update. omarchy-hibernation-setup or limine-entry-tool should preserve or recompute the offset (from btrfs inspect-internal map-swapfile -r /swap/swapfile) when rebuilding boot entries.

Additional note

There is also a stale /swapfile entry in /etc/fstab that fails every boot with BTRFS warning: swapfile must not be copy-on-write. This is separate from the working /swap/swapfile but causes noisy errors on every boot.

View raw text
### System details

Framework Laptop 13 (AMD Ryzen AI 300), Omarchy 3.5.0

### What's wrong?

Below is my debugging with Claude. After applying the fix, it works again.

----------------------------------------------------------------------------------------------------------------------
# Generated with Claude

## Hibernate resume broken after kernel update: `resume_offset=` is empty in boot config

### Description

Hibernate resume has been failing consistently since the kernel was updated on Apr 3 (6.19.10-arch1-1). The system hibernates successfully but does a fresh boot instead of resuming — the hibernate image is discarded every time.

The root cause is that `/etc/limine-entry-tool.d/resume.conf` contains an empty `resume_offset=`:

```
KERNEL_CMDLINE[default]+="resume=/dev/mapper/root resume_offset="
```

This propagates to `/boot/limine.conf`:

```
cmdline: ... resume=/dev/mapper/root resume_offset=
```

Without the offset, the initramfs `resume` hook cannot locate the hibernate image on the btrfs swapfile. The system boots normally, and `swapon` overwrites the hibernate image:

```
swapon: /swap/swapfile: software suspend data detected. Rewriting the swap signature.
```

### Evidence

Hibernate worked reliably from early March through Apr 3 (28 successful hibernate/resume cycles in journalctl). Since the kernel update on Apr 3, every hibernate resume has failed (4 consecutive failures: Apr 5, 7, 8, 9):

```
# Every boot since Apr 5 shows this pattern:
systemd-hibernate-resume[704]: Reported hibernation image: ID=arch kernel=6.19.10-arch1-1 UUID=068db438-b09d-4266-8fe1-edd9cf5cc6a9 offset=45139143
systemd-hibernate-resume[704]: Successfully cleared HibernateLocation EFI variable.
swapon[725]: swapon: /swap/swapfile: software suspend data detected. Rewriting the swap signature.
```

`systemd-hibernate-resume` knows the correct offset (45139143) from the EFI variable, but by the time it runs, the filesystem is already mounted — it's too late. The resume must happen in the initramfs.

### Setup

- Framework Laptop 13 (AMD Ryzen AI 300)
- LUKS-encrypted btrfs root (`/dev/mapper/root`)
- Swap: `/swap/swapfile` (30.6G btrfs swapfile)
- Kernel: 6.19.10-arch1-1 (installed Apr 3)
- mkinitcpio 40-4
- Resume hook is present via `/etc/mkinitcpio.conf.d/omarchy_resume.conf`

### Likely cause

It looks like `omarchy-hibernation-setup` (or `limine-entry-tool` during kernel update) regenerated the boot config but failed to compute/preserve the `resume_offset` value from `btrfs inspect-internal map-swapfile`. The correct offset is **45139143** (as seen in the EFI HibernateLocation variable that systemd writes during hibernate).

### Fix

Manually setting the offset and regenerating the boot config fixed the issue:

```bash
OFFSET=$(sudo btrfs inspect-internal map-swapfile -r /swap/swapfile)
sudo sed -i "s/resume_offset=.*\"/resume_offset=${OFFSET}\"/" /etc/limine-entry-tool.d/resume.conf
sudo limine-mkinitcpio && sudo limine-update
```

After this, hibernate and resume works correctly again. Confirmed via journalctl — same boot ID preserved across hibernate/resume:

```
# Hibernate entry (08:29)
Apr 09 08:29:13 systemd-logind[1094]: The system will hibernate now!
Apr 09 08:29:13 kernel: PM: hibernation: hibernation entry

# Successful resume (08:32) — same boot, no "Rewriting the swap signature"
Apr 09 08:32:08 kernel: PM: hibernation: Allocated 12580444 kbytes in 2.10 seconds (5990.68 MB/s)
Apr 09 08:32:08 kernel: PM: hibernation: hibernation exit
Apr 09 08:32:08 systemd-sleep[270380]: System returned from sleep operation 'hibernate'.
Apr 09 08:32:08 systemd-logind[1094]: Operation 'hibernate' finished.
```

### Underlying bug

The `resume_offset` value is lost when the boot config is regenerated during a kernel update. `omarchy-hibernation-setup` or `limine-entry-tool` should preserve or recompute the offset (from `btrfs inspect-internal map-swapfile -r /swap/swapfile`) when rebuilding boot entries.

### Additional note

There is also a stale `/swapfile` entry in `/etc/fstab` that fails every boot with `BTRFS warning: swapfile must not be copy-on-write`. This is separate from the working `/swap/swapfile` but causes noisy errors on every boot.

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.

No decision has been recorded yet.