Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
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
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
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):
- 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-allhyprctl reloadwatch -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:
- internal rule's
scale— not found (thedesc:rule is not matched) - the catch-all
output = ""rule'sscale— 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 (fromhyprctl monitors all -j) as well as its connector name, or - ask Hyprland for the effective rule instead of re-parsing
monitors.luain 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