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

monitor-scaling up/down persists the scale change to the wrong monitor's config when per-monitor rules are used

Reported by phortonssf · filed Sep 25, 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

monitor-scaling up/down persists the scale change to the wrong monitor's config when per-monitor rules are usedrevision 1 · captured 2026-09-28 21:23 UTC via poll

What happened

omarchy-hyprland-monitor-scaling up/down (bound to SUPER + / / SUPER + ALT + /) live-applies the new scale to the correct focused monitor via hyprctl eval, but its persistence step writes the new scale to the wrong place once monitors.lua has per-monitor rules instead of the generic wildcard.

The persistence logic in set_scale() is:

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}|" \
    -e "s|^local omarchy_gdk_scale = .*|local omarchy_gdk_scale = ${new_gdk_scale}|" \
    "$monitor_lua"
elif ...

The first branch matches on the existence of the local omarchy_monitor_scale = line, not on which monitor was actually scaled. If a user has added an explicit hl.monitor({ output = "<name>", ... }) override for one monitor (e.g. a second display that should use a different scale than the wildcard-driven default), the wildcard variable is still present in the file for the other monitor's fallback rule. Running up/down while focused on the overridden monitor then:

  1. Correctly live-scales the focused monitor via hyprctl eval.
  2. Incorrectly rewrites omarchy_monitor_scale (and omarchy_gdk_scale) in monitors.lua — which belongs to the other, wildcard-matched monitor.
  3. On the next config reload, Hyprland re-applies monitors.lua: the wildcard monitor jumps to the new scale (unintended), and the monitor the user actually meant to scale reverts to its old explicit value (the live change is lost).

Steps to reproduce

  1. Have two monitors, e.g. eDP-1 (laptop panel) and HDMI-A-2 (external).
  2. In ~/.config/hypr/monitors.lua, keep the default wildcard rule for one monitor and add an explicit override for the other:
   local omarchy_gdk_scale = 3
   local omarchy_monitor_scale = 3.2

   hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
   hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })

   hl.monitor({ output = "HDMI-A-2", mode = "preferred", position = "auto", scale = 1.2 })

(eDP-1 falls through to the wildcard at 3.2; HDMI-A-2 is explicitly 1.25 after Hyprland's clean-scale rounding.)
3. Focus HDMI-A-2 and run omarchy-hyprland-monitor-scaling up (or press SUPER + / while focused on it).
4. hyprctl monitors briefly shows HDMI-A-2 at the new scale (1.6) — correct.
5. ~/.config/hypr/monitors.lua's omarchy_monitor_scale line has been rewritten to 1.6 and omarchy_gdk_scale to 2.
6. After the file-save-triggered reload, hyprctl monitors now shows eDP-1 at 1.6 (was 3.2, unintended change) and HDMI-A-2 back at 1.25 (the scale-up was silently lost).

Expected

SUPER + / / SUPER + ALT + / should only ever persist a scale change for the monitor that was actually changed, and should never mutate a different monitor's configured scale.

Evidence

Audit log from ~/.local/state/omarchy/monitor-scaling.log (omarchy-hyprland-monitor-scaling writes this itself) showing the live eval correctly targeting HDMI-A-2, even though the persisted file change landed on eDP-1's wildcard rule instead:

at=2026-09-25T08:38:50-07:00	requested=up	current=1.25	new=1.6	monitor=HDMI-A-2	...

System

  • Omarchy version: 4.0.4-1 (channel: stable)
  • Kernel: 7.2.5-3-omarchy
  • GPU: Intel Haswell-ULT integrated graphics
  • Monitors: internal eDP-1 (MacBook panel) + external HDMI-A-2 (Dell AW3418DW)
View raw text
## What happened

`omarchy-hyprland-monitor-scaling up`/`down` (bound to `SUPER + /` / `SUPER + ALT + /`) live-applies the new scale to the correct **focused** monitor via `hyprctl eval`, but its persistence step writes the new scale to the wrong place once `monitors.lua` has per-monitor rules instead of the generic wildcard.

The persistence logic in `set_scale()` is:

```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}|" \
    -e "s|^local omarchy_gdk_scale = .*|local omarchy_gdk_scale = ${new_gdk_scale}|" \
    "$monitor_lua"
elif ...
```

The first branch matches on the *existence* of the `local omarchy_monitor_scale = ` line, not on which monitor was actually scaled. If a user has added an explicit `hl.monitor({ output = "<name>", ... })` override for one monitor (e.g. a second display that should use a different scale than the wildcard-driven default), the wildcard variable is still present in the file for the *other* monitor's fallback rule. Running `up`/`down` while focused on the overridden monitor then:

1. Correctly live-scales the focused monitor via `hyprctl eval`.
2. Incorrectly rewrites `omarchy_monitor_scale` (and `omarchy_gdk_scale`) in `monitors.lua` — which belongs to the *other*, wildcard-matched monitor.
3. On the next config reload, Hyprland re-applies `monitors.lua`: the wildcard monitor jumps to the new scale (unintended), and the monitor the user actually meant to scale reverts to its old explicit value (the live change is lost).

## Steps to reproduce

1. Have two monitors, e.g. `eDP-1` (laptop panel) and `HDMI-A-2` (external).
2. In `~/.config/hypr/monitors.lua`, keep the default wildcard rule for one monitor and add an explicit override for the other:
   ```lua
   local omarchy_gdk_scale = 3
   local omarchy_monitor_scale = 3.2

   hl.env("GDK_SCALE", tostring(omarchy_gdk_scale))
   hl.monitor({ output = "", mode = "preferred", position = "auto", scale = omarchy_monitor_scale })

   hl.monitor({ output = "HDMI-A-2", mode = "preferred", position = "auto", scale = 1.2 })
   ```
   (`eDP-1` falls through to the wildcard at `3.2`; `HDMI-A-2` is explicitly `1.25` after Hyprland's clean-scale rounding.)
3. Focus `HDMI-A-2` and run `omarchy-hyprland-monitor-scaling up` (or press `SUPER + /` while focused on it).
4. `hyprctl monitors` briefly shows `HDMI-A-2` at the new scale (`1.6`) — correct.
5. `~/.config/hypr/monitors.lua`'s `omarchy_monitor_scale` line has been rewritten to `1.6` and `omarchy_gdk_scale` to `2`.
6. After the file-save-triggered reload, `hyprctl monitors` now shows `eDP-1` at `1.6` (was `3.2`, unintended change) and `HDMI-A-2` back at `1.25` (the scale-up was silently lost).

## Expected

`SUPER + /` / `SUPER + ALT + /` should only ever persist a scale change for the monitor that was actually changed, and should never mutate a different monitor's configured scale.

## Evidence

Audit log from `~/.local/state/omarchy/monitor-scaling.log` (`omarchy-hyprland-monitor-scaling` writes this itself) showing the live eval correctly targeting `HDMI-A-2`, even though the persisted file change landed on `eDP-1`'s wildcard rule instead:

```
at=2026-09-25T08:38:50-07:00	requested=up	current=1.25	new=1.6	monitor=HDMI-A-2	...
```

## System

- Omarchy version: 4.0.4-1 (channel: stable)
- Kernel: 7.2.5-3-omarchy
- GPU: Intel Haswell-ULT integrated graphics
- Monitors: internal `eDP-1` (MacBook panel) + external `HDMI-A-2` (Dell AW3418DW)

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/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 18:24 UTC