Your whole machine, in one profile.
Utilities for a terminal-driven workflow and dotfiles: system profiles that travel across machines, reproducible Homebrew Brewfiles, named aliases for hardware security keys, and SSH signing keys that live on YubiKeys — including git commit signing. One Go binary.
brew install bitwise-media-group/tap/dotty
dotty profile activate
Fuzzy-pick a profile and dotty relinks the machine — [1] profiles · [2] active profile, Brewfile, keys and all.
One CLI for profiles, dotfiles, packages and hardware-backed signing keys.
Whole-machine profiles that travel across machines. Create one, fuzzy-pick, and activate — dotty relinks everything in place.
Add casks and formulae through dotty, then
dotty brewfile sync makes the machine match the
Brewfile. Powered by brew bundle.
Give your YubiKeys human names. Alias a serial with
dotty security-key add --name=work and never
memorise hardware IDs again.
Enroll resident SSH signing keys that live on the YubiKey — including git commit signing. Secrets never leave the hardware.
State is split: shareable config in
~/.config/dotty, PII-adjacent key stubs in
~/.local/share at 0700/0600.
Every command is
dotty <noun> <verb>. No services,
no daemons — terminal-native, install once with
brew.
Every command is dotty <noun> <verb>.
$ dotty profile new
--name=work
# create a profile (and offer to activate it)
$ dotty profile activate
# fuzzy-pick and activate a profile
$ dotty brewfile add --cask
ghostty
# add to the Brewfile and install
$ dotty brewfile sync
# make the machine match the Brewfile
$ dotty security-key add
--name=work
# alias a YubiKey serial
$ dotty signing-key new
# enroll a resident SSH signing key
Install the Homebrew cask — it carries the binary, man pages and completions.
Alternative methodsbrew install bitwise-media-group/tap/dotty
Create your first profile and dotty offers to activate it.
dotty profile new --name=work
Enroll a YubiKey-resident signing key for git commits.
dotty signing-key new