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-5232GitHub issuePublicReceived

Qt 6.12's new QtQuick `Color` singleton shadows `qs.Commons.Color`, leaving the bar, menu and panels blank

Reported by danielrod36 · filed Oct 8, 2026Closed upstream on 2026-10-08 by the bot omarchybot; the closing comment says it was fixed by PR #14553. GitHub close reason: completed.

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

Qt 6.12's new QtQuick `Color` singleton shadows `qs.Commons.Color`, leaving the bar, menu and panels blankrevision 1 · captured 2026-10-08 07:38 UTC via poll

Summary

Qt 6.12.0 ships a new built-in QtQuick/Color singleton, which shadows Omarchy's qs.Commons.Color singleton. Every Color.<surface>.<role> expression in the shell now evaluates to undefined, so the bar, SUPER + SPACE menu, OSD, lock screen, polkit agent and all panels render blank or black.

This is not a quickshell or ABI problem, and not stale caches: it reproduces in plain Qt 6.12 QML with no quickshell involved.

Environment

  • Omarchy 4.0.4-1 (/usr/share/omarchy/shell/Commons/Color.qml owned by the omarchy package)
  • `qt6-base` `6.12.0-2`, qt6-declarative 6.12.0-1 (extra), upgraded 2026-10-08 13:25
  • quickshell 0.3.1-1
  • Hyprland session, Wayland

Steps to reproduce

  1. Have Qt 6.12 installed with an omarchy build that exports qs.Commons.Color (any release through 4.0.4).
  2. omarchy restart shell
  3. Open SUPER + SPACE, or just look at the bar.

The shell's journal fills with:

WARN scene: @plugins/bar/Bar.qml[81:-1]: TypeError: Cannot read property 'active' of undefined
WARN scene: @plugins/bar/Bar.qml[75:3]: Unable to assign [undefined] to QColor
WARN scene: @Ui/PanelToolTip.qml[21:-1]: TypeError: Cannot read property 'text' of undefined
WARN scene: @Ui/PanelToolTip.qml[22:-1]: TypeError: Cannot read property 'background' of undefined
WARN scene: file:///usr/share/omarchy/shell/plugins/lock/LockView.qml[127:-1]: TypeError: Cannot read property 'background' of undefined
WARN scene: @Commons/Border.qml[25:-1]: TypeError: Cannot read property 'polkit.border-alpha' of undefined

Root cause

Qt 6.12 added a Color singleton to QtQuick — https://doc.qt.io/qt-6.12/qml-qtquick-color.html (Since: Qt 6.12, backed by QQuickColor in private/qquickcolor_p.h, exported as QtQuick/Color 6.12).

Every shell file does an unversioned import QtQuick, which resolves to 6.12, and that built-in wins over qs.Commons.Color. The QML engine then hands back the QtQuick singleton:

$ /usr/lib/qt6/bin/qml --version
Qml Runtime 6.12.0

// bare QtQuick import, no quickshell, custom singleton also named Color
console.log(String(Color))     // QQuickColor(0x...)
console.log(Color.foreground)  // undefined
console.log(Color.marker)      // undefined

Minimal reproduction with no quickshell, a module that exports singleton Color, and an unversioned import QtQuick:

import QtQuick
import MyModule          // exports `singleton Color 1.0 Color.qml`
QtObject { Component.onCompleted: console.log(String(Color), Color.foreground) }
// => QQuickColor(0x...) undefined

Evidence that this is the 6.12 upgrade and not a pre-existing problem, from the user journal:

windowcount of Cannot read property 'border' of undefined
2026-10-08 00:00 → 13:25 (before the upgrade)0
2026-10-08 13:25 → 15:0030,604

Pinning the import below 6.12 restores the singleton immediately:

import QtQuick 6.11
import qs.Commons
console.log(String(Color), Color.bar.text)  // Color_QMLTYPE_8(0x...) #cacccc

Note import QtQuick 2.15 is also unaffected; only unversioned imports resolve to 6.12.

Impact

  • Bar renders blank/black; SUPER + SPACE menu never appears or paints an empty black rectangle.
  • omarchy-menu IPC still answers ok, so the CLI looks healthy while the UI is unusable.
  • Lock screen, polkit agent and every panel are affected the same way, since they all read Color.*.
  • Anyone on omarchy + Qt 6.12 hits this on every shell start; it is not self-healing and survives restarts.

Suggested fix

Rename the singleton away from Color so QtQuick can never shadow it again — e.g. Palette in shell/Commons/qmldir plus a grep -ro '\bColor\.' sweep across shell/, themes/ and the shipped plugins. That is robust against future QtQuick additions too.

If renaming is too invasive for now, pinning the import is a one-line-per-file workaround:

sed -i -E 's/^([[:space:]]*)import QtQuick[[:space:]]*$/\1import QtQuick 6.11/' $(grep -rlE '\bColor\.' shell --include=*.qml)

(54 files in 4.0.4.) Worth noting for anyone else affected: the same collision applies to any user plugin that reads Color.*, so a rename needs to consider third-party plugins as well.

Diagnostics

omarchy version → 4.0.4-1
quickshell --version → Quickshell 0.3.1 (revision , distributed by Arch Linux)
/usr/lib/qt6/bin/qml --version → Qml Runtime 6.12.0
pacman -Q qt6-base qt6-declarative → 6.12.0-2, 6.12.0-1

Screenshots of the broken bar/menu versus the same build with the import pinned are available on request.

View raw text
## Summary

Qt 6.12.0 ships a new built-in `QtQuick/Color` singleton, which shadows Omarchy's `qs.Commons.Color` singleton. Every `Color.<surface>.<role>` expression in the shell now evaluates to `undefined`, so the bar, `SUPER + SPACE` menu, OSD, lock screen, polkit agent and all panels render blank or black.

This is not a quickshell or ABI problem, and not stale caches: it reproduces in plain Qt 6.12 QML with no quickshell involved.

## Environment

- Omarchy `4.0.4-1` (`/usr/share/omarchy/shell/Commons/Color.qml` owned by the `omarchy` package)
- **`qt6-base` `6.12.0-2`**, `qt6-declarative` `6.12.0-1` (extra), upgraded 2026-10-08 13:25
- `quickshell` `0.3.1-1`
- Hyprland session, Wayland

## Steps to reproduce

1. Have Qt 6.12 installed with an `omarchy` build that exports `qs.Commons.Color` (any release through `4.0.4`).
2. `omarchy restart shell`
3. Open `SUPER + SPACE`, or just look at the bar.

The shell's journal fills with:

```
WARN scene: @plugins/bar/Bar.qml[81:-1]: TypeError: Cannot read property 'active' of undefined
WARN scene: @plugins/bar/Bar.qml[75:3]: Unable to assign [undefined] to QColor
WARN scene: @Ui/PanelToolTip.qml[21:-1]: TypeError: Cannot read property 'text' of undefined
WARN scene: @Ui/PanelToolTip.qml[22:-1]: TypeError: Cannot read property 'background' of undefined
WARN scene: file:///usr/share/omarchy/shell/plugins/lock/LockView.qml[127:-1]: TypeError: Cannot read property 'background' of undefined
WARN scene: @Commons/Border.qml[25:-1]: TypeError: Cannot read property 'polkit.border-alpha' of undefined
```

## Root cause

Qt 6.12 added a `Color` singleton to QtQuick — https://doc.qt.io/qt-6.12/qml-qtquick-color.html (`Since: Qt 6.12`, backed by `QQuickColor` in `private/qquickcolor_p.h`, exported as `QtQuick/Color 6.12`).

Every shell file does an unversioned `import QtQuick`, which resolves to 6.12, and that built-in wins over `qs.Commons.Color`. The QML engine then hands back the QtQuick singleton:

```
$ /usr/lib/qt6/bin/qml --version
Qml Runtime 6.12.0

// bare QtQuick import, no quickshell, custom singleton also named Color
console.log(String(Color))     // QQuickColor(0x...)
console.log(Color.foreground)  // undefined
console.log(Color.marker)      // undefined
```

Minimal reproduction with no quickshell, a module that exports `singleton Color`, and an unversioned `import QtQuick`:

```
import QtQuick
import MyModule          // exports `singleton Color 1.0 Color.qml`
QtObject { Component.onCompleted: console.log(String(Color), Color.foreground) }
// => QQuickColor(0x...) undefined
```

Evidence that this is the 6.12 upgrade and not a pre-existing problem, from the user journal:

| window | count of `Cannot read property 'border' of undefined` |
| --- | --- |
| 2026-10-08 00:00 → 13:25 (before the upgrade) | **0** |
| 2026-10-08 13:25 → 15:00 | **30,604** |

Pinning the import below 6.12 restores the singleton immediately:

```
import QtQuick 6.11
import qs.Commons
console.log(String(Color), Color.bar.text)  // Color_QMLTYPE_8(0x...) #cacccc
```

Note `import QtQuick 2.15` is also unaffected; only unversioned imports resolve to 6.12.

## Impact

- Bar renders blank/black; `SUPER + SPACE` menu never appears or paints an empty black rectangle.
- `omarchy-menu` IPC still answers `ok`, so the CLI looks healthy while the UI is unusable.
- Lock screen, polkit agent and every panel are affected the same way, since they all read `Color.*`.
- Anyone on `omarchy` + Qt 6.12 hits this on every shell start; it is not self-healing and survives restarts.

## Suggested fix

Rename the singleton away from `Color` so QtQuick can never shadow it again — e.g. `Palette` in `shell/Commons/qmldir` plus a `grep -ro '\bColor\.'` sweep across `shell/`, `themes/` and the shipped plugins. That is robust against future QtQuick additions too.

If renaming is too invasive for now, pinning the import is a one-line-per-file workaround:

```
sed -i -E 's/^([[:space:]]*)import QtQuick[[:space:]]*$/\1import QtQuick 6.11/' $(grep -rlE '\bColor\.' shell --include=*.qml)
```

(54 files in 4.0.4.) Worth noting for anyone else affected: the same collision applies to any user plugin that reads `Color.*`, so a rename needs to consider third-party plugins as well.

## Diagnostics

`omarchy version` → `4.0.4-1`
`quickshell --version` → `Quickshell 0.3.1 (revision , distributed by Arch Linux)`
`/usr/lib/qt6/bin/qml --version` → `Qml Runtime 6.12.0`
`pacman -Q qt6-base qt6-declarative` → `6.12.0-2`, `6.12.0-1`

Screenshots of the broken bar/menu versus the same build with the import pinned are available on request.

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.

No decision has been recorded yet.