#!/usr/bin/env bash # Rebuilds androidApp/src/main/res/font/nerd_icons.ttf. # # The app draws a handful of icons -- a cog, a refresh arrow, send, stop -- # as text in a Nerd Fonts glyph rather than as vector assets or as ordinary # Unicode. Unicode has no character for most of these, and the ones it does # have are not reliably in an Android system font, so they land as tofu # boxes on somebody's phone. Shipping the subset removes the hope: the # glyph is in the APK. # # The whole symbols font is 3 MB for the handful below, so what is # committed is a subset. Add a codepoint to GLYPHS below and to NerdIcons.kt # (the two lists have to agree -- a codepoint in the Kotlin but not here is # a glyph that silently doesn't exist), 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. # # Copied from dev-updater's script of the same name rather than shared # through wg-app-link, for the reason Theme.kt gives about the palette: the # link is the tunnel, the pinned CA and enrollment, and an icon set is a # preference rather than part of that contract. set -euo pipefail # Codepoint, then the Nerd Fonts glyph name it came from. Material Design # Icons bar one, so they read as one family -- and the first two are # deliberately the same two dev-updater uses, since a cog and a refresh # arrow mean the same thing in both apps. The exception is noted on its # own line, as dev-updater's script does with its two. GLYPHS=( U+F0493 # md-cog U+F0450 # md-refresh U+F048A # md-send U+F04DB # md-stop U+F1163 # md-send_clock U+F0156 # md-close U+F004D # md-arrow_left U+F201 # fa-line_chart -- Font Awesome's, asked for by name ) url=https://github.com/ryanoasis/nerd-fonts/releases/latest/download/NerdFontsSymbolsOnly.zip out="$(cd "$(dirname "$0")" && pwd)/androidApp/src/main/res/font/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 proportional face rather than the Mono one: these are drawn inline # beside text, where a fixed advance would pad each icon out to a cell. "$work/venv/bin/pyftsubset" "$work/SymbolsNerdFont-Regular.ttf" \ --unicodes="$unicodes" \ --layout-features= \ --drop-tables+=DSIG \ --output-file="$out" echo "Wrote $out ($(stat -c %s "$out") bytes) with ${#GLYPHS[@]} glyphs"