Kind: leaf
Effort: S · Risk: low
Source: webpro/dotfiles (run 2026-08-22)
Decision: adopt
Problem
A rebuilt machine restores everything Homebrew knows about and nothing else.
Current state (this repo)
Brewfile (97 lines: brew, cask, mas) is the only package manifest, and home/bin.Darwin/brewfile-dump only re-dumps that. VS Code extensions, global npm packages and cargo binaries are recorded nowhere, so they are silently lost on a fresh machine. home/.tool-versions pins five runtimes -- bun 1.3.14, deno 2.8.0, nodejs 25.8.1, python 3.14.4t, rust 1.92.0 -- so there are five ecosystems whose globally-installed packages have no manifest.
Their approach
install/ holds one flat manifest per ecosystem — Brewfile, Caskfile, Codefile (VS Code extensions), npmfile, Rustfile, pacmanfile — each wired to a Makefile target that pipes it into the right installer (code --install-extension, npm install --location global, cargo install).
Difference that matters
Where the reproducibility boundary sits. Ours stops at Homebrew; theirs covers every installer that puts a binary on PATH. This is not hypothetical here: .tool-versions pins node, rust, deno and bun, and Brewfile installs visual-studio-code -- every one of those installs global packages that nothing in this repo records.
Translation into this repo
Add Codefile and npmfile at repo root beside Brewfile, plus make code-extensions / make npm-globals targets that read them. A Rustfile is worth considering too now that rust is pinned. Skip Caskfile and pacmanfile: brew bundle already handles the cask/mas lines in one file, and there is no Arch machine. Add a dump counterpart next to brewfile-dump so the lists can be refreshed from a live machine rather than hand-maintained.
Kind: leaf
Effort: S · Risk: low
Source: webpro/dotfiles (run 2026-08-22)
Decision: adopt
Problem
A rebuilt machine restores everything Homebrew knows about and nothing else.
Current state (this repo)
Brewfile(97 lines: brew, cask, mas) is the only package manifest, andhome/bin.Darwin/brewfile-dumponly re-dumps that. VS Code extensions, global npm packages and cargo binaries are recorded nowhere, so they are silently lost on a fresh machine.home/.tool-versionspins five runtimes --bun 1.3.14,deno 2.8.0,nodejs 25.8.1,python 3.14.4t,rust 1.92.0-- so there are five ecosystems whose globally-installed packages have no manifest.Their approach
install/holds one flat manifest per ecosystem —Brewfile,Caskfile,Codefile(VS Code extensions),npmfile,Rustfile,pacmanfile— each wired to a Makefile target that pipes it into the right installer (code --install-extension,npm install --location global,cargo install).Difference that matters
Where the reproducibility boundary sits. Ours stops at Homebrew; theirs covers every installer that puts a binary on PATH. This is not hypothetical here:
.tool-versionspins node, rust, deno and bun, andBrewfileinstallsvisual-studio-code-- every one of those installs global packages that nothing in this repo records.Translation into this repo
Add
Codefileandnpmfileat repo root besideBrewfile, plusmake code-extensions/make npm-globalstargets that read them. ARustfileis worth considering too now that rust is pinned. SkipCaskfileandpacmanfile:brew bundlealready handles thecask/maslines in one file, and there is no Arch machine. Add a dump counterpart next tobrewfile-dumpso the lists can be refreshed from a live machine rather than hand-maintained.