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.
Bar icons render at ~half size with Iosevka Nerd Font Mono
Reported by Sojournn · filed Aug 27, 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
Bar icons render at ~half size with Iosevka Nerd Font Mono
Summary
With Iosevka Nerd Font Mono selected as the monospace font (omarchy font set "Iosevka Nerd Font Mono"), the top-bar icons (network, audio, bluetooth, power, monitor, indicators, etc.) render at roughly half the visual size they do with other Nerd Fonts (e.g. JetBrainsMono Nerd Font or Iosevka Nerd Font / Propo).
Steps to reproduce
omarchy font set "Iosevka Nerd Font Mono"- Restart the shell (
omarchy restart shell), or the bar follows the fontconfig alias on next reload. - Look at the bar icons (Wi-Fi, volume, Bluetooth, power).
Expected
Bar icons render at a consistent optical size regardless of which Nerd Font is selected, so changing fonts doesn't shrink/grow the icons.
Actual
With Iosevka Nerd Font Mono the icons are roughly half the size they are under other Nerd Fonts, e.g.:
<img width="2560" height="1440" alt="Image" src="https://github.com/user-attachments/assets/0971a155-c061-4c25-842b-a7a0360aa26d" />
Root cause analysis
The bar renders each icon as a single Nerd Font glyph at a fixed pixel size — Style.bar.iconFont (default 13px, ~15px here because ~/.config/omarchy/shell.toml sets [font] base-size = 14) — inside OpticalGlyph / BarIconButton (/usr/share/omarchy/shell/Ui/). The painted size of that glyph depends entirely on how each font draws the icon inside its em box.
Measured glyph bounding boxes (font units per 1000-unit em, at the same codepoints):
| Icon (codepoint) | Iosevka Nerd Font Mono | Iosevka Nerd Font (propo) | JetBrainsMono Nerd Font |
|---|---|---|---|
| Wi-Fi full (U+F0928) | 500 × 398 | 970 × 772 | 970 × 772 |
| Wi-Fi off (U+F092E) | 500 × 432 | 970 × 836 | 970 × 836 |
| Ethernet (U+F0200) | 500 × 476 | 832 × 792 | 832 × 792 |
| Speaker (U+F057E) | 500 × 486 | 750 × 730 | 750 × 730 |
| Headphones (U+F02CB) | 500 × 530 | 750 × 794 | 750 × 794 |
| Mic (U+F036D) | 500 × 528 | 750 × 792 | 750 × 792 |
So Iosevka Nerd Font Mono patches icon glyphs at ~50% of the em box, while other Nerd Fonts use ~75–97%. At the fixed 13px iconFont, the Wi-Fi icon paints at ~6.5px under Mono vs ~12.6px elsewhere — hence "too small."
This is also why the audio panel already carries a per-glyph workaround (panels/audio/Panel.qml, comment: "The Material Design speaker icons render visually smaller in JetBrainsMono Nerd Font"). That approach is per-glyph and per-font and doesn't generalize.
Suggested fix
Make bar icon sizing metric-aware ("optical sizing") instead of fixed-pixel:
- In
shell/Ui/OpticalGlyph.qml, measure the glyph's tight bounding rect (theTextMetricsmachinery already exists there for the horizontal correction), and scale the rendered font size so the painted icon hits the target size (≈Style.bar.iconFont). - Center the painted glyph on the canvas on both axes (today only the horizontal offset is corrected —
anchors.horizontalCenterOffset). - Clamp the computed scale so a degenerate/missing glyph can't produce an absurd font size.
- Gate it behind an opt-in property so the vertical clock digits (
panels/clock/BarWidget.qml) and the polkit fingerprint glyph are unaffected;BarIconButtonenables it.
Result: icons render at a consistent visual size across every Nerd Font, with no per-glyph or per-font hardcoding.
Related: [bar] icon-* tokens (icon-font, icon-canvas, icon-slot) are not parsed from shell.toml — Style.qml's applyShellValues only reads size-horizontal, size-vertical, and scale-with-font from the [bar] section — so users currently have no config knob for icon size.
Environment
- Omarchy 4.0.1-1 (stable)
- Linux 7.1.9-arch1-2, x86_64
- Hyprland 0.56.2 (Wayland)
- Theme: Gruvbox;
~/.config/omarchy/shell.toml=[font] base-size = 14 - Fonts: Iosevka Nerd Font Mono / Iosevka Nerd Font / Iosevka Nerd Font Propo / JetBrainsMono Nerd Font (all from
/usr/share/fonts/TTF/)
View raw text
## Bar icons render at ~half size with Iosevka Nerd Font Mono
### Summary
With **Iosevka Nerd Font Mono** selected as the monospace font (`omarchy font set "Iosevka Nerd Font Mono"`), the top-bar icons (network, audio, bluetooth, power, monitor, indicators, etc.) render at roughly half the visual size they do with other Nerd Fonts (e.g. JetBrainsMono Nerd Font or Iosevka Nerd Font / Propo).
### Steps to reproduce
1. `omarchy font set "Iosevka Nerd Font Mono"`
2. Restart the shell (`omarchy restart shell`), or the bar follows the fontconfig alias on next reload.
3. Look at the bar icons (Wi-Fi, volume, Bluetooth, power).
### Expected
Bar icons render at a consistent optical size regardless of which Nerd Font is selected, so changing fonts doesn't shrink/grow the icons.
### Actual
With Iosevka Nerd Font Mono the icons are roughly half the size they are under other Nerd Fonts, e.g.:
<img width="2560" height="1440" alt="Image" src="https://github.com/user-attachments/assets/0971a155-c061-4c25-842b-a7a0360aa26d" />
### Root cause analysis
The bar renders each icon as a single Nerd Font glyph at a **fixed pixel size** — `Style.bar.iconFont` (default 13px, ~15px here because `~/.config/omarchy/shell.toml` sets `[font] base-size = 14`) — inside `OpticalGlyph` / `BarIconButton` (`/usr/share/omarchy/shell/Ui/`). The *painted* size of that glyph depends entirely on how each font draws the icon inside its em box.
Measured glyph bounding boxes (font units per 1000-unit em, at the same codepoints):
| Icon (codepoint) | Iosevka Nerd Font Mono | Iosevka Nerd Font (propo) | JetBrainsMono Nerd Font |
|---|---|---|---|
| Wi-Fi full (U+F0928) | 500 × 398 | 970 × 772 | 970 × 772 |
| Wi-Fi off (U+F092E) | 500 × 432 | 970 × 836 | 970 × 836 |
| Ethernet (U+F0200) | 500 × 476 | 832 × 792 | 832 × 792 |
| Speaker (U+F057E) | 500 × 486 | 750 × 730 | 750 × 730 |
| Headphones (U+F02CB) | 500 × 530 | 750 × 794 | 750 × 794 |
| Mic (U+F036D) | 500 × 528 | 750 × 792 | 750 × 792 |
So Iosevka Nerd Font Mono patches icon glyphs at ~50% of the em box, while other Nerd Fonts use ~75–97%. At the fixed 13px `iconFont`, the Wi-Fi icon paints at ~6.5px under Mono vs ~12.6px elsewhere — hence "too small."
This is also why the audio panel already carries a per-glyph workaround (`panels/audio/Panel.qml`, comment: *"The Material Design speaker icons render visually smaller in JetBrainsMono Nerd Font"*). That approach is per-glyph and per-font and doesn't generalize.
### Suggested fix
Make bar icon sizing metric-aware ("optical sizing") instead of fixed-pixel:
- In `shell/Ui/OpticalGlyph.qml`, measure the glyph's tight bounding rect (the `TextMetrics` machinery already exists there for the horizontal correction), and scale the rendered font size so the painted icon hits the target size (≈ `Style.bar.iconFont`).
- Center the painted glyph on the canvas on **both** axes (today only the horizontal offset is corrected — `anchors.horizontalCenterOffset`).
- Clamp the computed scale so a degenerate/missing glyph can't produce an absurd font size.
- Gate it behind an opt-in property so the vertical clock digits (`panels/clock/BarWidget.qml`) and the polkit fingerprint glyph are unaffected; `BarIconButton` enables it.
Result: icons render at a consistent visual size across every Nerd Font, with no per-glyph or per-font hardcoding.
Related: `[bar] icon-*` tokens (`icon-font`, `icon-canvas`, `icon-slot`) are **not** parsed from `shell.toml` — `Style.qml`'s `applyShellValues` only reads `size-horizontal`, `size-vertical`, and `scale-with-font` from the `[bar]` section — so users currently have no config knob for icon size.
### Environment
- Omarchy 4.0.1-1 (stable)
- Linux 7.1.9-arch1-2, x86_64
- Hyprland 0.56.2 (Wayland)
- Theme: Gruvbox; `~/.config/omarchy/shell.toml` = `[font] base-size = 14`
- Fonts: Iosevka Nerd Font Mono / Iosevka Nerd Font / Iosevka Nerd Font Propo / JetBrainsMono Nerd Font (all from `/usr/share/fonts/TTF/`)- 0971a155-c061-4c25-842b-a7a0360aa26d
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
- Fixed bypr/15065· 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 09:35 UTC