Files
amethyst/tools/material-symbols-subset
Claude 500de62841 fix(ui): explain pending OTS on tap, render the stamp glyph and pill icons larger
Tapping the pending OTS pill now shows a toast explaining that the
attestation is waiting to be stamped into the Bitcoin blockchain (new
ots_info_pending_description). The OpenTimestamps glyph gets a
near-full-em content box — its fine outline read much lighter than
Material's solid shapes at the standard 80..880 bounds — and HeaderPill
icons go from 11dp to 13dp.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AgEpNtwnetPhETXQSdq4b5
2026-07-14 14:15:56 +00:00
..

Material Symbols Subset

The font shipped at commons/src/commonMain/composeResources/font/material_symbols_outlined.ttf is a subset of Google's Material Symbols Outlined variable font, trimmed to only the codepoints referenced from commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/icons/symbols/MaterialSymbols.kt.

Full upstream Subset
Size ~11 MB ~410 KB
Glyphs ~3500 ~210

The subset cuts >10 MB out of every commons build artifact, every Android APK, and every Desktop app bundle.

When to regenerate

Run subset.sh whenever you:

  • add or remove a MaterialSymbol("\uXXXX") entry in MaterialSymbols.kt
  • pin a newer upstream font version

Prerequisites

pip install fonttools brotli

Regenerating

From the repo root:

./tools/material-symbols-subset/subset.sh

That downloads the upstream variable font, intersects its codepoints with the ones referenced from MaterialSymbols.kt, and overwrites the checked-in material_symbols_outlined.ttf.

If you already have an upstream .ttf on disk:

./tools/material-symbols-subset/subset.sh /path/to/MaterialSymbolsOutlined-Regular.ttf

Commit the regenerated .ttf alongside the MaterialSymbols.kt change.

How it works

pyftsubset (from fonttools) reads the codepoints we care about, drops every glyph and OpenType feature not reachable from those codepoints, and rewrites name, cmap, and GSUB tables accordingly. The Compose resource pipeline treats the result as a normal TTF — no code changes needed.

Custom glyphs

custom/ holds traced SVG outlines for icons the upstream font will never carry (third-party logos — currently the OpenTimestamps stamp). add_custom_glyphs.py bakes them into the subset TTF at end-of-PUA codepoints (U+F8F0 and up); subset.sh runs it automatically after pyftsubset, so regenerating the subset keeps them. To add one: trace the logo to a single-color SVG (potrace output works as-is), drop it in custom/, register it in the CUSTOM map in add_custom_glyphs.py, add the matching MaterialSymbol("\uF8Fx") to MaterialSymbols.kt, and rerun subset.sh (or add_custom_glyphs.py <ttf> to patch the existing font).