A Rust backend that discovers Android projects under configured roots, builds one on request, and serves the APK over pinned TLS on a WireGuard interface; an Android client that lists what is buildable, watches a build, and installs the result. Enrolment carries the token and the CA, so the phone trusts exactly the machine that issued it and nothing else. `AGENTS.md` is the working guide and `README.md` the configuration reference. The shared tunnel-and-TLS code lives in `vendor/wg-app-link`, which ai-app uses too. History before this point was squashed away, and a stale `config.json` went with it: nothing had read that file since the config moved to RON outside the checkout, and what it still held was one machine's absolute paths and the names of projects on it.
58 lines
2.3 KiB
Bash
Executable File
58 lines
2.3 KiB
Bash
Executable File
#!/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
|
|
)
|
|
|
|
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"
|