Skip to content

Per-ecosystem install manifests beyond Brewfile (VS Code extensions, npm globals) [find-inspiration:ecosystem-manifests] #33

Description

@nonreagent

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    adoptDecided: adopt into this repofind-inspirationIdea triaged via the find-inspiration skill

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions