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

[Quattro] Display panel scale is per-monitor at runtime but persists globally, rescaling other monitors on reload

Reported by nico-kovacs · filed Aug 10, 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

[Quattro] Display panel scale is per-monitor at runtime but persists globally, rescaling other monitors on reloadrevision 1 · captured 2026-09-28 21:29 UTC via poll

System details

  • Omarchy 4.0.0.r1607.g0a83590-1 (Quattro)
  • Hyprland 0.56.2
  • AMD Ryzen AI 9 HX 370 w/ Radeon 890M (integrated, amdgpu), 24 GB RAM
  • 3 displays: eDP-1 (2560x1600), DP-7 (2560x1440, rotated), DP-8 (3840x2160)

What's wrong?

The Display panel's scale buttons are per-display at runtime but persist globally. Adjusting the scale on one monitor rescales the others a moment later, in the same session.

omarchy-hyprland-monitor-scaling applies the new scale to the focused monitor correctly:

hyprctl eval "hl.monitor({ output = \"$active_monitor\", ... scale = $new_scale })"

But it persists by rewriting the catch-all variable in ~/.config/hypr/monitors.lua:

if [[ -f $monitor_lua ]] && grep -q '^local omarchy_monitor_scale = ' "$monitor_lua"; then
  sed -i -E \
    -e "s|^local omarchy_monitor_scale = .*|local omarchy_monitor_scale = ${new_scale}|" \

omarchy_monitor_scale feeds hl.monitor({ output = "", ... }), which applies to every monitor. Writing the file also trips Hyprland's config auto-reload, so the global value lands on the other monitors within a second or two — this is not just a "doesn't survive reboot" bug, the cross-talk is immediate and unrequested.

There is no per-monitor persistence path: both branches of the persistence block write the catch-all.

The guard also doesn't match its own stated intent. The comment says:

Persist to monitors.lua if the user still has Omarchy's generic catch-all defaults, so the scale survives reboots.

but grep -q '^local omarchy_monitor_scale = ' still matches after the user adds explicit per-monitor hl.monitor lines, so it persists globally in exactly the case the comment means to exclude.

For contrast, the sibling control in the same panel does scope its target explicitly (Panel.qml:247):

setBrightnessProc.command = ["omarchy-brightness-display", "--no-osd", "--monitor", root.focusedMonitor, percent + "%"]

while setScale (Panel.qml:308) passes no monitor at all.

On a single-monitor machine the behavior is correct and invisible, which is presumably why it shipped.

Steps to reproduce

On a stock monitors.lua (only the catch-all line, no per-monitor entries) with two or more displays:

  1. Focus monitor A, open the Display panel, set the scale to 2.
  2. Focus monitor B, set the scale to 1.6.
  3. Watch monitor A. Within a second or two it also becomes 1.6.

hyprctl monitors confirms both displays end up at the scale last chosen for B, and monitors.lua contains local omarchy_monitor_scale = 1.6.

~/.local/state/omarchy/monitor-scaling.log from my own machine, showing two per-monitor adjustments 24 seconds apart:

at=2026-08-10T08:13:43+02:00	requested=1.25	current=1.6	new=1.25	monitor=DP-7 …
at=2026-08-10T08:14:07+02:00	requested=1.6	current=1.25	new=1.6	monitor=DP-8 …

DP-7 was left at 1.6, not the 1.25 that was asked for.

Expected

Scale set from the Display panel persists for the display it was applied to, and leaves other displays alone.

Workaround

Give each output an explicit hl.monitor line with a literal scale, so the catch-all can't reach it. The panel's scale buttons then stop persisting for those monitors (they revert on the next reload), but at least the displays no longer drag each other around.

Possibly related

#4785 — scale cycling resetting multi-monitor layout, from the monitors.conf era. The runtime hyprctl eval in the current script still passes position = "auto", which may be the same underlying behavior surviving the Lua rewrite.

View raw text
### System details

- Omarchy 4.0.0.r1607.g0a83590-1 (Quattro)
- Hyprland 0.56.2
- AMD Ryzen AI 9 HX 370 w/ Radeon 890M (integrated, amdgpu), 24 GB RAM
- 3 displays: eDP-1 (2560x1600), DP-7 (2560x1440, rotated), DP-8 (3840x2160)

### What's wrong?

The Display panel's scale buttons are per-display at runtime but persist globally. Adjusting the scale on one monitor rescales the *others* a moment later, in the same session.

`omarchy-hyprland-monitor-scaling` applies the new scale to the focused monitor correctly:

```bash
hyprctl eval "hl.monitor({ output = \"$active_monitor\", ... scale = $new_scale })"
```

But it persists by rewriting the catch-all variable in `~/.config/hypr/monitors.lua`:

```bash
if [[ -f $monitor_lua ]] && grep -q '^local omarchy_monitor_scale = ' "$monitor_lua"; then
  sed -i -E \
    -e "s|^local omarchy_monitor_scale = .*|local omarchy_monitor_scale = ${new_scale}|" \
```

`omarchy_monitor_scale` feeds `hl.monitor({ output = "", ... })`, which applies to every monitor. Writing the file also trips Hyprland's config auto-reload, so the global value lands on the other monitors within a second or two — this is not just a "doesn't survive reboot" bug, the cross-talk is immediate and unrequested.

There is no per-monitor persistence path: both branches of the persistence block write the catch-all.

The guard also doesn't match its own stated intent. The comment says:

> Persist to monitors.lua if the user still has Omarchy's generic catch-all defaults, so the scale survives reboots.

but `grep -q '^local omarchy_monitor_scale = '` still matches after the user adds explicit per-monitor `hl.monitor` lines, so it persists globally in exactly the case the comment means to exclude.

For contrast, the sibling control in the same panel does scope its target explicitly (`Panel.qml:247`):

```qml
setBrightnessProc.command = ["omarchy-brightness-display", "--no-osd", "--monitor", root.focusedMonitor, percent + "%"]
```

while `setScale` (`Panel.qml:308`) passes no monitor at all.

On a single-monitor machine the behavior is correct and invisible, which is presumably why it shipped.

### Steps to reproduce

On a **stock** `monitors.lua` (only the catch-all line, no per-monitor entries) with two or more displays:

1. Focus monitor A, open the Display panel, set the scale to 2.
2. Focus monitor B, set the scale to 1.6.
3. Watch monitor A. Within a second or two it also becomes 1.6.

`hyprctl monitors` confirms both displays end up at the scale last chosen for B, and `monitors.lua` contains `local omarchy_monitor_scale = 1.6`.

`~/.local/state/omarchy/monitor-scaling.log` from my own machine, showing two per-monitor adjustments 24 seconds apart:

```
at=2026-08-10T08:13:43+02:00	requested=1.25	current=1.6	new=1.25	monitor=DP-7 …
at=2026-08-10T08:14:07+02:00	requested=1.6	current=1.25	new=1.6	monitor=DP-8 …
```

DP-7 was left at 1.6, not the 1.25 that was asked for.

### Expected

Scale set from the Display panel persists for the display it was applied to, and leaves other displays alone.

### Workaround

Give each output an explicit `hl.monitor` line with a literal scale, so the catch-all can't reach it. The panel's scale buttons then stop persisting for those monitors (they revert on the next reload), but at least the displays no longer drag each other around.

### Possibly related

#4785 — scale cycling resetting multi-monitor layout, from the `monitors.conf` era. The runtime `hyprctl eval` in the current script still passes `position = "auto"`, which may be the same underlying behavior surviving the Lua rewrite.

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

  • Related PRpr/8982· 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:01 UTC