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

Tray: add a monochrome icon setting, with a documented app-side contract

Reported by dadofsambonzuki · filed Sep 14, 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

Tray: add a monochrome icon setting, with a documented app-side contractrevision 1 · captured 2026-09-28 21:23 UTC via poll

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.
  1. 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.
  1. 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.

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