Two ecosystems in one repository: the zero CLI framework and the signed APT repository, both deployed to GitHub Pages.
bash <(curl -fsSL …/install.sh)install.sh)test.yml · validators (packages, branding, pins, stale URLs, docs links, landing)build-repo.yml · dpkg-deb → termux-apt-repo → gpg sign → assemble _sitepages.yml · site-only deploy (keep_files preserves /repo)maintenance.yml · weekly drift report
repo/ (signed InRelease) · zero-termux.gpg (public key)
zero/bin/zero resolves symlinks, loads the environment, and dispatches to zero/cli/commands/<cmd>.sh, which exports <cmd>_main. Shared utilities live in zero/utils/ (bootstrap/import, env, colors, log, version).
zero/modules/<cat>.sh defines the category installers; zero/tools/<cat>/<tool>/install.sh exports install_/update_/reinstall_/uninstall_<tool>. The ai category imports an aggregate all.sh.
Commands: full reference · Module catalog: modules.
zero/ CLI framework (bash, no runtime deps)
bin/zero entry point
cli/commands/<cmd>.sh one file per command
modules/<cat>.sh category install/update/uninstall logic
tools/<cat>/<tool>/ per-tool installers + README.md
utils/ bootstrap, env, colors, log, version
packages/<name>/DEBIAN/ package definitions (control + lifecycle)
scripts/
build/build-repo.sh dpkg-deb + termux-apt-repo + gpg sign
validation/ CI validators
version-check/ rolling-version drift reporter
maintenance/ weekly scheduled checks
site/generate-data.py regenerates site/data/*.json
site/ website (multi-page, data-driven)
data/*.json generated from the repo
assets/ PACKAGES.md + zero-termux.gpg (public key)
.github/workflows/ build-repo, test, pages, maintenance
install.sh unified installer
The site is data-driven: python3 scripts/site/generate-data.py scans zero/cli/commands, zero/tools/*/*, packages/*/DEBIAN/control (and the category map in assets/PACKAGES.md) and writes site/data/{meta,commands,modules,packages,search}.json. The explorer pages fetch those JSON files at runtime and search.json powers the site search. Changing tools or packages means regenerating the JSON — CI fails if the site is out of date.