Skip to content

Personas ​

Ponos is a personal tool. There is really one human — me — but I run it in three distinct contexts, and each context needs something different from the tool.

The Operator (me, setting up a machine) ​

The person who runs sync_mac.sh interactively on a Mac to bring it to its target state — a brand-new laptop, or an existing one after changing the Brewfile or a dotfile.

  • Goals: get from "fresh macOS" to "ready to code" without a checklist; re-sync at any time without fear of breaking what already works.
  • Pain points: forgotten manual steps, half-configured machines, dotfiles that drift out of the repo, install steps that fail and leave the machine in an unknown state.
  • What Ponos owes them: an idempotent run that is safe to repeat, clear coloured logging of what it did, automatic backups before overwriting anything, and graceful continuation when a single package fails.

The Automation (the same script, run unattended) ​

The same sync_mac.sh, driven without a keyboard — piped input, or a CI/provisioning job — where no one is there to answer prompts.

  • Goals: run start-to-finish with zero interaction and deterministic choices.
  • Pain points: a script that blocks on a read prompt forever, or picks a random default.
  • What Ponos owes them: detection of a non-interactive shell (falls back to sensible defaults), and environment-variable overrides (PONOS_CONTAINER, PONOS_BROWSER) that bypass every prompt while still persisting the choice for next time.

The Daily Driver (me, using the machine afterwards) ​

The same person, now working on the configured machine and leaning on the shell environment and CLI helpers Ponos installed.

  • Goals: keep repositories tidy (bclean, rfrom), roll out updated Git hooks everywhere (rhooks), free a stuck port (uport, kport), and commit within convention without thinking about it (template hooks).
  • Pain points: piles of merged local branches, a port held by a zombie process, inconsistent commit messages, hooks that exist in one repo but not another.
  • What Ponos owes them: short, memorable aliases with consistent coloured output, guard rails on dangerous Git actions (force push, pushing to a protected branch), and a one-command way to keep every repository's hooks in sync with the source of truth.