this cowdog has dotfiles!
-
Install go-task (e.g.,
brew install go-task/tap/go-task). The provisioning workflow now usestask initunder the hood. -
Setup your ssh keys. a. make sure your ssh keys are generated b. make sure your signing keys are generated. c. if using separate signing keys from your auth keys, make sure to add them to the ssh agent using
ssh-add -
Setup your variables: a. Copy
env/.env.exampleto.envand fill in persona-specific git + ssh values (kept untracked). b. Until the migration fully lands, you can still adjustplaybook.yml/roles/macbook/files/gitconfigfor the Ansible fallback. Note: Never commit your.envor personalized git/ssh files! -
Make sure the init script is exectuable:
chmod +x ./init.sh-
Run the init script (or invoke
task initdirectly) This command will do the following:- install oh-my-zsh if it is not installed
- install Brew if it is not installed
- install go-task (via Homebrew) if it is not installed
- run
brew bundle - sync top-level
dotfiles/into~/.dotfiles - render
templates/*.tmpl(zshrc, git, ssh) using values from.env - configure Windsurf by copying everything under
windsurf/into~/Library/Application Support/Windsurf/User/
Pass persona + safety flags as env vars, e.g.
PERSONA=work DRY_RUN=true task init. -
Do some manual config/fixing.
Terminal:
- Open iTerm2, under
iTerm2in the menu bar, selectMake iTerm2 Default Term
NPM:
nvm install --ltsnvm use v18.14.0
Tailscale: Download and install Tailscale.
Once the init script has been run, you can re-use the Taskfile commands at any time:
task init– full bootstrap.DRY_RUN=true task init– print everything that would run without changing your system.PERSONA=personal|work|both task init– choose which git/ssh identities to render.task dotfiles:sync/task dotfiles:pull– push or pull dotfiles betweendotfiles/and~/.dotfiles.task brew:bundle/task brew:dump– install or refresh the Brewfile.task ides:windsurf– sync the checked-in Windsurf settings to the live profile.task ides:iterm2– install the trackediterm2/com.googlecode.iterm2.plistinto~/Library/Preferences/.
Idempotence is enforced within each task, so re-running task init is safe at any time.
- Dotfiles – edit files inside the top-level
dotfiles/directory (aliases/functions/globals). Runtask dotfiles:syncwhen you’re ready to apply them to~/.dotfiles, ortask dotfiles:pullto bring live edits back into the repo. - Templates – zshrc/git/ssh templates live under
templates/. These are rendered viaenvsubst, so prefer${VAR}placeholders fed by.env. - Windsurf – copy your current editor config from
~/Library/Application Support/Windsurf/User/plus Codeium chat memories (e.g./Users/<you>/.codeium/windsurf/memories/global_rules.md) into the repo’s top-levelwindsurf/directory.task ides:windsurfwill mirror this folder into the live Windsurf profile. - iTerm2 – export your preferences to
iterm2/com.googlecode.iterm2.plist(from~/Library/Preferences/or iTerm2’s export feature). Runtask ides:iterm2to install the tracked plist onto the machine.
Keeping these directories as the source of truth ensures Taskfile changes remain predictable and reviewable.
- Wally
- Flux
- Krisp
- AWS VPN
- Intellij
- Gather
- Postman
