Skip to content
Terminal-driven workflow CLI

dotty()

alphaearly preview

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.

zsh — install
$ brew install bitwise-media-group/tap/dotty
$ dotty profile activate
dotty · profile activate ● fuzzy-pick
1profiles
search profiles ▸ wo
work~/.config/dotty/profiles/workactive
 personal~/.config/dotty/profiles/personal
 travel~/.config/dotty/profiles/travel
→ activated 'work' · linked 24 files ✓
2active profile
brewfile48 casks · in sync
dotfiles24 symlinks
security-keywork · yk-5c
signing-keyed25519-sk · git
$ dotty signing-key sign
→ touch your key… signed ✓

Fuzzy-pick a profile and dotty relinks the machine — [1] profiles · [2] active profile, Brewfile, keys and all.

3profiles
workactive profile
48 ✓casks in sync
2YubiKeys enrolled

// WHAT DOTTY DOES

One CLI for profiles, dotfiles, packages and hardware-backed signing keys.

System profiles

Whole-machine profiles that travel across machines. Create one, fuzzy-pick, and activate — dotty relinks everything in place.

Reproducible Brewfiles

Add casks and formulae through dotty, then dotty brewfile sync makes the machine match the Brewfile. Powered by brew bundle.

Security-key aliases

Give your YubiKeys human names. Alias a serial with dotty security-key add --name=work and never memorise hardware IDs again.

SSH signing keys

Enroll resident SSH signing keys that live on the YubiKey — including git commit signing. Secrets never leave the hardware.

Private by design

State is split: shareable config in ~/.config/dotty, PII-adjacent key stubs in ~/.local/share at 0700/0600.

One Go binary

Every command is dotty <noun> <verb>. No services, no daemons — terminal-native, install once with brew.

Nouns

profile brewfile security-key signing-key

Drives

brew ykman fido2-token ssh-keygen

// ONE GRAMMAR, EVERY COMMAND

Every command is dotty <noun> <verb>.

dotty --help
$ 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

// THREE COMMANDS TO YOUR FIRST PROFILE

01

Install

Install the Homebrew cask — it carries the binary, man pages and completions.

Alternative methods
$ brew install bitwise-media-group/tap/dotty
02

New profile

Create your first profile and dotty offers to activate it.

$ dotty profile new --name=work
03

Sign

Enroll a YubiKey-resident signing key for git commits.

$ dotty signing-key new