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

Internal display flashes to 2x scale on lock-screen mouse move / resume (desc: output rules unmatched)

Reported by mateusfl · filed Aug 19, 2026 · open at source

Decided: Duplicate — decided by agents · verified 3 days ago.

This defect is tracked under R-943. This report describes the same defect, so it is folded under it in the inbox.

Earliest report of this defect: R-1655 (filed Aug 19, 2026).

Decided by agents · verified· Oct 9, 2026

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?
AreaPartly in the audited arealock· 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

Internal display flashes to 2x scale on lock-screen mouse move / resume (desc: output rules unmatched)revision 1 · captured 2026-09-28 21:29 UTC via poll

What happened

On resume from suspend, and continuously while moving the mouse on the lock screen, the internal display's scale flickers between the correct value (1) and 2 — the whole shell (bar, text, lock screen UI) briefly jumps to double size and then snaps back. After unlocking it happens once more and then stays stable.

Expected

The internal display should stay at its configured scale; no scale should ever be force-applied unless it actually needs correcting.

Root cause

omarchy-hyprland-monitor-clamshell is invoked on every "wake" (including from LockView.qml's MouseArea.onPositionChanged on the lock screen, via omarchy-system-wake). Its enable_internal → sync_internal_scale path decides whether to re-apply a scale by comparing the active scale against a desired scale read from ~/.config/hypr/monitors.lua:

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

configured_internal_monitor_value calls this with $INTERNAL = the literal port name from omarchy-hyprland-monitor-laptop (e.g. eDP-1). This only matches a rule written as output = "eDP-1". It does not match a rule that identifies the same output by description, e.g.:

hl.monitor({
  output = "desc:LG Display 0x0742",
  mode = "[email protected]",
  scale = 1,
  ...
})

desc:-based output selectors are a normal, documented way to address a monitor in Hyprland (useful because port names can change across kernels/docks), and are what third-party monitor-profile tools (e.g. hyprmoncfg) generate by default.

When the regex fails to match, configured_monitor_scale returns empty. read_monitor_scale then falls back to a saved state file (~/.local/state/omarchy/toggles/hypr/internal-monitor-scale), and if that's also absent, hardcodes a default of 2:

read_monitor_scale() {
  local scale
  scale=$(configured_monitor_scale)
  if valid_scale "$scale"; then echo "$scale"; return; fi
  if [[ -f $SCALE_STATE ]]; then
    scale=$(<"$SCALE_STATE")
    if valid_scale "$scale"; then echo "$scale"; return; fi
  fi
  echo 2
}

On a non-HiDPI internal panel configured at scale = 1 via a desc: rule, this fallback is wrong. sync_internal_scale then sees a mismatch against the real active scale (1) and force-applies scale = 2 via hyprctl eval, causing the visible flash. A separate monitor-profile daemon (in my case hyprmoncfgd) then corrects it back on its own poll cycle, producing the flicker. Because the lock screen fires wakeRequested() (and thus this whole chain) on every mouse-move event, the flicker repeats continuously while the mouse moves on the lock screen, and fires once more on unlock.

Steps to reproduce

  1. Configure the internal monitor in ~/.config/hypr/monitors.lua using a desc:-based output selector at scale = 1 (e.g. via hyprmoncfg, or by hand).
  2. Make sure ~/.local/state/omarchy/toggles/hypr/internal-monitor-scale does not exist / does not hold the correct scale.
  3. Lock the screen and move the mouse continuously, or resume from suspend.
  4. Observe the shell repeatedly flash to double size and snap back.

Suggested fix

configured_internal_monitor_value / monitor_rule_regex should also match the internal monitor when it's identified by desc:<description> (available via hyprctl monitors -j as .description), not only by literal port name. At minimum, read_monitor_scale's hardcoded final fallback of 2 should not be force-applied without first confirming a mismatch actually needs correcting — right now a parse failure is indistinguishable from "the user wants 2x", and the function actively pushes that guess to the compositor instead of leaving the monitor alone when it can't determine the configured scale.

Workaround

Manually seeding ~/.local/state/omarchy/toggles/hypr/internal-monitor-scale with the correct scale (1 in my case) makes read_monitor_scale's second fallback succeed, so sync_internal_scale sees a match and never force-applies anything.

System details

  • Omarchy: 4.0.0-1
  • Machine: Acer Nitro ANV15-51 (hybrid graphics)
  • CPU: 13th Gen Intel Core i5-13420H
  • Graphics: Intel Raptor Lake-P UHD (i915, active on eDP-1) + NVIDIA GeForce RTX 3050 6GB Laptop GPU (nvidia 610.57.04)
  • Kernel: 7.1.8-arch1-3
  • Hyprland: 0.56.2
  • Monitor profile tool in use: hyprmoncfg 1.13.0 (AUR), which generates monitors.lua with desc:-based output selectors

Unrelated bug noticed while gathering diagnostics

omarchy debug --no-sudo --print (and omarchy debug in general) currently fails with "Unknown Omarchy command: omarchy debug" even though it's listed as a common command in omarchy --help. The underlying binary /usr/bin/omarchy-debug works fine when invoked directly, so this looks like a dispatcher/registration regression. Happy to file this separately if preferred.

View raw text
## What happened

On resume from suspend, and continuously while moving the mouse on the lock screen, the internal display's scale flickers between the correct value (1) and 2 — the whole shell (bar, text, lock screen UI) briefly jumps to double size and then snaps back. After unlocking it happens once more and then stays stable.

## Expected

The internal display should stay at its configured scale; no scale should ever be force-applied unless it actually needs correcting.

## Root cause

`omarchy-hyprland-monitor-clamshell` is invoked on every "wake" (including from `LockView.qml`'s `MouseArea.onPositionChanged` on the lock screen, via `omarchy-system-wake`). Its `enable_internal` → `sync_internal_scale` path decides whether to re-apply a scale by comparing the *active* scale against a *desired* scale read from `~/.config/hypr/monitors.lua`:

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

`configured_internal_monitor_value` calls this with `$INTERNAL` = the literal port name from `omarchy-hyprland-monitor-laptop` (e.g. `eDP-1`). This only matches a rule written as `output = "eDP-1"`. It does **not** match a rule that identifies the same output by description, e.g.:

```lua
hl.monitor({
  output = "desc:LG Display 0x0742",
  mode = "[email protected]",
  scale = 1,
  ...
})
```

`desc:`-based output selectors are a normal, documented way to address a monitor in Hyprland (useful because port names can change across kernels/docks), and are what third-party monitor-profile tools (e.g. `hyprmoncfg`) generate by default.

When the regex fails to match, `configured_monitor_scale` returns empty. `read_monitor_scale` then falls back to a saved state file (`~/.local/state/omarchy/toggles/hypr/internal-monitor-scale`), and if that's also absent, hardcodes a default of `2`:

```sh
read_monitor_scale() {
  local scale
  scale=$(configured_monitor_scale)
  if valid_scale "$scale"; then echo "$scale"; return; fi
  if [[ -f $SCALE_STATE ]]; then
    scale=$(<"$SCALE_STATE")
    if valid_scale "$scale"; then echo "$scale"; return; fi
  fi
  echo 2
}
```

On a non-HiDPI internal panel configured at `scale = 1` via a `desc:` rule, this fallback is wrong. `sync_internal_scale` then sees a mismatch against the real active scale (1) and force-applies `scale = 2` via `hyprctl eval`, causing the visible flash. A separate monitor-profile daemon (in my case `hyprmoncfgd`) then corrects it back on its own poll cycle, producing the flicker. Because the lock screen fires `wakeRequested()` (and thus this whole chain) on *every* mouse-move event, the flicker repeats continuously while the mouse moves on the lock screen, and fires once more on unlock.

## Steps to reproduce

1. Configure the internal monitor in `~/.config/hypr/monitors.lua` using a `desc:`-based `output` selector at `scale = 1` (e.g. via `hyprmoncfg`, or by hand).
2. Make sure `~/.local/state/omarchy/toggles/hypr/internal-monitor-scale` does not exist / does not hold the correct scale.
3. Lock the screen and move the mouse continuously, or resume from suspend.
4. Observe the shell repeatedly flash to double size and snap back.

## Suggested fix

`configured_internal_monitor_value` / `monitor_rule_regex` should also match the internal monitor when it's identified by `desc:<description>` (available via `hyprctl monitors -j` as `.description`), not only by literal port name. At minimum, `read_monitor_scale`'s hardcoded final fallback of `2` should not be force-applied without first confirming a mismatch actually needs correcting — right now a parse failure is indistinguishable from "the user wants 2x", and the function actively pushes that guess to the compositor instead of leaving the monitor alone when it can't determine the configured scale.

## Workaround

Manually seeding `~/.local/state/omarchy/toggles/hypr/internal-monitor-scale` with the correct scale (`1` in my case) makes `read_monitor_scale`'s second fallback succeed, so `sync_internal_scale` sees a match and never force-applies anything.

## System details

- Omarchy: 4.0.0-1
- Machine: Acer Nitro ANV15-51 (hybrid graphics)
- CPU: 13th Gen Intel Core i5-13420H
- Graphics: Intel Raptor Lake-P UHD (i915, active on eDP-1) + NVIDIA GeForce RTX 3050 6GB Laptop GPU (nvidia 610.57.04)
- Kernel: 7.1.8-arch1-3
- Hyprland: 0.56.2
- Monitor profile tool in use: `hyprmoncfg` 1.13.0 (AUR), which generates `monitors.lua` with `desc:`-based output selectors

## Unrelated bug noticed while gathering diagnostics

`omarchy debug --no-sudo --print` (and `omarchy debug` in general) currently fails with "Unknown Omarchy command: omarchy debug" even though it's listed as a common command in `omarchy --help`. The underlying binary `/usr/bin/omarchy-debug` works fine when invoked directly, so this looks like a dispatcher/registration regression. Happy to file this separately if preferred.

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

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.

  • DuplicateR-943Decided by agents · verified · 2026-10-09 04:47 UTC