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.
Tray: add a monochrome icon setting, with a documented app-side contract
Reported by dadofsambonzuki · filed Sep 14, 2026 · open at source
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
Proposal, not a bug report, and deliberately not a PR: I could not make a widget-side reskin that was worth shipping (see below), so this is a design question first.
Follows on from #8845 (icons are only tinted when the name ends in -symbolic) and #8159 (colorization cannot lighten a dark fill). #8844 and #7288 are the neighbouring cases.
What happens today
omarchy.traytints an icon only when its name ends in-symbolic.- Chromium publishes its tray icon as a raw bitmap with no
IconNameat all, so every Electron tray app is structurally excluded from tinting (ChatGPT, Proton Pass, Slack, Discord, Spotify, ...). D-Bus dump in #8845. - The widget's only colour maths is
MultiEffect.colorization(rgb = ink * luma(src), alpha untouched). It cannot lighten a dark source (#8159) and cannot preserve the detail inside a tile-shaped bitmap, so "tint everything" is not available either. SystemTrayItem.idis the SNIId, and Chromium hardcodeschrome_status_icon_1for all of them, so a per-app setting cannot address them individually.
Result: on a monochrome bar, a couple of brand-coloured icons that nothing in the shell can do anything about.
Proposal
- A tray setting (name to your taste -
monochrome,trayMonochrome, or atray.iconStyleenum) that, when enabled, prefers a monochrome rendering of any tray item that offers one and draws it in the bar ink. Existing-symbolictinting stays as it is.
- A documented app-side contract, because the widget cannot manufacture a monochrome icon: an app opts in by publishing an
IconNamethat resolves in the icon theme (with a-symbolicvariant) rather than a bitmap alone. That is the half that belongs to app producers - realistically a request to Chromium, since its behaviour is what forces every Electron app to ship a pixmap.
- Leave icons untouched when no monochrome form exists - do not synthesise one. Of the three options I measured, a coloured but recognisable icon is the least bad.
Why not a patch from me
I built and measured all three renderings on a real bar (flat silhouette, ink x luma, and luminance-normalise-then-ink). The best lands on the bar ink with the detail preserved, but it is still the widget inventing artwork the app never supplied, and at 12px it reads worse than the app's own icon. I reverted it and left the stock widget in place rather than send a reskin - happy to test whatever direction you prefer instead.
Questions
- Do you want the setting at all, or is the intended answer "icon theme / app side only, no widget change"?
- If yes: does the contract belong in the tray widget, in the icon theme convention, or in the plugin API so other bar widgets can honour it too?
- Any preference on naming (
monochromevsiconStyle)?
Happy to verify a patch on omarchy 4.0.3 / quickshell 0.3.1 / Qt 6.11.2 (Arch + Hyprland, transparent bar), with real tray items rather than a mock.
View raw text
Proposal, not a bug report, and deliberately not a PR: I could not make a widget-side reskin that was worth shipping (see below), so this is a design question first. Follows on from #8845 (icons are only tinted when the name ends in `-symbolic`) and #8159 (colorization cannot lighten a dark fill). #8844 and #7288 are the neighbouring cases. ## What happens today - `omarchy.tray` tints an icon only when its name ends in `-symbolic`. - Chromium publishes its tray icon as a raw bitmap with no `IconName` at all, so **every Electron tray app is structurally excluded** from tinting (ChatGPT, Proton Pass, Slack, Discord, Spotify, ...). D-Bus dump in #8845. - The widget's only colour maths is `MultiEffect.colorization` (`rgb = ink * luma(src)`, alpha untouched). It cannot lighten a dark source (#8159) and cannot preserve the detail inside a tile-shaped bitmap, so "tint everything" is not available either. - `SystemTrayItem.id` is the SNI `Id`, and Chromium hardcodes `chrome_status_icon_1` for all of them, so a per-app setting cannot address them individually. Result: on a monochrome bar, a couple of brand-coloured icons that nothing in the shell can do anything about. ## Proposal 1. **A tray setting** (name to your taste - `monochrome`, `trayMonochrome`, or a `tray.iconStyle` enum) that, when enabled, prefers a monochrome rendering of any tray item that offers one and draws it in the bar ink. Existing `-symbolic` tinting stays as it is. 2. **A documented app-side contract**, because the widget cannot manufacture a monochrome icon: an app opts in by publishing an `IconName` that resolves in the icon theme (with a `-symbolic` variant) rather than a bitmap alone. That is the half that belongs to app producers - realistically a request to Chromium, since its behaviour is what forces every Electron app to ship a pixmap. 3. **Leave icons untouched when no monochrome form exists** - do not synthesise one. Of the three options I measured, a coloured but recognisable icon is the least bad. ## Why not a patch from me I built and measured all three renderings on a real bar (flat silhouette, ink x luma, and luminance-normalise-then-ink). The best lands on the bar ink with the detail preserved, but it is still the widget inventing artwork the app never supplied, and at 12px it reads worse than the app's own icon. I reverted it and left the stock widget in place rather than send a reskin - happy to test whatever direction you prefer instead. ## Questions - Do you want the setting at all, or is the intended answer "icon theme / app side only, no widget change"? - If yes: does the contract belong in the tray widget, in the icon theme convention, or in the plugin API so other bar widgets can honour it too? - Any preference on naming (`monochrome` vs `iconStyle`)? Happy to verify a patch on omarchy 4.0.3 / quickshell 0.3.1 / Qt 6.11.2 (Arch + Hyprland, transparent bar), with real tray items rather than a mock.
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
- Related PRpr/14661· 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.
- Out of scopeDecided by agents · verified · 2026-10-09 13:18 UTC