Skip to content

Packages

dotfix manages Homebrew formulae and casks. It compares three things: what your sets ask for, what Homebrew reports as installed, and what dotfix itself last installed.

That third one is the point. A package dotfix installed and that is now gone was removed deliberately — dotfix says so instead of quietly putting it back. A package that appeared without dotfix is an invitation to adopt it, not drift to be wiped out.

Terminal window
dotfix status

Nothing differing prints everything in sync. Otherwise each line starts with a marker:

LineWhat it means
+ ripgrep (install)A set asks for it; Homebrew does not have it.
? node (not in any set)Installed here, in no set. Adopt it, or ignore it on this machine.
? fzf (removed here — drop from set or reinstall)dotfix installed it once and it is gone now.
- htop (uninstall)No active set asks for it any more.
- htop (skipped, still required by ...)Wanted gone, but another package depends on it. Left alone.

Formulae are compared as Homebrew leaves — a package installed only as another one’s dependency was never your choice, so dotfix does not mention it.

Terminal window
dotfix apply --dry-run # show what would happen, change nothing
dotfix apply # ask, then do it
dotfix apply --yes # skip the questions

Installs what is missing and removes what is no longer wanted. --no-sync skips the fetch-and-pull that normally runs first.

Terminal window
dotfix adopt

dotfix walks the unmanaged packages and asks, one at a time, whether to add each to a set or ignore it on this machine. Ignoring is recorded in machines/<name>.toml, so the same package stops being mentioned on this Mac but stays visible on the others.

A package ignored on this Mac stays visible on the others — the decision is per machine, not repository-wide.