Skip to main content

max / alloy

skel: single-cell icons in cell grids, and no emoji font Nerd Font icons live in the Private Use Area, which a terminal measures as one cell while the plain family draws them at roughly two, so the glyph paints over whatever follows it. The monospace alias moves to the Mono family, which constrains them to the cell the terminal allocated. In practice the overflow is usually hidden because yazi and starship pad icons with a trailing space, but that depends on every TUI author choosing to pad, and the failure is silent when one does not. The cost is real: the icons are smaller and fainter. Pango consumers are not a cell grid and keep the plain family. The emoji alias named Noto Color Emoji, which the image has never installed, so it resolved to whatever fontconfig picked next and emoji rendered as missing glyphs anyway. Alloy ships no emoji font and uses none in its own copy. Declining to ship one is a position; naming an absent one is a defect, so the alias is gone rather than repointed.
Co-Authored-By
Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-07-22 21:13 UTC
Signed with PGP, not checked
Commit: 64ce5212a6a2c81f583a8ce5f5f08f45d43e1de9
Parent: 24511f5
1 file changed, +26 insertions, -10 deletions
@@ -6,7 +6,7 @@
6 6 Optimized for reading. Every app that asks fontconfig for a generic
7 7 family (monospace, sans-serif, serif) gets Alloy's readability picks.
8 8
9 - - monospace -> IosevkaTerm Nerd Font (Term variant: no ligatures, safe for TUIs)
9 + - monospace -> IosevkaTerm Nerd Font Mono (Term: no ligatures; Mono: single-cell icons)
10 10 - sans-serif -> Atkinson Hyperlegible (max letter distinguishability)
11 11 - serif -> browser/system default; Alloy declines to prescribe
12 12
@@ -17,11 +17,18 @@
17 17 -->
18 18 <fontconfig>
19 19
20 - <!-- Monospace: IosevkaTerm Nerd Font -->
20 + <!-- Monospace: IosevkaTerm Nerd Font Mono.
21 + The "Mono" family, not the plain one. Nerd Font icons sit in the
22 + Private Use Area, which a terminal measures as one cell wide, while
23 + the plain family draws them at roughly two. The glyph then paints
24 + over whatever follows it. The Mono family is the same font with the
25 + icons constrained to a single cell, which is what a cell grid needs.
26 + Pango consumers (the bar, mako, swaylock) are not a cell grid and
27 + keep the plain family. -->
21 28 <alias>
22 29 <family>monospace</family>
23 30 <prefer>
24 - <family>IosevkaTerm Nerd Font</family>
31 + <family>IosevkaTerm Nerd Font Mono</family>
25 32 <family>Iosevka Term</family>
26 33 <family>Iosevka Nerd Font</family>
27 34 <family>Iosevka</family>
@@ -51,13 +58,22 @@
51 58 </prefer>
52 59 </alias>
53 60
54 - <!-- Emoji: system emoji font -->
55 - <alias>
56 - <family>emoji</family>
57 - <prefer>
58 - <family>Noto Color Emoji</family>
59 - </prefer>
60 - </alias>
61 + <!--
62 + Emoji: deliberately none.
63 +
64 + This aliased `emoji` to Noto Color Emoji, which the image has never
65 + installed, so the alias resolved to whatever fontconfig picked next
66 + (Atkinson Hyperlegible, in practice) and every emoji rendered as a
67 + missing glyph anyway. An alias naming a font that is not shipped
68 + reads as an oversight; the absence is the decision, so it is written
69 + as one here rather than left as a broken preference.
70 +
71 + Alloy ships no emoji font and does not use emoji in its own copy
72 + (docs/STACK.md, and the brand rules). Emoji in a web page or a
73 + third-party notification will show as missing glyphs. Anyone who
74 + wants them installs an emoji font; nothing here has to change for
75 + that to work, because fontconfig will pick it up on its own.
76 + -->
61 77
62 78 <!--
63 79 Rendering defaults — screen-readable, no antialiasing tricks