Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
Qt 6.12: QtQuick.Color shadows qs.Commons.Color singleton — menus render as a fullscreen black screen
Reported by playGitboy · 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.
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
Summary
After today's system update to Qt 6.12, every Quickshell surface that uses the shell's Color singleton renders as solid black. The most visible symptom is that SUPER+SPACE (root menu) and SUPER+ESCAPE (system menu) both turn the whole screen black — the omarchy-menu layer paints an opaque black fullscreen rectangle instead of the menu card.
Root cause: `QtQuick.Color` is a new built-in QML type in Qt 6.12, and it now shadows Omarchy's `qs.Commons.Color` singleton. This is not fixed by rebuilding quickshell (see "Why rebuilding quickshell does not help").
Steps to reproduce
sudo pacman -Syu— bringsqt6-base 6.11.2 -> 6.12.0andqt6-declarative 6.11.2 -> 6.12.0- Restart the shell (
omarchy restart shell) or reboot - Press SUPER+SPACE, or SUPER+ESCAPE
Expected
The Omarchy menu opens as a rounded card over a dimmed desktop.
Actual
The entire screen turns opaque black. Pressing SUPER+ALT+SPACE, SUPER+CTRL+SPACE (background switcher) and SUPER+SHIFT+CTRL+SPACE (theme menu) — all the same omarchy-menu layer — are affected too. The bar loses its themed colors as well.
Screenshot
Black screen on omarchy menu summon root (1920x1080, nothing but black):
<!-- attach: menu-black.png -->
Root cause
Qt 6.12 added Color as a built-in QtQuick QML singleton (QQuickColor):
- https://doc.qt.io/qt-6.12/newclasses612.html —
Coloris listed under "New QML Types" for Qt 6.12 - https://doc.qt.io/qt-6.12/qml-qtquick-color.html — 404 on the same path for qt-6.9 / qt-6.10 / qt-6.11
Omarchy's shell declares its own singleton named Color in /usr/share/omarchy/shell/Commons/qmldir:
module qs.Commons
singleton Border 1.0 Border.qml
singleton Color 1.0 Color.qml # <-- collides with the new QtQuick.Color
singleton Style 1.0 Style.qml
singleton Util 1.0 Util.qmlShell QML files import both modules unqualified:
import QtQuick
import Quickshell
import qs.Commonsso every reference to Color.<surface>.<role> now binds to QtQuick's built-in Color singleton instead of qs.Commons.Color. Color.menu (and Color.bar, Color.lock, Color.polkit, …) is undefined, and the resulting bindings feed undefined into color properties.
Verification (isolated repro, no Omarchy code involved)
A minimal Quickshell config importing the real /usr/share/omarchy/shell/Commons modules:
import QtQuick
import Quickshell
import qs.Commons
import qs.Commons as QCunqualified Color -> QQuickColor(0x7f2f57fd4a80) <-- QtQuick built-in, WRONG
QC.Color -> Color_QMLTYPE_10(0x7f2f60680ee0) <-- qs.Commons singleton, correct
QC.Color.menu.background -> #101315
QC.Color.menu.text -> #cacccc
QC.Color.menu.scrim -> #80101315
typeof Color.menu -> undefinedSo the singleton itself is registered correctly — only the unqualified name lookup now prefers the built-in type.
Why the screen goes black
Ui/OverlayWindow.qml (a fullscreen PanelWindow) sets color: "transparent", and plugins/menu/Menu.qml puts a fullscreen scrim inside it:
OverlayWindow {
id: panel
shown: root.opened && root.rowsLoaded
WlrLayershell.namespace: "omarchy-menu"
...
Rectangle {
anchors.fill: parent
color: root.scrim // root.scrim = Color.menu.scrim -> undefined
}An invalid / `undefined` `color` renders as opaque black in Qt Quick (verified with a standalone fullscreen PanelWindow + Rectangle { anchors.fill: parent; property color bad: undefined; color: bad }):
fullscreen PanelWindow, color: "transparent", no children -> #84BEFD (wallpaper shows through)
fullscreen PanelWindow + Rectangle with undefined color -> #000000 (opaque black)hyprctl layers while the menu is "open":
Monitor HEADLESS-1:
Layer 55e2d5f46e70: xywh: 0 0 1536 26, a: 1, namespace: omarchy-bar, pid: 6864
Layer 55e2d5f31860: xywh: 0 0 1536 864, a: 1, namespace: omarchy-menu, pid: 6864Shell log evidence
The shell log (/run/user/1000/quickshell/by-id/<id>/log.qslog) is full of this pattern right after startup:
file:///usr/share/omarchy/shell/plugins/menu/Menu.qml[91:-1]: TypeError: Cannot read property 'scrim' of undefined
file:///usr/share/omarchy/shell/plugins/menu/Menu.qml[87:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/Commons/Border.qml[25:-1]: TypeError: Cannot read property 'menu.border-alpha' of undefined
@Ui/Button.qml[35:3]: Unable to assign [undefined] to QColor
file:///usr/share/omarchy/shell/plugins/clipboard/Clipboard.qml[25:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/plugins/emojis/Emojis.qml[26:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/plugins/osd/Osd.qml[143:-1]: TypeError: Cannot read property 'border' of undefined
file:///usr/share/omarchy/shell/plugins/lock/...: TypeError: ...Impact
Coloris used in 66 of 90 stock shell QML files, and in 14 installed third-party plugin files under~/.config/omarchy/plugins— so first-party and community plugins break together.- Affected surfaces: menu, bar, notifications, lock screen, polkit, OSD, clipboard, emoji picker, image picker, reminders, confirm dialogs.
- Community plugins that read
Color.*are also broken and cannot be fixed from their own side.
Why rebuilding quickshell does not help
Quickshell prints this on every start:
WARN: Quickshell was built against Qt 6.11.2 but the system has updated to Qt 6.12.0
without rebuilding the package. This is likely to cause crashes, so the quickshell
package must be rebuilt.That warning is real but it is not the cause of this bug, and rebuilding quickshell will not fix it. Type-name resolution for import qs.Commons happens inside Qt's QML engine (libQt6Qml), not inside quickshell — the isolated repro above resolves the same way regardless of which quickshell build is installed. Rebuilding quickshell against 6.12 is still worth doing for its own sake, but the menu will stay black.
Suggested fix
Do not rely on an unqualified Color identifier. Options, cheapest first:
- Namespace the import —
import qs.Commons as Commons, thenCommons.Color.menu.background. Verified working. Downside: touches ~66 files and breaks the public plugin API, so every third-party plugin would need updating too. - Rename the singleton so it can never collide again — e.g.
singleton ShellColor 1.0 Color.qml, keepingColor.qmlas a thin re-export shim so existing plugins keep compiling during the transition. This is a one-line change inCommons/qmldirplus a mechanical rename in the shell. - Rename the file only and let
qmldirkeep exporting it asColor— insufficient on its own, because the collision is on the type name, not the filename.
Option 2 looks like the best trade-off: it is additive, it fixes first-party code, and it lets the plugin ecosystem migrate at its own pace.
Workaround until fixed
Pin Qt to 6.11.2, e.g. in /etc/pacman.conf:
IgnorePkg = qt6-base qt6-declarative qt6-svg qt6-wayland qt6-shadertools qt6-5compat \
qt6-imageformats qt6-multimedia qt6-multimedia-ffmpeg qt6-networkauth \
qt6-positioning qt6-speech qt6-translations qt6-webchannelThen sudo pacman -Syu and omarchy restart shell.
System details
Omarchy: 4.0.0.r6807.g902fd8a-1
Kernel: 7.2.8-5-omarchy-bore (x86_64)
Hyprland: 0.56.2
Quickshell: 0.3.1-1 (built against Qt 6.11.2)
Qt: qt6-base 6.12.0-2, qt6-declarative 6.12.0-1
GPU: AMD Radeon 680M (amdgpu), WaylandUpdate that triggered it (/var/log/pacman.log, 2026-10-08 16:47):
[ALPM] upgraded qt6-base (6.11.2-3 -> 6.12.0-2)
[ALPM] upgraded qt6-declarative (6.11.2-2 -> 6.12.0-1)
[ALPM] upgraded qt6-wayland (6.11.2-1 -> 6.12.0-1)
[ALPM] upgraded qt6-svg (6.11.2-1 -> 6.12.0-1)
...View raw text
## Summary
After today's system update to **Qt 6.12**, every Quickshell surface that uses the shell's `Color` singleton renders as solid black. The most visible symptom is that **SUPER+SPACE (root menu) and SUPER+ESCAPE (system menu) both turn the whole screen black** — the `omarchy-menu` layer paints an opaque black fullscreen rectangle instead of the menu card.
**Root cause: `QtQuick.Color` is a new built-in QML type in Qt 6.12, and it now shadows Omarchy's `qs.Commons.Color` singleton.** This is *not* fixed by rebuilding quickshell (see "Why rebuilding quickshell does not help").
## Steps to reproduce
1. `sudo pacman -Syu` — brings `qt6-base 6.11.2 -> 6.12.0` and `qt6-declarative 6.11.2 -> 6.12.0`
2. Restart the shell (`omarchy restart shell`) or reboot
3. Press SUPER+SPACE, or SUPER+ESCAPE
## Expected
The Omarchy menu opens as a rounded card over a dimmed desktop.
## Actual
The entire screen turns opaque black. Pressing SUPER+ALT+SPACE, SUPER+CTRL+SPACE (background switcher) and SUPER+SHIFT+CTRL+SPACE (theme menu) — all the same `omarchy-menu` layer — are affected too. The bar loses its themed colors as well.
### Screenshot
Black screen on `omarchy menu summon root` (1920x1080, nothing but black):
<!-- attach: menu-black.png -->
## Root cause
Qt 6.12 added `Color` as a **built-in QtQuick QML singleton** (`QQuickColor`):
- https://doc.qt.io/qt-6.12/newclasses612.html — `Color` is listed under **"New QML Types"** for Qt 6.12
- https://doc.qt.io/qt-6.12/qml-qtquick-color.html — 404 on the same path for qt-6.9 / qt-6.10 / qt-6.11
Omarchy's shell declares its own singleton named `Color` in `/usr/share/omarchy/shell/Commons/qmldir`:
```
module qs.Commons
singleton Border 1.0 Border.qml
singleton Color 1.0 Color.qml # <-- collides with the new QtQuick.Color
singleton Style 1.0 Style.qml
singleton Util 1.0 Util.qml
```
Shell QML files import both modules unqualified:
```qml
import QtQuick
import Quickshell
import qs.Commons
```
so every reference to `Color.<surface>.<role>` now binds to QtQuick's built-in `Color` singleton instead of `qs.Commons.Color`. `Color.menu` (and `Color.bar`, `Color.lock`, `Color.polkit`, …) is `undefined`, and the resulting bindings feed `undefined` into `color` properties.
### Verification (isolated repro, no Omarchy code involved)
A minimal Quickshell config importing the real `/usr/share/omarchy/shell/Commons` modules:
```
import QtQuick
import Quickshell
import qs.Commons
import qs.Commons as QC
```
```
unqualified Color -> QQuickColor(0x7f2f57fd4a80) <-- QtQuick built-in, WRONG
QC.Color -> Color_QMLTYPE_10(0x7f2f60680ee0) <-- qs.Commons singleton, correct
QC.Color.menu.background -> #101315
QC.Color.menu.text -> #cacccc
QC.Color.menu.scrim -> #80101315
typeof Color.menu -> undefined
```
So the singleton itself is registered correctly — only the **unqualified name lookup** now prefers the built-in type.
### Why the screen goes black
`Ui/OverlayWindow.qml` (a fullscreen `PanelWindow`) sets `color: "transparent"`, and `plugins/menu/Menu.qml` puts a fullscreen scrim inside it:
```qml
OverlayWindow {
id: panel
shown: root.opened && root.rowsLoaded
WlrLayershell.namespace: "omarchy-menu"
...
Rectangle {
anchors.fill: parent
color: root.scrim // root.scrim = Color.menu.scrim -> undefined
}
```
An **invalid / `undefined` `color` renders as opaque black** in Qt Quick (verified with a standalone fullscreen `PanelWindow` + `Rectangle { anchors.fill: parent; property color bad: undefined; color: bad }`):
```
fullscreen PanelWindow, color: "transparent", no children -> #84BEFD (wallpaper shows through)
fullscreen PanelWindow + Rectangle with undefined color -> #000000 (opaque black)
```
`hyprctl layers` while the menu is "open":
```
Monitor HEADLESS-1:
Layer 55e2d5f46e70: xywh: 0 0 1536 26, a: 1, namespace: omarchy-bar, pid: 6864
Layer 55e2d5f31860: xywh: 0 0 1536 864, a: 1, namespace: omarchy-menu, pid: 6864
```
### Shell log evidence
The shell log (`/run/user/1000/quickshell/by-id/<id>/log.qslog`) is full of this pattern right after startup:
```
file:///usr/share/omarchy/shell/plugins/menu/Menu.qml[91:-1]: TypeError: Cannot read property 'scrim' of undefined
file:///usr/share/omarchy/shell/plugins/menu/Menu.qml[87:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/Commons/Border.qml[25:-1]: TypeError: Cannot read property 'menu.border-alpha' of undefined
@Ui/Button.qml[35:3]: Unable to assign [undefined] to QColor
file:///usr/share/omarchy/shell/plugins/clipboard/Clipboard.qml[25:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/plugins/emojis/Emojis.qml[26:-1]: TypeError: Cannot read property 'background' of undefined
file:///usr/share/omarchy/shell/plugins/osd/Osd.qml[143:-1]: TypeError: Cannot read property 'border' of undefined
file:///usr/share/omarchy/shell/plugins/lock/...: TypeError: ...
```
## Impact
- `Color` is used in **66 of 90** stock shell QML files, and in **14 installed third-party plugin files** under `~/.config/omarchy/plugins` — so first-party and community plugins break together.
- Affected surfaces: menu, bar, notifications, lock screen, polkit, OSD, clipboard, emoji picker, image picker, reminders, confirm dialogs.
- Community plugins that read `Color.*` are also broken and cannot be fixed from their own side.
## Why rebuilding quickshell does not help
Quickshell prints this on every start:
```
WARN: Quickshell was built against Qt 6.11.2 but the system has updated to Qt 6.12.0
without rebuilding the package. This is likely to cause crashes, so the quickshell
package must be rebuilt.
```
That warning is real but it is **not** the cause of this bug, and rebuilding quickshell will not fix it. Type-name resolution for `import qs.Commons` happens inside Qt's QML engine (`libQt6Qml`), not inside quickshell — the isolated repro above resolves the same way regardless of which quickshell build is installed. Rebuilding quickshell against 6.12 is still worth doing for its own sake, but the menu will stay black.
## Suggested fix
Do not rely on an unqualified `Color` identifier. Options, cheapest first:
1. **Namespace the import** — `import qs.Commons as Commons`, then `Commons.Color.menu.background`. Verified working. Downside: touches ~66 files and breaks the public plugin API, so every third-party plugin would need updating too.
2. **Rename the singleton** so it can never collide again — e.g. `singleton ShellColor 1.0 Color.qml`, keeping `Color.qml` as a thin re-export shim so existing plugins keep compiling during the transition. This is a one-line change in `Commons/qmldir` plus a mechanical rename in the shell.
3. **Rename the file only** and let `qmldir` keep exporting it as `Color` — insufficient on its own, because the collision is on the *type name*, not the filename.
Option 2 looks like the best trade-off: it is additive, it fixes first-party code, and it lets the plugin ecosystem migrate at its own pace.
## Workaround until fixed
Pin Qt to 6.11.2, e.g. in `/etc/pacman.conf`:
```ini
IgnorePkg = qt6-base qt6-declarative qt6-svg qt6-wayland qt6-shadertools qt6-5compat \
qt6-imageformats qt6-multimedia qt6-multimedia-ffmpeg qt6-networkauth \
qt6-positioning qt6-speech qt6-translations qt6-webchannel
```
Then `sudo pacman -Syu` and `omarchy restart shell`.
## System details
```
Omarchy: 4.0.0.r6807.g902fd8a-1
Kernel: 7.2.8-5-omarchy-bore (x86_64)
Hyprland: 0.56.2
Quickshell: 0.3.1-1 (built against Qt 6.11.2)
Qt: qt6-base 6.12.0-2, qt6-declarative 6.12.0-1
GPU: AMD Radeon 680M (amdgpu), Wayland
```
Update that triggered it (`/var/log/pacman.log`, 2026-10-08 16:47):
```
[ALPM] upgraded qt6-base (6.11.2-3 -> 6.12.0-2)
[ALPM] upgraded qt6-declarative (6.11.2-2 -> 6.12.0-1)
[ALPM] upgraded qt6-wayland (6.11.2-1 -> 6.12.0-1)
[ALPM] upgraded qt6-svg (6.11.2-1 -> 6.12.0-1)
...
```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.