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

[4.0.2-2 ARM/M2 + Hyprland 0.56.0] omarchy capture screenshot fails: jq string ("null") cannot be parsed as a number

Reported by avillagran · filed Sep 15, 2026Closed upstream on 2026-09-15 by its own reporter avillagran, as not planned. 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

[4.0.2-2 ARM/M2 + Hyprland 0.56.0] omarchy capture screenshot fails: jq string ("null") cannot be parsed as a numberrevision 1 · captured 2026-10-04 12:10 UTC via poll

NOTE: This is SPECIFIC to Omarchy 4.0.2-2 on Apple M2 (aarch64/ARM) + Hyprland 0.56.0. NOT 4.0.3 Intel. Please do not close as duplicate of Intel reports.

Affected versions (specific)

  • omarchy version: 4.0.2-2
  • hyprctl version: Hyprland 0.56.0 built from branch feat/touchpad-scroll-acceleration at commit e4cd005730b6b7b1e7ab6701fe31abd411bbe005 dirty, Tag: v0.56.0-191-ge4cd0057
  • Arch: aarch64, Apple M2 Pro (Avalanche-M2-Pro / Blizzard-M2-Pro), Linux omarchy 7.1.13-1-1-ARCH-hdmi-recover, Arch Linux ARM
  • Current Intel is 4.0.3, Apple/M2 is still on older 4.0.2-2 — this bug is filed against 4.0.2-2 only.

What happened

omarchy capture screenshot (default smart mode) prints:

jq: error (at <stdin>:107): string ("null") cannot be parsed as a number
jq: error (at <stdin>:445): string ("null") cannot be parsed as a number

and no picker appears. Exit 0 but no screenshot.

What was expected

Smart-region picker with window/monitor hints, as documented.

Steps to reproduce

  1. On Omarchy 4.0.2-2 + Hyprland 0.56.0 ARM/M2
  2. Run omarchy capture screenshot or omarchy screenshot
  3. Observe the two jq errors. hyprctl monitors -j | wc -l == 107, hyprctl clients -j | wc -l == 445 (matches error locations).

Root cause (verified locally)

/usr/share/omarchy/bin/omarchy-capture-region:40-53:

active_workspace() {
  hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id'
}
window_rects() {
  hyprctl clients -j | jq -r --arg ws "$(active_workspace)" \
    '[.[] | select(.workspace.id == ($ws | tonumber) and .hidden != true) | ...]'
}
monitor_rects() {
  hyprctl monitors -j | jq -r --arg ws "$(active_workspace)" "... select(.activeWorkspace.id == (\$ws | tonumber)) ..." 
}

Hyprland 0.56.0 changed:

"activeWorkspace": {"address":"6","type":"numbered","name":"6"}
"workspace": {"address":"7","type":"numbered","name":"7"}

No more .id. So .activeWorkspace.id -> null -> "null" | tonumber fails.

Verified:

$ hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .activeWorkspace.id'
null
$ hyprctl clients -j | jq -r --arg ws "null" '[.[] | select(.workspace.id == ($ws | tonumber))]'
jq: error (at <stdin>:445): string ("null") cannot be parsed as a number

Workaround (verified)

These bypass get_rectangles() and work:

omarchy capture screenshot fullscreen save
omarchy capture screenshot region

focused_monitor_geo (no workspace filter) works fine.

Suggested fix (backwards compatible)

Compare by .name with fallback to .id:

active_workspace() {
  hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .activeWorkspace.name // .activeWorkspace.id'
}
# window_rects:
# select((.workspace.name // ((.workspace.id|tostring))) == $ws and .hidden != true)
# monitor_rects:
# select((.activeWorkspace.name // ((.activeWorkspace.id|tostring))) == $ws)

Verified locally that string comparison by name returns correct rects on this machine.

System details

  • omarchy debug does NOT exist on 4.0.2-2 (Unknown Omarchy command: omarchy debug), so no debug log URL. omarchy commands --json shows 396 commands, none in debug group.
  • Monitors: eDP-1 3456x2234@120 scale 2 + HDMI-A-1 LG HDR QHD [email protected] scale 2
View raw text
**NOTE: This is SPECIFIC to Omarchy 4.0.2-2 on Apple M2 (aarch64/ARM) + Hyprland 0.56.0. NOT 4.0.3 Intel. Please do not close as duplicate of Intel reports.**

## Affected versions (specific)
- `omarchy version`: 4.0.2-2
- `hyprctl version`: Hyprland 0.56.0 built from branch `feat/touchpad-scroll-acceleration` at commit `e4cd005730b6b7b1e7ab6701fe31abd411bbe005` dirty, Tag: `v0.56.0-191-ge4cd0057`
- Arch: `aarch64`, Apple M2 Pro (Avalanche-M2-Pro / Blizzard-M2-Pro), `Linux omarchy 7.1.13-1-1-ARCH-hdmi-recover`, Arch Linux ARM
- Current Intel is 4.0.3, Apple/M2 is still on older 4.0.2-2 — this bug is filed against 4.0.2-2 only.

## What happened
`omarchy capture screenshot` (default `smart` mode) prints:
```
jq: error (at <stdin>:107): string ("null") cannot be parsed as a number
jq: error (at <stdin>:445): string ("null") cannot be parsed as a number
```
and no picker appears. Exit 0 but no screenshot.

## What was expected
Smart-region picker with window/monitor hints, as documented.

## Steps to reproduce
1. On Omarchy 4.0.2-2 + Hyprland 0.56.0 ARM/M2
2. Run `omarchy capture screenshot` or `omarchy screenshot`
3. Observe the two jq errors. `hyprctl monitors -j | wc -l` == 107, `hyprctl clients -j | wc -l` == 445 (matches error locations).

## Root cause (verified locally)
` /usr/share/omarchy/bin/omarchy-capture-region:40-53`:
```bash
active_workspace() {
  hyprctl monitors -j | jq -r '.[] | select(.focused == true) | .activeWorkspace.id'
}
window_rects() {
  hyprctl clients -j | jq -r --arg ws "$(active_workspace)" \
    '[.[] | select(.workspace.id == ($ws | tonumber) and .hidden != true) | ...]'
}
monitor_rects() {
  hyprctl monitors -j | jq -r --arg ws "$(active_workspace)" "... select(.activeWorkspace.id == (\$ws | tonumber)) ..." 
}
```

Hyprland 0.56.0 changed:
```json
"activeWorkspace": {"address":"6","type":"numbered","name":"6"}
"workspace": {"address":"7","type":"numbered","name":"7"}
```
No more `.id`. So `.activeWorkspace.id` -> `null` -> `"null" | tonumber` fails.

Verified:
```
$ hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .activeWorkspace.id'
null
$ hyprctl clients -j | jq -r --arg ws "null" '[.[] | select(.workspace.id == ($ws | tonumber))]'
jq: error (at <stdin>:445): string ("null") cannot be parsed as a number
```

## Workaround (verified)
These bypass `get_rectangles()` and work:
```bash
omarchy capture screenshot fullscreen save
omarchy capture screenshot region
```
`focused_monitor_geo` (no workspace filter) works fine.

## Suggested fix (backwards compatible)
Compare by `.name` with fallback to `.id`:
```bash
active_workspace() {
  hyprctl monitors -j | jq -r '.[] | select(.focused==true) | .activeWorkspace.name // .activeWorkspace.id'
}
# window_rects:
# select((.workspace.name // ((.workspace.id|tostring))) == $ws and .hidden != true)
# monitor_rects:
# select((.activeWorkspace.name // ((.activeWorkspace.id|tostring))) == $ws)
```
Verified locally that string comparison by `name` returns correct rects on this machine.

## System details
- `omarchy debug` does NOT exist on 4.0.2-2 (`Unknown Omarchy command: omarchy debug`), so no debug log URL. `omarchy commands --json` shows 396 commands, none in `debug` group.
- Monitors: eDP-1 3456x2234@120 scale 2 + HDMI-A-1 LG HDR QHD [email protected] scale 2

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.