Skip to main content

max / alloy

Name only fonts the image installs in the fontconfig chain Nine of the thirteen families in the alias lists were not in the rootfs, so the file described a depth of fallback it did not have. Monospace now shows what it always was: one link, then Fedora's generic rules. Serif names Liberation Serif, which is what the image carries, instead of leading with two Source Serif spellings under a comment that said Alloy declined to prescribe. Dropping Inter from sans is the one behavioural change: it never served a request, but it silently repointed the UI font for anyone who installed Inter for something else.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-16 18:17 UTC
Signed with PGP, not checked
Commit: 3c93b7146690e8847baf53eeab9a7b742c839f30
Parent: 2d05dd9
3 files changed, +53 insertions, -33 deletions
M docs/FONTS.md +24 -18
@@ -113,28 +113,34 @@
113 113 | Alias | Order | In the image? |
114 114 |---|---|---|
115 115 | `monospace` | IosevkaTerm Nerd Font Mono | yes, 81 faces under `iosevkaterm-nerd` |
116 - | | Iosevka Term | no |
117 - | | Iosevka Nerd Font | no |
118 - | | Iosevka | no |
119 - | | DejaVu Sans Mono | no |
120 116 | `sans-serif` | Atkinson Hyperlegible | yes |
121 - | | Inter | no |
122 117 | | Cantarell | yes, `abattis-cantarell-vf-fonts` |
123 - | | DejaVu Sans | no |
124 - | `serif` | Source Serif 4 | no |
125 - | | Source Serif Pro | no |
126 - | | Liberation Serif | yes |
127 - | | DejaVu Serif | no |
118 + | `serif` | Liberation Serif | yes |
128 119 | `emoji` | (deliberately absent) | no emoji font is installed |
129 120
130 - **Six of the fourteen named families are not in the image.** They cost nothing at
131 - runtime, because `<prefer>` skips what is absent, and they are not the emoji-alias defect
132 - (that alias changed where emoji resolved to; these do not change anything). They are a
133 - reading hazard rather than a rendering one: the list looks like a depth of fallback that
134 - is not there. The monospace chain in particular has exactly one live entry, so if
135 - IosevkaTerm ever failed to install, resolution would drop past four dead names straight
136 - into Fedora's own generic rules. Whether the dead names get deleted or annotated is GO
137 - task `6aeeb122`.
121 + **Every family named is installed.** That is new as of 2026-08-16: nine of the thirteen
122 + names this list used to carry were not in the image, and they were deleted (GO task
123 + `6aeeb122`, settled by Max as "delete"; the edit is `29390a99`). Gone from `monospace`:
124 + Iosevka Term, Iosevka Nerd Font, Iosevka, DejaVu Sans Mono. From `sans-serif`: Inter,
125 + DejaVu Sans. From `serif`: Source Serif 4, Source Serif Pro, DejaVu Serif.
126 +
127 + They cost nothing at runtime, because `<prefer>` skips what is absent, and they were not
128 + the emoji-alias defect (that alias changed where emoji resolved to; these changed
129 + nothing). They were a reading hazard: the list looked like a depth of fallback that was
130 + not there.
131 +
132 + **What the shortened `monospace` list makes visible is that the chain has one link.** If
133 + IosevkaTerm ever failed to install, resolution does not reach a second Alloy pick. It
134 + drops straight into Fedora's generic rules (`45-latin.conf`, `60-latin.conf`) and lands
135 + on whatever those order first, which is the layer described below. The four dead Iosevka
136 + spellings obscured exactly that.
137 +
138 + **Removing Inter changed one behaviour, and it is the one deletion that was not only
139 + tidying.** Inter is not in the image, so it never served a request. What it did do was
140 + sit at position 2 of `sans-serif`, so anyone who installed Inter for an unrelated app
141 + silently repointed Alloy's whole UI font. Preferring Inter is still supported and is
142 + still what STACK.md describes: an edit to the alias and to `gtk-font-name`, which is a
143 + choice rather than a side effect of having the font on disk.
138 144
139 145 **What actually catches a gap is the layer below this file**, and it is worth naming
140 146 because the chain above suggests otherwise:
M docs/STACK.md +2 -2
@@ -588,9 +588,9 @@
588 588
589 589 Rejected: Inter (excellent but less legibility-maximized; kept as documented alternate), IBM Plex Sans (corporate-shaped), Roboto/Cantarell (default-neutral, no advantage over Atkinson), Iosevka Aile (family coherence appealing but Aile isn't as readable at small sizes as dedicated UI fonts).
590 590
591 - ### Serif: **not shipped**
591 + ### Serif: **Liberation Serif, by inventory rather than by choice**
592 592
593 - Alloy declines to prescribe. Nothing Alloy authors is serif; the browser and any long-form reading surface fall through to the system default (Source Serif 4 or Liberation Serif on Fedora). fontconfig alias covers the fallback chain politely without adopting a serif font as an Alloy commitment.
593 + Alloy has no serif thesis. Nothing Alloy authors is serif, and no long-form reading surface it ships is either. The `serif` alias names Liberation Serif because that is the one serif the image installs, so the alias resolves somewhere known instead of somewhere unstated. It used to lead with Source Serif 4 and Source Serif Pro, neither of which is in the image, under a comment saying Alloy declined to prescribe; that read as a commitment nobody had made and a fallback nobody had. Naming what is on disk is the statement of fact. If Alloy ever wants a serif, this is the line to change and STACK.md is where the argument goes.
594 594
595 595 ### Non-Latin scripts: **Fedora's coverage metapackages**
596 596
@@ -8,7 +8,11 @@
8 8
9 9 - monospace -> IosevkaTerm Nerd Font Mono (Term: no ligatures; Mono: single-cell icons)
10 10 - sans-serif -> Atkinson Hyperlegible (max letter distinguishability)
11 - - serif -> browser/system default; Alloy declines to prescribe
11 + - serif -> Liberation Serif, the one serif the image installs
12 +
13 + Every family named below is installed in the image. Names that were not
14 + were deleted 2026-08-16: a preference list is read as a depth of fallback,
15 + and a name fontconfig silently skips is a claim the file cannot back.
12 16
13 17 Departure Mono is *not* here — it is the Alloy brand mark, invoked
14 18 by name where wanted (marquee UI, headers), never as a generic family.
@@ -24,37 +28,47 @@
24 28 over whatever follows it. The Mono family is the same font with the
25 29 icons constrained to a single cell, which is what a cell grid needs.
26 30 Pango consumers (the bar, mako, swaylock) are not a cell grid and
27 - keep the plain family. -->
31 + keep the plain family.
32 +
33 + One entry, and that is the whole chain. If IosevkaTerm ever failed
34 + to install, monospace would not resolve to a second Alloy pick: it
35 + would drop straight into Fedora's generic rules (45-latin.conf,
36 + 60-latin.conf) and land on whatever those order first. The four
37 + Iosevka spellings that used to sit here were never in the image, so
38 + they described a fallback that did not exist. -->
28 39 <alias>
29 40 <family>monospace</family>
30 41 <prefer>
31 42 <family>IosevkaTerm Nerd Font Mono</family>
32 - <family>Iosevka Term</family>
33 - <family>Iosevka Nerd Font</family>
34 - <family>Iosevka</family>
35 - <family>DejaVu Sans Mono</family>
36 43 </prefer>
37 44 </alias>
38 45
39 - <!-- Sans-serif: Atkinson Hyperlegible -->
46 + <!-- Sans-serif: Atkinson Hyperlegible, then Cantarell.
47 + Cantarell is here because the image installs it, not as a design
48 + pick. Inter used to sit between them and is gone: it is not in the
49 + image either, so its only effect was to repoint the whole UI font
50 + for anyone who installed Inter for some unrelated app. Preferring
51 + Inter is still a supported swap, and it is an edit to this file
52 + (docs/STACK.md, "Sans"), not a side effect of having it on disk. -->
40 53 <alias>
41 54 <family>sans-serif</family>
42 55 <prefer>
43 56 <family>Atkinson Hyperlegible</family>
44 - <family>Inter</family>
45 57 <family>Cantarell</family>
46 - <family>DejaVu Sans</family>
47 58 </prefer>
48 59 </alias>
49 60
50 - <!-- Serif: leave to system. Alloy declines to prescribe. -->
61 + <!-- Serif: Liberation Serif.
62 + Alloy has no serif thesis and reads nothing long in one. This names
63 + the serif the image already carries so the alias resolves somewhere
64 + known, which is a statement of fact rather than a design pick. The
65 + three Source Serif and DejaVu spellings that used to lead this list
66 + were not installed, so the file prescribed four families under a
67 + comment that said it declined to prescribe. -->
51 68 <alias>
52 69 <family>serif</family>
53 70 <prefer>
54 - <family>Source Serif 4</family>
55 - <family>Source Serif Pro</family>
56 71 <family>Liberation Serif</family>
57 - <family>DejaVu Serif</family>
58 72 </prefer>
59 73 </alias>
60 74