Prometheus

Multi-machine portability — any Mac, any username

How every shell rc, keybinding, launchd plist, and NAS template resolves the right path at runtime, with zero /Users/<name>/ baked into the repo.

No /Users/<your-name>/ baked anywhere. Clone, install, done — whether your home folder is /Users/alice, /Users/work-laptop, or anything else. Every shell config, keybinding, and launchd plist resolves the right path at runtime.

The rule

No config file in this repo may contain /Users/<username>/ or any other absolute path that bakes in the author’s environment. Use $HOME / ~ / fish_add_path $HOME/... instead.

Why it matters. The repo is cloned across multiple Macs with different usernames. A hardcoded /Users/prometheus/... PATH entry silently resolves to nothing on a fresh machine — the failure is invisible (the binary just isn’t on $PATH) and painful to track down.

How each file stays portable

FileHow portability is achieved
zsh/.zshrc$HOME in every export PATH=..., fpath=..., and source ...
fish/config.fish$HOME in every fish_add_path and set -gx
aerospace/*.toml

exec-and-forget $HOME/.local/bin/aerospace-sync — AeroSpace runs the value through bash -c, so the env var expands at fire time. No sed-templating needed.

launchd/*.plist

__HOME__ placeholder. install.sh runs sed "s|__HOME__|$HOME|g" when writing into ~/Library/LaunchAgents/ (plists don’t expand env vars natively).

install.sh

Resolves its own location via ${BASH_SOURCE[0]}; uses $HOME and $DOTFILES for every destination. Never assumes the repo lives at ~/dotfiles.

NAS values: same rule, different mechanism

NAS_HOST, NAS_USER, NAS_SHARE_*, GIT_USER_* were previously hardcoded in committed files. They now live ONLY in ~/.config/dotfiles/local.env — per-machine, gitignored, mode 0600.

  • nas/truenas-media.inetloc.template uses __NAS_USER__ / __NAS_HOST__ / __NAS_SHARE_MEDIA__ placeholders. install.d/60-symlinks.sh sed-substitutes them at install time, writes the rendered file to ~/Library/Application Support/dotfiles/nas-media.inetloc, and registers it as a hidden Finder Login Item via osascript.
  • Public docs (/configuration/backup, /configuration/nas) use <USER> / <NAS-IP> text placeholders so the live site never quotes a real address.
  • Git identity flows the same way: the wizard writes ~/.gitconfig.local from GIT_USER_NAME / GIT_USER_EMAIL. The committed git/.gitconfig has an [include] block that picks it up — so no personal name/email is in the repo.

See Configuration for every supported local.env key.

What about the com.prometheus.* label?

The launchd Label namespace is com.prometheus.* — that’s a personal reverse-DNS prefix, not a path, so it works on any account. It only affects how processes appear in launchctl list.

Bottom line

If you’ve cloned this on a brand-new Mac with a username that’s never been prometheus, every script, keybinding, alias, and plist should still work the first time. If something doesn’t — a path that fails to resolve, a ~/dotfiles reference that needed to be $DOTFILES — that’s a portability bug. Open an issue.

Where to go next

On this page
Edit this page on GitHub Last updated

Built by rafay99-epic · MIT License

Tokyo Night · macOS · SketchyBar · AeroSpace · Ghostty · Zsh · Fish