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-1795GitHub issuePublicFixed

Clamshell watcher ignores desc: rules for the internal panel and overwrites its scale every 2s

Reported by mkelk · filed Aug 16, 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

Clamshell watcher ignores desc: rules for the internal panel and overwrites its scale every 2srevision 1 · captured 2026-09-28 21:29 UTC via poll

What's wrong?

omarchy-hyprland-monitor-clamshell re-applies the internal panel every 2 seconds while docked, but it can only read a monitors.lua rule that is keyed by connector name. A rule keyed by desc: is invisible to it, so it silently falls back to a different scale and then overwrites the panel about one second after anything — the config, the Display panel, omarchy hyprland monitor scaling — sets the correct one.

desc: is standard Hyprland monitor syntax (documented on the wiki the shipped monitors.lua links to) and is the usual way to survive DP connectors renumbering across hotplug. Hyprland honours such a rule; the watcher does not, and then overrides Hyprland with its own guess.

Symptom: the built-in display sits at the wrong scale and will not stay changed. hyprctl reload appears to do nothing. Setting the scale by hand holds for one sample and then snaps back.

Steps to reproduce

On a laptop with an external monitor connected (the poll only runs while docked):

  1. In ~/.config/hypr/monitors.lua, key the internal panel by description instead of connector name, with a numeric catch-all below it:
   hl.monitor({ output = "desc:Samsung Display Corp. ATNA60HR07-0", mode = "2880x1800@120", position = "auto", scale = 2 })
   hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1 })  -- catch-all
  1. hyprctl reload
  2. watch -n1 'hyprctl monitors -j | jq -r ".[]|select(.name==\"eDP-1\").scale"'

Expected: 2 — the rule matches the panel, and hyprctl monitors confirms the description matches exactly.

Actual: 2 for about one second, then 1 forever. The source of the change makes no difference — the poll re-asserts its own value regardless of whether the scale came from the config, hyprctl eval, or the Display panel.

Root cause

In bin/omarchy-hyprland-monitor-clamshell (line numbers from quattro HEAD, 7be59e1):

monitor_rule_regex() (L69) builds its matcher from INTERNAL, which is the connector name from omarchy-hyprland-monitor-laptop (L12) — eDP-1:

printf '^[[:space:]]*hl\\.monitor\\(\\{.*output[[:space:]]*=[[:space:]]*"%s"' "$1"

configured_internal_monitor_value scale (L83) therefore matches only a literal output = "eDP-1" rule. With a desc: rule it finds nothing, and configured_monitor_scale() (L89) walks its fallback chain:

  1. internal rule's scale — not found (the desc: rule is not matched)
  2. the catch-all output = "" rule's scale — found: 1

sync_internal_scale() (L160) then sees active 2 != desired 1 and calls enable_internal_output 1 (L151):

hyprctl eval "hl.monitor({ output = \"eDP-1\", mode = \"preferred\", position = \"auto\", scale = 1 })"

omarchy-hyprland-monitor-watch runs this via poll_clamshell_state every 2 s for as long as an external monitor is active, so the correct scale is overwritten indefinitely.

#6909 is almost certainly the same defect seen from the other side. With the shipped config/hypr/monitors.lua, the catch-all is scale = omarchy_monitor_scale where omarchy_monitor_scale = "auto". "auto" fails valid_scale(), so read_monitor_scale() (L121) falls past it to the remembered internal-monitor-scale state file and finally to a hardcoded echo 2 — and the same 2 s poll then forces the internal panel to 2 and overrides every manual change "precisely one second after applying", exactly as reported there. So a stock config hits this too; it does not require a desc: rule. #6673 looks related.

The deeper problem is that the fallback is silent. When the watcher cannot parse a rule for the internal panel it does not leave the panel alone — it asserts a scale it guessed, every two seconds, and wins over both the config and the user.

Suggested fix

Resolve the internal panel's rule the way Hyprland does, rather than by connector name only. Either:

  • match a desc: rule against the internal output's description (from hyprctl monitors all -j) as well as its connector name, or
  • ask Hyprland for the effective rule instead of re-parsing monitors.lua in shell.

Failing that, sync_internal_scale could no-op when no rule for the internal panel was actually found, instead of asserting the catch-all or the hardcoded 2. Overwriting a scale the user set, every two seconds, with a guess is worse than doing nothing.

Workaround

Key the internal panel by connector name. eDP numbering is stable across hotplug; only DP connectors renumber:

hl.monitor({ output = "eDP-1", mode = "2880x1800@120", position = "auto", scale = 2 })

System details

  • AMD Ryzen AI 9 465 w/ Radeon 880M (amdgpu), ASUS Zenbook S16 UM5606GA
  • Omarchy 4.0.0-1, Hyprland 0.56.2, kernel 7.1.8-arch1-3
  • Built-in: eDP-1, 2880x1800@120, Samsung Display Corp. ATNA60HR07-0
  • External: DP-1, 3440x1440@100 @ 1.6, AOC CU34V5C

bin/omarchy-hyprland-monitor-clamshell on this machine is byte-identical to the file at quattro HEAD (7be59e1), so this is not local drift.

View raw text
### What's wrong?

`omarchy-hyprland-monitor-clamshell` re-applies the internal panel every 2 seconds while docked, but it can only read a `monitors.lua` rule that is keyed by **connector name**. A rule keyed by `desc:` is invisible to it, so it silently falls back to a different scale and then overwrites the panel about one second after anything — the config, the Display panel, `omarchy hyprland monitor scaling` — sets the correct one.

`desc:` is standard Hyprland monitor syntax (documented on the wiki the shipped `monitors.lua` links to) and is the usual way to survive DP connectors renumbering across hotplug. Hyprland honours such a rule; the watcher does not, and then overrides Hyprland with its own guess.

**Symptom:** the built-in display sits at the wrong scale and will not stay changed. `hyprctl reload` appears to do nothing. Setting the scale by hand holds for one sample and then snaps back.

### Steps to reproduce

On a laptop with an external monitor connected (the poll only runs while docked):

1. In `~/.config/hypr/monitors.lua`, key the internal panel by description instead of connector name, with a numeric catch-all below it:

   ```lua
   hl.monitor({ output = "desc:Samsung Display Corp. ATNA60HR07-0", mode = "2880x1800@120", position = "auto", scale = 2 })
   hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1 })  -- catch-all
   ```

2. `hyprctl reload`
3. `watch -n1 'hyprctl monitors -j | jq -r ".[]|select(.name==\"eDP-1\").scale"'`

**Expected:** `2` — the rule matches the panel, and `hyprctl monitors` confirms the description matches exactly.

**Actual:** `2` for about one second, then `1` forever. The source of the change makes no difference — the poll re-asserts its own value regardless of whether the scale came from the config, `hyprctl eval`, or the Display panel.

### Root cause

In `bin/omarchy-hyprland-monitor-clamshell` (line numbers from `quattro` HEAD, `7be59e1`):

`monitor_rule_regex()` (L69) builds its matcher from `INTERNAL`, which is the connector name from `omarchy-hyprland-monitor-laptop` (L12) — `eDP-1`:

```bash
printf '^[[:space:]]*hl\\.monitor\\(\\{.*output[[:space:]]*=[[:space:]]*"%s"' "$1"
```

`configured_internal_monitor_value scale` (L83) therefore matches only a literal `output = "eDP-1"` rule. With a `desc:` rule it finds nothing, and `configured_monitor_scale()` (L89) walks its fallback chain:

1. internal rule's `scale` — **not found** (the `desc:` rule is not matched)
2. the catch-all `output = ""` rule's `scale` — **found: 1**

`sync_internal_scale()` (L160) then sees active `2` != desired `1` and calls `enable_internal_output 1` (L151):

```bash
hyprctl eval "hl.monitor({ output = \"eDP-1\", mode = \"preferred\", position = \"auto\", scale = 1 })"
```

`omarchy-hyprland-monitor-watch` runs this via `poll_clamshell_state` every 2 s for as long as an external monitor is active, so the correct scale is overwritten indefinitely.

**#6909 is almost certainly the same defect seen from the other side.** With the *shipped* `config/hypr/monitors.lua`, the catch-all is `scale = omarchy_monitor_scale` where `omarchy_monitor_scale = "auto"`. `"auto"` fails `valid_scale()`, so `read_monitor_scale()` (L121) falls past it to the remembered `internal-monitor-scale` state file and finally to a hardcoded `echo 2` — and the same 2 s poll then forces the internal panel to 2 and overrides every manual change "precisely one second after applying", exactly as reported there. So a stock config hits this too; it does not require a `desc:` rule. #6673 looks related.

The deeper problem is that the fallback is silent. When the watcher cannot parse a rule for the internal panel it does not leave the panel alone — it asserts a scale it guessed, every two seconds, and wins over both the config and the user.

### Suggested fix

Resolve the internal panel's rule the way Hyprland does, rather than by connector name only. Either:

- match a `desc:` rule against the internal output's description (from `hyprctl monitors all -j`) as well as its connector name, or
- ask Hyprland for the effective rule instead of re-parsing `monitors.lua` in shell.

Failing that, `sync_internal_scale` could no-op when no rule for the internal panel was actually found, instead of asserting the catch-all or the hardcoded `2`. Overwriting a scale the user set, every two seconds, with a guess is worse than doing nothing.

### Workaround

Key the internal panel by connector name. eDP numbering is stable across hotplug; only DP connectors renumber:

```lua
hl.monitor({ output = "eDP-1", mode = "2880x1800@120", position = "auto", scale = 2 })
```

### System details

- AMD Ryzen AI 9 465 w/ Radeon 880M (amdgpu), ASUS Zenbook S16 UM5606GA
- Omarchy 4.0.0-1, Hyprland 0.56.2, kernel 7.1.8-arch1-3
- Built-in: eDP-1, 2880x1800@120, `Samsung Display Corp. ATNA60HR07-0`
- External: DP-1, 3440x1440@100 @ 1.6, `AOC CU34V5C`

`bin/omarchy-hyprland-monitor-clamshell` on this machine is byte-identical to the file at `quattro` HEAD (`7be59e1`), so this is not local drift.

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

  • Fixed bypr/7146· confirmed
  • Fixed bypr/14583· 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 04:19 UTC