iris: load application-owned fonts
This commit is contained in:
1 parent
f7e7950908
commit
bdc9c914c4
19 files changed
+189
-87
No files matched your search
Executable
+56
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env bash
|
||||
# Rebuilds app/assets/fonts/nerd_icons.ttf.
|
||||
#
|
||||
# ai-app draws its icons as glyphs in a Nerd Fonts subset it ships, rather
|
||||
# than as ordinary Unicode out of whatever the platform resolved. Unicode's
|
||||
# own geometric shapes are what this replaced: `tool.rs` set its disclosure
|
||||
# mark with U+25B8/25BE/25B4, and once iris stopped bundling fonts
|
||||
# (2026-09-07) Iris's phone drew an empty box for them and this VM drew a
|
||||
# dot. UI_RULES: "don't rely on characters the platform might not have --
|
||||
# ship the glyph or the asset rather than hoping."
|
||||
#
|
||||
# The whole symbols font is 3 MB for the handful below, so what is
|
||||
# committed is a subset. Add a codepoint to GLYPHS *and* to
|
||||
# `app/src/ui/icon.rs` (the two lists have to agree -- a codepoint in
|
||||
# the Rust that this script did not subset is a glyph that silently isn't
|
||||
# there), then run this and commit the result.
|
||||
#
|
||||
# Needs python3 and network access; fontTools is fetched into a temporary
|
||||
# venv, so nothing has to be installed on the machine.
|
||||
#
|
||||
# The Mono face makes icon metrics stable; the Material Design family keeps
|
||||
# their meanings conventional.
|
||||
set -euo pipefail
|
||||
|
||||
GLYPHS=(
|
||||
U+F035D # md-menu_down -- a card that is open
|
||||
U+F035F # md-menu_right -- a card that opens
|
||||
U+F0360 # md-menu_up -- collapse this group again
|
||||
)
|
||||
|
||||
url=https://github.com/ryanoasis/nerd-fonts/releases/latest/download/NerdFontsSymbolsOnly.zip
|
||||
here="$(cd "$(dirname "$0")" && pwd)"
|
||||
out="$here/assets/fonts/nerd_icons.ttf"
|
||||
work="$(mktemp -d)"
|
||||
trap 'rm -rf "$work"' EXIT
|
||||
|
||||
echo "Fetching $url"
|
||||
curl -fsSL -o "$work/nf.zip" "$url"
|
||||
python3 -c 'import sys,zipfile; zipfile.ZipFile(sys.argv[1]).extractall(sys.argv[2])' "$work/nf.zip" "$work"
|
||||
|
||||
python3 -m venv "$work/venv"
|
||||
"$work/venv/bin/pip" -q install fonttools
|
||||
|
||||
unicodes="$(IFS=,; echo "${GLYPHS[*]}")"
|
||||
mkdir -p "$(dirname "$out")"
|
||||
# The Mono face, where every glyph is one em wide and one em tall, so two
|
||||
# icons at the same font size are the same size without either being given
|
||||
# one, which makes an icon's box predictable beside a line of text.
|
||||
"$work/venv/bin/pyftsubset" "$work/SymbolsNerdFontMono-Regular.ttf" \
|
||||
--unicodes="$unicodes" \
|
||||
--layout-features= \
|
||||
--drop-tables+=DSIG \
|
||||
--output-file="$out"
|
||||
cp "$work/LICENSE" "$here/assets/fonts/NERD_FONTS_LICENSE.txt"
|
||||
|
||||
echo "Wrote $out ($(stat -c %s "$out") bytes) with ${#GLYPHS[@]} glyphs"
|
||||
Reference in new issue
Block a user