#!/usr/bin/env bash # Rebuilds androidApp/src/main/res/font/nerd_icons.ttf. # # The app draws a handful of icons -- a folder, a git branch, a server, a # cog -- 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. # # The whole symbols font is 2.5 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. set -euo pipefail # Codepoint, then the Nerd Fonts glyph name it came from. All from the # Material Design Icons set bar one, so they look like one family; the # exception is noted on its own line. GLYPHS=( U+F024B # md-folder U+F062C # md-source_branch U+F233 # fa-server U+F0493 # md-cog U+F0415 # md-plus U+F0450 # md-refresh U+F0A7A # md-trash_can_outline U+F02D # fa-book U+F0140 # md-chevron_down ) 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 Mono face: every glyph gets the same advance, so an icon occupies the # same width whichever one it is and a row of them lines up with the row # above. The proportional face varies the advance per glyph, which puts the # text after each icon at a slightly different place. "$work/venv/bin/pyftsubset" "$work/SymbolsNerdFontMono-Regular.ttf" \ --unicodes="$unicodes" \ --layout-features= \ --drop-tables+=DSIG \ --output-file="$out" echo "Wrote $out ($(stat -c %s "$out") bytes) with ${#GLYPHS[@]} glyphs"