Sets
A set is a named bundle of packages, files, and shell fragments. Each machine lists the sets it wants. That one indirection is what makes several Macs practical: your laptop takes core and web, the desktop takes core and work, and neither needs to know about the other’s tools.
What a set looks like
Section titled “What a set looks like”sets/ core/ set.toml shell/ 10-path.zsh 99-dotfix-status.zsh web/ set.toml files/ gitconfigset.toml declares the packages and the managed files:
description = "Base set, active on every machine"
[[files]]source = "files/gitconfig"target = "~/.gitconfig"
[packages]brew = ["fzf", "htop", "ripgrep"]cask = ["font-figtree"]Which sets a machine takes
Section titled “Which sets a machine takes”dotfix sets # list, marking the ones this machine usesdotfix sets --enable web # add `web` to this machinedotfix sets --disable web # remove it againThis writes to machines/<name>.toml, which also records anything this machine deliberately ignores.
Splitting the first set
Section titled “Splitting the first set”Setting up your first Mac puts everything into core. That is a starting point, not a recommendation — the split is a judgement only you can make.
A practical order: leave the things every machine needs in core, then move whole toolchains out into their own set. Editing set.toml by hand is expected; there is no command that guesses the boundaries for you.
Next steps
Section titled “Next steps”- Packages — how formulae and casks are tracked.
- Files and shell configuration — managed files and how
.zshrcis assembled.