#!/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"