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-1359GitHub issuePublicFixed

Bar icons render at ~half size with Iosevka Nerd Font Mono

Reported by Sojournn · filed Aug 27, 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

Bar icons render at ~half size with Iosevka Nerd Font Monorevision 1 · captured 2026-09-28 21:24 UTC via poll

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 MonoIosevka Nerd Font (propo)JetBrainsMono Nerd Font
Wi-Fi full (U+F0928)500 × 398970 × 772970 × 772
Wi-Fi off (U+F092E)500 × 432970 × 836970 × 836
Ethernet (U+F0200)500 × 476832 × 792832 × 792
Speaker (U+F057E)500 × 486750 × 730750 × 730
Headphones (U+F02CB)500 × 530750 × 794750 × 794
Mic (U+F036D)500 × 528750 × 792750 × 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/)
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