Skip to content

keryx font

Manage the typefaces reels are drawn with — install them, see what resolves, and point a theme at one. Fonts are addressed by a key, never by a path (spec 0057).

keryx font list    [--system]
keryx font show    <key>
keryx font add     <key> <file> [--user] [--licence <id>]
keryx font rm      <key> [--user]
keryx font promote <key>
keryx font use     <key> [--theme <keyword>] [--mono]

Add --output json for machine-readable output.

Why a key and not a path

A path is a property of one machine; a key is a property of the project. A theme that names /Users/you/Library/Fonts/Brand.ttf renders correctly for exactly one person. A theme that names brand renders correctly for anyone who has that font in scope — and keryx can tell them when they do not.

The four scopes

A key resolves through four scopes, most specific first:

Scope Where it lives Written by keryx
project .keryx/fonts/ in the project font add
user ~/.keryx/fonts/ font add --user, font promote
system wherever the host installed it never
embedded inside the keryx binary n/a

keryx does not write to the host's font directories. Installing a font system-wide is the operating system's job and needs privileges keryx should not want.

The embedded scope is the floor

Four faces ship inside the binary — inter and jetbrains-mono (the defaults), and dejavu-sans and dejavu-mono. Resolution cannot fail for want of a font, so keryx draws text on a machine with nothing installed.

DejaVu is carried because every reel rendered before spec 0057 was drawn with it. Naming it pins the typeface a reel was designed in, rather than hoping the machine has the right one.

The embedded keys are reserved

A key naming an embedded face resolves from the binary, even when the host has a font of the same name. Your project and user scopes still override it.

This is deliberate. Before it, on a machine with DejaVu installed, dejavu-sans resolved to the host's copy — which fontconfig matched at Regular weight, where the embedded face is Bold. Pinning it to reproduce an old reel silently changed the type.

What is offered is what can be drawn

font list only shows fonts keryx can actually render with. fontconfig enumerates Type 1 and bitmap formats that keryx cannot parse; those are skipped rather than advertised and then failing at use.

Supported formats: .ttf, .otf, .ttc.

Variable fonts are not supported. No font parser available to keryx reads variable-font axes, so a key names a static instance — a weight is a file, not a position on an axis.

Arguments do not appear in --help

keryx font show --help prints keryx font show [flags] and does not mention the <key> argument. The commands take the arguments listed above; the usage line does not currently state them.

  • Themes — a theme names the faces it draws with
  • Providers — the render backends fonts are drawn by