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
| File | How 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 |
|
launchd/*.plist |
|
install.sh | Resolves its own location via |
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.templateuses__NAS_USER__/__NAS_HOST__/__NAS_SHARE_MEDIA__placeholders.install.d/60-symlinks.shsed-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 viaosascript.- 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.localfromGIT_USER_NAME/GIT_USER_EMAIL. The committedgit/.gitconfighas 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
- Quick install — the one-liner.
- Manual install —
git clone+./install.shwith all the flags. - Your local.env — every per-machine key, what it defaults to, how it flows through the system.
- Asking important questions — the first-run wizard that writes that file.