Skip to main content

max / alloy

5.3 KB · 116 lines History Blame Raw
1 <?xml version="1.0"?>
2 <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
3 <!--
4 Alloy fontconfig
5 ================
6 Optimized for reading. Every app that asks fontconfig for a generic
7 family (monospace, sans-serif, serif) gets Alloy's readability picks.
8
9 - monospace -> Quasi Mono (the house face: Atkinson Hyperlegible Mono
10 plus the marks and cell furniture we draw)
11 - sans-serif -> Quasi Body (its sans half, same superfamily, same axis)
12 - serif -> Liberation Serif, the one serif the image installs
13
14 Every family named below is installed in the image. Names that were not
15 were deleted 2026-08-16: a preference list is read as a depth of fallback,
16 and a name fontconfig silently skips is a claim the file cannot back.
17
18 Departure Mono is *not* here — it is the Alloy brand mark, invoked
19 by name where wanted (marquee UI, headers), never as a generic family.
20
21 Source of truth: docs/STACK.md ("Fonts" section) and docs/TOKENS.md.
22 -->
23 <fontconfig>
24
25 <!-- Monospace: Quasi Mono.
26 The house face, cut by `quasi-type` from Atkinson Hyperlegible Mono
27 with the house glyph set drawn into it: box drawing, block elements,
28 the four arrows and the seven marks Alloy's own surfaces emit. There
29 is no Term/Mono family split any more, because there is no Private
30 Use Area to constrain — the glyphs the Nerd Font patch was carrying
31 are drawn into this face at its own weight and its own advance.
32
33 One entry, and that is the whole chain. If it ever failed to install,
34 monospace would not resolve to a second Alloy pick: it would drop
35 straight into Fedora's generic rules (45-latin.conf, 60-latin.conf)
36 and land on whatever those order first.
37
38 The face is variable, `wght` 200-800, and its own default instance is
39 ExtraLight — a cut keeps its base's default. fontconfig enumerates a
40 variable font's named instances, so an unweighted query resolves to
41 Regular and nothing here has to say so; a consumer that loads the file
42 directly does have to name a weight. The build asserts the resolved
43 weight for exactly this reason. -->
44 <alias>
45 <family>monospace</family>
46 <prefer>
47 <family>Quasi Mono</family>
48 </prefer>
49 </alias>
50
51 <!-- Sans-serif: Quasi Body, then Cantarell.
52 The same superfamily as the mono, on the same axis, by the same
53 designers, and carrying the same drawn marks. It replaced upstream
54 Atkinson Hyperlegible, which the image used to install directly and
55 which is now the base this is cut from.
56
57 Cantarell is here because the image installs it, not as a design
58 pick. Inter used to sit between them and is gone: it is not in the
59 image either, so its only effect was to repoint the whole UI font
60 for anyone who installed Inter for some unrelated app. Preferring
61 Inter is still a supported swap, and it is an edit to this file
62 (docs/STACK.md, "Sans"), not a side effect of having it on disk. -->
63 <alias>
64 <family>sans-serif</family>
65 <prefer>
66 <family>Quasi Body</family>
67 <family>Cantarell</family>
68 </prefer>
69 </alias>
70
71 <!-- Serif: Liberation Serif.
72 Alloy has no serif thesis and reads nothing long in one. This names
73 the serif the image already carries so the alias resolves somewhere
74 known, which is a statement of fact rather than a design pick. The
75 three Source Serif and DejaVu spellings that used to lead this list
76 were not installed, so the file prescribed four families under a
77 comment that said it declined to prescribe. -->
78 <alias>
79 <family>serif</family>
80 <prefer>
81 <family>Liberation Serif</family>
82 </prefer>
83 </alias>
84
85 <!--
86 Emoji: deliberately none.
87
88 This aliased `emoji` to Noto Color Emoji, which the image has never
89 installed, so the alias resolved to whatever fontconfig picked next
90 (Alloy's own sans, in practice) and every emoji rendered as a
91 missing glyph anyway. An alias naming a font that is not shipped
92 reads as an oversight; the absence is the decision, so it is written
93 as one here rather than left as a broken preference.
94
95 Alloy ships no emoji font and does not use emoji in its own copy
96 (docs/STACK.md, and the brand rules). Emoji in a web page or a
97 third-party notification will show as missing glyphs. Anyone who
98 wants them installs an emoji font; nothing here has to change for
99 that to work, because fontconfig will pick it up on its own.
100 -->
101
102 <!--
103 Rendering defaults — screen-readable, no antialiasing tricks
104 that fight the fonts' own hinting.
105 -->
106 <match target="font">
107 <edit name="antialias" mode="assign"><bool>true</bool></edit>
108 <edit name="hinting" mode="assign"><bool>true</bool></edit>
109 <edit name="hintstyle" mode="assign"><const>hintslight</const></edit>
110 <edit name="rgba" mode="assign"><const>rgb</const></edit>
111 <edit name="lcdfilter" mode="assign"><const>lcddefault</const></edit>
112 <edit name="autohint" mode="assign"><bool>false</bool></edit>
113 </match>
114
115 </fontconfig>
116