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

Internal monitor scale reverts to 2 when monitors.lua has multi-line hl.monitor({...}) entries

Reported by retr8-101 · filed Aug 26, 2026Closed upstream on 2026-10-09 by the bot omarchybot, as a duplicate (target not recorded).

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

Internal monitor scale reverts to 2 when monitors.lua has multi-line hl.monitor({...}) entriesrevision 1 · captured 2026-09-28 21:24 UTC via poll

Internal monitor scale keeps reverting to 2 when monitors.lua has multi-line hl.monitor({...}) entries

What happened

With a laptop + one external monitor connected, the internal panel's scale
keeps snapping back to 2 every few seconds — even after setting it via the
quickshell monitor panel widget (Super, monitor icon) or manually reloading.
It happens continuously with no user action, roughly every 2 seconds.

Expected behavior

The internal monitor's scale should stay at whatever is configured in
~/.config/hypr/monitors.lua while docked with an external monitor active.

Root cause

/usr/share/omarchy/bin/omarchy-hyprland-monitor-clamshell runs
sync_internal_scale on a 2-second poll (poll_clamshell_state, started
whenever omarchy-hw-laptop && omarchy-hyprland-monitor-external-active) to
keep the internal panel's scale in sync with monitors.lua.

It reads the desired scale with configured_monitor_scale →
configured_monitor_value, which greps monitors.lua with a line-anchored
regex:

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

This only matches when hl.monitor({ and output = "<name>" appear on the
same line. But nwg-displays (a common third-party tool for configuring
Hyprland monitor layout, since Omarchy has no built-in GUI for this) writes
each monitor as a multi-line block:

hl.monitor({
    output = "eDP-1",
    mode = "[email protected]",
    position = "1536x0",
    scale = 1.25
})

Against that shape, configured_monitor_value finds no match, so
configured_monitor_scale falls through every fallback (catch-all rule,
omarchy_monitor_scale local) and read_monitor_scale hits its final
hardcoded default:

read_monitor_scale() {
  ...
  echo 2
}

Every ~2 seconds, the poll compares this bogus "desired" value (2) against
the actual live scale, sees a mismatch, and calls
hyprctl eval "hl.monitor({ output = \"$INTERNAL\", ... scale = 2 })" to
"fix" it — permanently fighting any other scale you set.

Steps to reproduce

  1. On a laptop with an external monitor, run nwg-displays, arrange

monitors, set internal panel scale to something other than 2 (e.g.
1.25), and save.
2. Confirm ~/.config/hypr/monitors.lua now has multi-line hl.monitor({...})
blocks (this is nwg-displays' default output format).
3. hyprctl reload, then watch hyprctl monitors | grep scale for the
internal output over the next ~5-10 seconds.
4. Scale reverts to 2 on its own, with no user action.

Confirmed by the change-audit log at
~/.local/state/omarchy/monitor-scaling.log, which shows current=2 on
every widget-driven correction, moments after scale had already been set
correctly.

Workaround

Manually collapse each hl.monitor({...}) block in monitors.lua to a
single line so the regex can match it. This holds until the file is
re-saved by a tool that reformats it back to multi-line (e.g. re-saving from
nwg-displays).

Suggested fix

Make configured_monitor_value/monitor_rules tolerant of multi-line
hl.monitor({...}) tables (e.g. join the file into one logical stream per
table before matching), since multi-line output is the default/common style
from tools like nwg-displays, not just hand-edited files.

System info

  • Omarchy: 4.0.0-1
  • Hyprland: 0.56.2-1
  • Kernel: 7.1.8-arch1-3
  • GPU: NVIDIA GeForce GTX 1050 Max-Q (hybrid, AMD Vega iGPU also present)
  • Laptop internal panel: eDP-1, 1920x1080, BOE panel
  • External monitor: Lenovo S24e-20, HDMI-A-1, 1920x1080
View raw text
# Internal monitor scale keeps reverting to 2 when monitors.lua has multi-line `hl.monitor({...})` entries

## What happened

With a laptop + one external monitor connected, the internal panel's scale
keeps snapping back to `2` every few seconds — even after setting it via the
quickshell monitor panel widget (Super, monitor icon) or manually reloading.
It happens continuously with no user action, roughly every 2 seconds.

## Expected behavior

The internal monitor's scale should stay at whatever is configured in
`~/.config/hypr/monitors.lua` while docked with an external monitor active.

## Root cause

`/usr/share/omarchy/bin/omarchy-hyprland-monitor-clamshell` runs
`sync_internal_scale` on a 2-second poll (`poll_clamshell_state`, started
whenever `omarchy-hw-laptop && omarchy-hyprland-monitor-external-active`) to
keep the internal panel's scale in sync with `monitors.lua`.

It reads the desired scale with `configured_monitor_scale` →
`configured_monitor_value`, which greps `monitors.lua` with a **line-anchored**
regex:

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

This only matches when `hl.monitor({` and `output = "<name>"` appear on the
**same line**. But `nwg-displays` (a common third-party tool for configuring
Hyprland monitor layout, since Omarchy has no built-in GUI for this) writes
each monitor as a multi-line block:

```lua
hl.monitor({
    output = "eDP-1",
    mode = "[email protected]",
    position = "1536x0",
    scale = 1.25
})
```

Against that shape, `configured_monitor_value` finds no match, so
`configured_monitor_scale` falls through every fallback (catch-all rule,
`omarchy_monitor_scale` local) and `read_monitor_scale` hits its final
hardcoded default:

```bash
read_monitor_scale() {
  ...
  echo 2
}
```

Every ~2 seconds, the poll compares this bogus "desired" value (`2`) against
the actual live scale, sees a mismatch, and calls
`hyprctl eval "hl.monitor({ output = \"$INTERNAL\", ... scale = 2 })"` to
"fix" it — permanently fighting any other scale you set.

## Steps to reproduce

1. On a laptop with an external monitor, run `nwg-displays`, arrange
   monitors, set internal panel scale to something other than `2` (e.g.
   `1.25`), and save.
2. Confirm `~/.config/hypr/monitors.lua` now has multi-line `hl.monitor({...})`
   blocks (this is nwg-displays' default output format).
3. `hyprctl reload`, then watch `hyprctl monitors | grep scale` for the
   internal output over the next ~5-10 seconds.
4. Scale reverts to `2` on its own, with no user action.

Confirmed by the change-audit log at
`~/.local/state/omarchy/monitor-scaling.log`, which shows `current=2` on
every widget-driven correction, moments after scale had already been set
correctly.

## Workaround

Manually collapse each `hl.monitor({...})` block in `monitors.lua` to a
single line so the regex can match it. This holds until the file is
re-saved by a tool that reformats it back to multi-line (e.g. re-saving from
nwg-displays).

## Suggested fix

Make `configured_monitor_value`/`monitor_rules` tolerant of multi-line
`hl.monitor({...})` tables (e.g. join the file into one logical stream per
table before matching), since multi-line output is the default/common style
from tools like nwg-displays, not just hand-edited files.

## System info

- Omarchy: 4.0.0-1
- Hyprland: 0.56.2-1
- Kernel: `7.1.8-arch1-3`
- GPU: NVIDIA GeForce GTX 1050 Max-Q (hybrid, AMD Vega iGPU also present)
- Laptop internal panel: eDP-1, 1920x1080, BOE panel
- External monitor: Lenovo S24e-20, HDMI-A-1, 1920x1080

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.

No decision has been recorded yet.