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

Mirror Display reports success but stays extended when hyprmoncfg manages displays

Reported by tiko0815 · filed Oct 1, 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

Mirror Display reports success but stays extended when hyprmoncfg manages displaysrevision 1 · captured 2026-10-01 14:40 UTC via poll

System details

  • Omarchy 4.0.4-1
  • Hyprland 0.56.2 (package 0.56.2-2), Lua configuration
  • hyprmoncfg-bin 1.22.0-1; daemon restarted into 1.22.0 before the final reproduction
  • Kernel 7.2.5-3-omarchy
  • ThinkPad T14s Gen 1, Intel Core i5-10210U / Intel UHD Graphics (i915)
  • Internal eDP-1: 1920×1080, scale 1.5
  • External HP 727pu on DP-2 over direct USB-C: 2560×1440, scale 1

What's wrong?

With hyprmoncfg managing the display configuration, the built-in Quickshell menu action Trigger → Hardware → Mirror Display reports that mirroring is enabled, but the desktop remains extended. This appears to be an integration conflict between Omarchy's toggle configuration and hyprmoncfg's generated layout.

The monitor is connected and functioning normally in extended mode. This report concerns mode switching, not USB-C detection.

Steps to reproduce

  1. Run Omarchy with an internal and external display in extended mode.
  2. Enable hyprmoncfg management and run hyprmoncfgd.
  3. Use the built-in Mirror Display menu action. Its stock command is omarchy-hyprland-monitor-internal-mirror toggle.
  4. Inspect hyprctl -j monitors all: the external display still has mirrorOf: "none".

I also reproduced this directly with the unmodified packaged command, bypassing a local menu workaround:

/usr/share/omarchy/bin/omarchy-hyprland-monitor-internal-mirror on
hyprctl -j monitors all | jq '[.[] | {name, mirrorOf, x, y}]'

Result:

[
  {"name":"eDP-1","mirrorOf":"none","x":0,"y":0},
  {"name":"DP-2","mirrorOf":"none","x":1280,"y":-360}
]

The toggle file exists and contains:

hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, mirror = "eDP-1" })

hyprctl configerrors is empty.

Expected behavior

The menu action should switch the external display to mirroring and toggle back to the previous extended layout, including when hyprmoncfg manages displays. If that combination is unsupported, the command should report the conflict rather than report success.

Configuration conflict

The user configuration loads require("default.hypr.toggles") before hyprmoncfg's managed dofile(...) include. hyprmoncfg deliberately puts its generated monitor configuration last. That generated configuration contains the extended layout without a mirror setting, overriding the earlier toggle rule. The daemon can also restore its selected layout after an external change.

The current upstream mirror command writes the toggle and reloads Hyprland without coordinating with the active display manager or verifying the resulting mirror state.

Working local integration / validation

A user-level menu override now delegates switching to hyprmoncfg: save the extended layout, create a mirror profile using the internal output's hardware key as mirror_of, and apply the appropriate profile through the daemon. The daemon remains enabled.

I tested extended → mirrored → extended through the actual Quickshell menu route, verifying the resulting mirrorOf values and empty configuration errors. Both directions work through that integration. No packaged Omarchy files were changed.

omarchy-debug --no-sudo --print was collected locally; the relevant system details and focused diagnostics are included above rather than publishing the full machine inventory.

View raw text
### System details

- Omarchy 4.0.4-1
- Hyprland 0.56.2 (package 0.56.2-2), Lua configuration
- hyprmoncfg-bin 1.22.0-1; daemon restarted into 1.22.0 before the final reproduction
- Kernel 7.2.5-3-omarchy
- ThinkPad T14s Gen 1, Intel Core i5-10210U / Intel UHD Graphics (i915)
- Internal eDP-1: 1920×1080, scale 1.5
- External HP 727pu on DP-2 over direct USB-C: 2560×1440, scale 1

### What's wrong?

With hyprmoncfg managing the display configuration, the built-in Quickshell menu action **Trigger → Hardware → Mirror Display** reports that mirroring is enabled, but the desktop remains extended. This appears to be an integration conflict between Omarchy's toggle configuration and hyprmoncfg's generated layout.

The monitor is connected and functioning normally in extended mode. This report concerns mode switching, not USB-C detection.

### Steps to reproduce

1. Run Omarchy with an internal and external display in extended mode.
2. Enable hyprmoncfg management and run `hyprmoncfgd`.
3. Use the built-in **Mirror Display** menu action. Its stock command is `omarchy-hyprland-monitor-internal-mirror toggle`.
4. Inspect `hyprctl -j monitors all`: the external display still has `mirrorOf: "none"`.

I also reproduced this directly with the unmodified packaged command, bypassing a local menu workaround:

```sh
/usr/share/omarchy/bin/omarchy-hyprland-monitor-internal-mirror on
hyprctl -j monitors all | jq '[.[] | {name, mirrorOf, x, y}]'
```

Result:

```json
[
  {"name":"eDP-1","mirrorOf":"none","x":0,"y":0},
  {"name":"DP-2","mirrorOf":"none","x":1280,"y":-360}
]
```

The toggle file exists and contains:

```lua
hl.monitor({ output = "DP-2", mode = "preferred", position = "auto", scale = 1, mirror = "eDP-1" })
```

`hyprctl configerrors` is empty.

### Expected behavior

The menu action should switch the external display to mirroring and toggle back to the previous extended layout, including when hyprmoncfg manages displays. If that combination is unsupported, the command should report the conflict rather than report success.

### Configuration conflict

The user configuration loads `require("default.hypr.toggles")` before hyprmoncfg's managed `dofile(...)` include. hyprmoncfg deliberately puts its generated monitor configuration last. That generated configuration contains the extended layout without a mirror setting, overriding the earlier toggle rule. The daemon can also restore its selected layout after an external change.

The current upstream [mirror command](https://github.com/omacom/omarchy/blob/c05d90196fc0dd5c21e2e797d80ffcc60d5e39fa/bin/omarchy-hyprland-monitor-internal-mirror) writes the toggle and reloads Hyprland without coordinating with the active display manager or verifying the resulting mirror state.

### Working local integration / validation

A user-level menu override now delegates switching to hyprmoncfg: save the extended layout, create a mirror profile using the internal output's **hardware key** as `mirror_of`, and apply the appropriate profile through the daemon. The daemon remains enabled.

I tested **extended → mirrored → extended through the actual Quickshell menu route**, verifying the resulting `mirrorOf` values and empty configuration errors. Both directions work through that integration. No packaged Omarchy files were changed.

`omarchy-debug --no-sudo --print` was collected locally; the relevant system details and focused diagnostics are included above rather than publishing the full machine inventory.

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

Not linked to any known issue, other report or change yet.

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 20:26 UTC