This page is a reference for all scripts in bin/scripts/. Each entry covers purpose, arguments, environment variables, which CI workflow invokes it, and whether it is safe to run locally.
For the core font patching system, see page 2. For batch font patching, see page 2.4. For the fonts.json schema used by several scripts, see page 8.1.
All scripts are invoked from within bin/scripts/ as their working directory unless noted.
| Script | Purpose | CI Workflow | Local Safe |
|---|---|---|---|
gotta-patch-em-all-font-patcher!.sh | Batch patch all font families (all variants) | release.yml | ✅ Yes |
archive-font-patcher.sh | Package FontPatcher.zip from patcher + glyphs | release.yml, zip-release.yml | ✅ Yes |
archive-fonts.sh | Create per-font release zips from patched-fonts/ | release.yml | ✅ Yes |
version-bump.sh | Update version string in all scripts and source files | release.yml | ⚠️ Modifies files |
get-font-names-from-json.sh | Output CI font matrix JSON from fonts.json | release.yml | ✅ Yes |
generate-css.sh | Generate CSS and glyphnames.json from glyph data | release.yml | ✅ Yes |
generate-webfonts.sh | Generate woff/woff2 from SymbolsOnly font | release.yml | ✅ Yes |
generate-fontconfig.sh | Generate 10-nerd-font-symbols.conf | release.yml | ✅ Yes |
generate-original-source.py | Build original-source.otf from src/svgs/ | packsvgs.yml | ✅ Yes |
optimize-original-source.sh | Simplify SVGs in src/svgs/ using Inkscape | packsvgs.yml | ✅ Yes |
generate-glyph-info-from-set.py | Generate i_xxx.sh from a named glyph font | Manual | ✅ Yes |
generate-extraglyphs.py | Generate extraglyphs.sfd from Hack Regular | Manual | ✅ Yes |
generate-casks.sh | Generate Homebrew cask files from archives | casks.yml | ✅ Yes |
generate-font-image-previews.sh | Generate font preview images for nerdfonts.com | Manual | ✅ Yes |
generate-release-summary.sh | Generate release table with zip and xz entries | Manual | ✅ Yes |
generate-sample-set.sh | Patch one font per source family (spot checks) | Manual | ✅ Yes |
docker-entrypoint.sh | Docker container entry point for font patching | docker-release.yml | ⚠️ Docker only |
fetch-archives.sh | Download release archives from GitHub | casks.yml | ✅ Yes |
standardize-and-complete-readmes.sh | Generate README.md for each patched font dir | Called by gotta-patch-em-all | ✅ Yes |
update-gitignore.sh | Update .gitignore for non-repo-released fonts | fontjson.yml | ⚠️ Modifies files |
update-all-contributors-website.py | Update contributors page on gh-pages | contributors workflow | ✅ Yes |
cheatsheet.sh | Search for a glyph by partial name | Manual | ✅ Yes |
test-fonts.sh | Print all patched glyphs to terminal | Manual | ✅ Yes |
test-powerlines.sh | Print Powerline symbol debug output | Manual | ✅ Yes |
test-vertical-lines.sh | Print vertical Powerline debug output | Manual | ✅ Yes |
fpfix.py | Set isFixedPitch property on a font | Manual | ✅ Yes |
release.sh | Documents release process (not executed) | — | ❌ Reference only |
lib/i_*.sh | Shell variable definitions for each icon set | Called by CSS/cheatsheet | ✅ Read-only |
lib/i_all.sh | Source all i_*.sh scripts with duplicate check | CSS/cheatsheet | ✅ Read-only |
name_parser/Fontname*.py | Font name parsing for SFNT table generation | Used by font-patcher | ✅ Library |
braille/Braille.py | Braille glyph generation suite | Used by font-patcher | ✅ Library |
Sources: bin/scripts/README.md1-49
The following diagram shows which GitHub Actions workflow invokes which scripts.
CI Workflow → Script Dependencies
Sources: .github/workflows/release.yml1-416 .github/workflows/zip-release.yml1-55 .github/workflows/packsvgs.yml1-84 .github/workflows/docker-release.yml1-72 .github/workflows/fontjson.yml1-59 .github/workflows/shellcheck.yml1-38
gotta-patch-em-all-font-patcher!.shLocation: bin/scripts/gotta-patch-em-all-font-patcher!.sh
This is the primary batch patching script. It discovers all source fonts under src/unpatched-fonts/, invokes font-patcher three times per font file (regular, mono, propo variants), then calls standardize-and-complete-readmes.sh for each font family. Used directly by release.yml and interactively by contributors.
Prerequisites: bash >= 4, fontforge in PATH. ttfdump and dc are required only if --keeptime is used.
| Flag | Long Form | Effect |
|---|---|---|
-c | --checkfont | Output to check-fonts/ instead of patched-fonts/ |
-t | --keeptime | Preserve patched-font timestamp from prior run |
-v | --verbose | Print each fontforge invocation |
-i | --info | Rebuild READMEs only; skip patching |
-j | --jobs | Run up to 8 patch jobs in parallel |
-h | --help | Print usage |
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh57-80
A single positional argument controls which fonts are processed.
| Filter Syntax | Behavior |
|---|---|
| (none) | All .ttf, .otf, .sfd under src/unpatched-fonts/ |
iosevka | Files whose names contain iosevka |
/Iosevka | Files in a directory path containing Iosevka |
The directory form (leading /) is used by release.yml to scope each matrix job to one font family: ./gotta-patch-em-all-font-patcher\!.sh -j "/${{ matrix.font }}".
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh147-171 .github/workflows/release.yml213
| Variable | Default | Effect |
|---|---|---|
NERDFONTS | (empty) | Extra options forwarded verbatim to every font-patcher invocation |
SOURCE_DATE_EPOCH | Current Unix timestamp | Controls the creation/modification timestamp embedded in output fonts. Set by release.yml to a shared value so all fonts share one build timestamp. |
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh199-215 .github/workflows/release.yml129
For each source font file, patch_font runs fontforge three times:
patch_font Execution Flow
The config.cfg search walks up from the font file's directory to the font root, checking three candidate paths bin/scripts/gotta-patch-em-all-font-patcher!.sh274-287
After all patching completes, a second loop over the same font list calls generate_info, which invokes standardize-and-complete-readmes.sh and copies license files into the output directory.
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh217-331 bin/scripts/gotta-patch-em-all-font-patcher!.sh336-386
With -j, each patch_font call is backgrounded. The script waits after every max_parallel_process (8) jobs to bound memory usage bin/scripts/gotta-patch-em-all-font-patcher!.sh451-454
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh38 bin/scripts/gotta-patch-em-all-font-patcher!.sh434-457 </old_str> <new_str>
This page is a reference for all scripts in bin/scripts/. Each entry covers purpose, arguments, environment variables, which CI workflow invokes it, and whether it is safe to run locally.
For the core font patching system, see page 2. For batch font patching, see page 2.4. For the fonts.json schema used by several scripts, see page 8.1.
All scripts are invoked from within bin/scripts/ as their working directory unless noted.
| Script | Purpose | CI Workflow | Local Safe |
|---|---|---|---|
gotta-patch-em-all-font-patcher!.sh | Batch patch all font families (all variants) | release.yml | ✅ Yes |
archive-font-patcher.sh | Package FontPatcher.zip from patcher + glyphs | release.yml, zip-release.yml | ✅ Yes |
archive-fonts.sh | Create per-font release zips from patched-fonts/ | release.yml | ✅ Yes |
version-bump.sh | Update version string in all scripts and source files | release.yml | ⚠️ Modifies files |
get-font-names-from-json.sh | Output CI font matrix JSON from fonts.json | release.yml | ✅ Yes |
generate-css.sh | Generate CSS and glyphnames.json from glyph data | release.yml | ✅ Yes |
generate-webfonts.sh | Generate woff/woff2 from SymbolsOnly font | release.yml | ✅ Yes |
generate-fontconfig.sh | Generate 10-nerd-font-symbols.conf | release.yml | ✅ Yes |
generate-original-source.py | Build original-source.otf from src/svgs/ | packsvgs.yml | ✅ Yes |
optimize-original-source.sh | Simplify SVGs in src/svgs/ using Inkscape | packsvgs.yml | ✅ Yes |
generate-glyph-info-from-set.py | Generate i_xxx.sh from a named glyph font | Manual | ✅ Yes |
generate-extraglyphs.py | Generate extraglyphs.sfd from Hack Regular | Manual | ✅ Yes |
generate-casks.sh | Generate Homebrew cask files from archives | casks.yml | ✅ Yes |
generate-font-image-previews.sh | Generate font preview images for nerdfonts.com | Manual | ✅ Yes |
generate-release-summary.sh | Generate release table with zip and xz entries | Manual | ✅ Yes |
generate-sample-set.sh | Patch one font per source family (spot checks) | Manual | ✅ Yes |
docker-entrypoint.sh | Docker container entry point for font patching | docker-release.yml | ⚠️ Docker only |
fetch-archives.sh | Download release archives from GitHub | casks.yml | ✅ Yes |
standardize-and-complete-readmes.sh | Generate README.md for each patched font dir | Called by gotta-patch-em-all | ✅ Yes |
update-gitignore.sh | Update .gitignore for non-repo-released fonts | fontjson.yml | ⚠️ Modifies files |
update-all-contributors-website.py | Update contributors page on gh-pages | contributors workflow | ✅ Yes |
cheatsheet.sh | Search for a glyph by partial name | Manual | ✅ Yes |
test-fonts.sh | Print all patched glyphs to terminal | Manual | ✅ Yes |
test-powerlines.sh | Print Powerline symbol debug output | Manual | ✅ Yes |
test-vertical-lines.sh | Print vertical Powerline debug output | Manual | ✅ Yes |
fpfix.py | Set isFixedPitch property on a font | Manual | ✅ Yes |
release.sh | Documents release process (not executed) | — | ❌ Reference only |
lib/i_*.sh | Shell variable definitions for each icon set | Called by CSS/cheatsheet | ✅ Read-only |
lib/i_all.sh | Source all i_*.sh scripts with duplicate check | CSS/cheatsheet | ✅ Read-only |
name_parser/Fontname*.py | Font name parsing for SFNT table generation | Used by font-patcher | ✅ Library |
braille/Braille.py | Braille glyph generation suite | Used by font-patcher | ✅ Library |
Sources: bin/scripts/README.md1-49
The following diagram shows which GitHub Actions workflow invokes which scripts.
CI Workflow → Script Dependencies
Sources: .github/workflows/release.yml1-416 .github/workflows/zip-release.yml1-55 .github/workflows/packsvgs.yml1-84 .github/workflows/docker-release.yml1-72 .github/workflows/fontjson.yml1-59 .github/workflows/shellcheck.yml1-38
gotta-patch-em-all-font-patcher!.shLocation: bin/scripts/gotta-patch-em-all-font-patcher!.sh
This is the primary batch patching script. It discovers all source fonts under src/unpatched-fonts/, invokes font-patcher three times per font file (regular, mono, propo variants), then calls standardize-and-complete-readmes.sh for each font family. Used directly by release.yml and interactively by contributors.
Prerequisites: bash >= 4, fontforge in PATH. ttfdump and dc are required only if --keeptime is used.
| Flag | Long Form | Effect |
|---|---|---|
-c | --checkfont | Output to check-fonts/ instead of patched-fonts/ |
-t | --keeptime | Preserve patched-font timestamp from prior run |
-v | --verbose | Print each fontforge invocation |
-i | --info | Rebuild READMEs only; skip patching |
-j | --jobs | Run up to 8 patch jobs in parallel |
-h | --help | Print usage |
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh57-80
A single positional argument controls which fonts are processed.
| Filter Syntax | Behavior |
|---|---|
| (none) | All .ttf, .otf, .sfd under src/unpatched-fonts/ |
iosevka | Files whose names contain iosevka |
/Iosevka | Files in a directory path containing Iosevka |
The directory form (leading /) is used by release.yml to scope each matrix job to one font family: ./gotta-patch-em-all-font-patcher\!.sh -j "/${{ matrix.font }}".
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh147-171 .github/workflows/release.yml213
| Variable | Default | Effect |
|---|---|---|
NERDFONTS | (empty) | Extra options forwarded verbatim to every font-patcher invocation |
SOURCE_DATE_EPOCH | Current Unix timestamp | Controls the creation/modification timestamp embedded in output fonts. Set by release.yml to a shared value so all fonts share one build timestamp. |
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh199-215 .github/workflows/release.yml129
For each source font file, patch_font runs fontforge three times:
patch_font Execution Flow
The config.cfg search walks up from the font file's directory to the font root, checking three candidate paths bin/scripts/gotta-patch-em-all-font-patcher!.sh274-287
After all patching completes, a second loop over the same font list calls generate_info, which invokes standardize-and-complete-readmes.sh and copies license files into the output directory.
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh217-331 bin/scripts/gotta-patch-em-all-font-patcher!.sh336-386
With -j, each patch_font call is backgrounded. The script waits after every max_parallel_process (8) jobs to bound memory usage bin/scripts/gotta-patch-em-all-font-patcher!.sh451-454
Sources: bin/scripts/gotta-patch-em-all-font-patcher!.sh38 bin/scripts/gotta-patch-em-all-font-patcher!.sh434-457
archive-font-patcher.shLocation: bin/scripts/archive-font-patcher.sh
Creates archives/FontPatcher.zip, a self-contained archive that end users can download to patch their own fonts without cloning the entire repository. Invoked by both release.yml and zip-release.yml.
| Source Path | Contents |
|---|---|
src/glyphs/ | All icon font files needed for patching |
bin/scripts/name_parser/Fontname*.py | Font naming / SFNT table generation library |
bin/scripts/braille/Braille.py | Braille glyph generation |
glyphnames.json | Codepoint-to-name mappings |
font-patcher | Main Python patching script |
Generated readme.md | Usage instructions (from src/archive-font-patcher-readme.md) |
Sources: bin/scripts/archive-font-patcher.sh29-37
archive-font-patcher.sh Build Flow
Sources: bin/scripts/archive-font-patcher.sh14-38
When invoked with any argument (e.g. ./archive-font-patcher.sh intermediate), git log output is appended to the embedded readme.md for identification. The zip-release.yml workflow passes intermediate for this purpose .github/workflows/zip-release.yml28
lib/i_*.sh ScriptsEach i_*.sh file defines shell variables that map human-readable glyph names to their Unicode characters. These are used by generate-css.sh and the cheat sheet system.
Glyph Source Font → Definition Script Mapping
Sources: bin/scripts/README.md29
Each glyph variable follows the pattern i_{set}_{glyph_name}=$i where the UTF-8 character is embedded directly inside single quotes assigned to the temporary variable i. Each file also includes a load guard to prevent double-sourcing:
test -n "$__i_cod_loaded" && return || __i_cod_loaded=1
lib/i_all.shLocation: bin/scripts/lib/i_all.sh
Sources all active i_*.sh files in sequence. Before sourcing each file it runs a duplicate-name check (grep, sort, uniq -D) and exits with error if any variable name appears twice in a set bin/scripts/lib/i_all.sh18-23
Accepts one optional argument include-old-material to additionally source the legacy i_material.sh (deprecated MDI icons), used by the cheat sheet to display historical data without including it in standard builds bin/scripts/lib/i_all.sh12-14
All build scripts depend on the central fonts.json configuration file located at bin/scripts/lib/fonts.json.
Sources: bin/scripts/lib/README.md8-29
All scripts use jq for querying the JSON structure:
This pattern is consistent across all scripts that consume font metadata.
Sources: bin/scripts/standardize-and-complete-readmes.sh11-12 bin/scripts/standardize-and-complete-readmes.sh117-120
When an icon font is updated in src/glyphs/, the corresponding i_*.sh file must be regenerated:
Sources: src/glyphs/README.md3-6
Sources: bin/scripts/archive-font-patcher.sh20-24
Sources: bin/scripts/standardize-and-complete-readmes.sh81-89
Refresh this wiki
This wiki was recently refreshed. Please wait 3 days to refresh again.