57 lines
2.3 KiB
Bash
Executable File
57 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Rebuilds iris/core/assets/fonts/nerd_icons.ttf.
|
|
#
|
|
# iris 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
|
|
# `iris/core/src/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"
|