Repository navigation
Conversation
tools.txt lists each tool's Homebrew packages, stow package, needs, and profiles. install.sh resolves a selection from it (--profile, --only, --skip, --pick), remembers it per machine in the gitignored tools.local, installs missing packages, backs up anything in the way, and stows. Co-authored-by: drewjsdev <drewjsdev@pm.me>
The full job removes the runner's Homebrew and installs everything through the curl bootstrap. The subset job installs --only nvim,skhd over the preinstalled Homebrew. verify-install.sh seeds conflicting files, then checks packages, links, backups, that nothing outside the selection is installed or linked, and that a bare rerun changes nothing by before/after snapshot. Co-authored-by: drewjsdev <drewjsdev@pm.me>
Co-authored-by: drewjsdev <drewjsdev@pm.me>
Co-authored-by: drewjsdev <drewjsdev@pm.me>
Review: install.sh + tools.txtSolid design. One registry, bash 3.2 aware, idempotent, and the verifier checks from outside the installer. I read the diff only and did not run it. Worth fixing
Minor
Security
CI / tests
Docs in README and AGENTS.md match the behavior. |
Co-authored-by: drewjsdev <drewjsdev@pm.me>
Co-authored-by: drewjsdev <drewjsdev@pm.me>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A fresh Mac needs one command that installs Homebrew and the right tools, and links their configs. Each machine should get only the tools it needs, and a rerun should change nothing. This PR adds a plain registry,
tools.txt, with one line per tool, and aninstall.shthat reads it. Stow stays the config mechanism.How it works
tools.txtnames a tool, its stow package, its Homebrew formulae and casks (cask:prefix), the tools it needs, and its profiles. Every tool is infull. Tools taggedminimalformminimal.install.shresolves the selection, adds the tools the selection needs, and saves the request (for example--profile fullor--only nvim,skhd) to the gitignoredtools.local. A bare rerun reuses that request. Machines onfullpick up new tools on their next run.brew listdoes not show. It initializes submodules only inside selected packages. It moves anything in the way of a link to~/.dotfiles-backup/<time>-<pid>/. Then it runsstow.~/.config,~/.local/bin,~/.claude,~/.config/nvim). Without this, stow folds a missing~/.localor~/.claudeinto one symlink, and nvim plugins or Claude Code state would land in the git checkout.bash -c "$(curl -fsSL .../install.sh)"installs Homebrew (one password prompt), clones to~/dotfiles(DOTFILES_DIRoverrides), and runs the clone'sinstall.sh.--profile,--only,--skip,--pick(numbered list, one prompt),--list, and--dry-run. Skipping a tool that a selected tool needs is an error.tools.txt. CI reads the same file.Scope
stow -D <pkg>yourself.alacritty/orghostty/.Tradeoffs
brew bundlebrew bundleupgrades outdated formulae by default, so a rerun is not a no-op.stow --adoptstow --no-foldingnvim/.config/nvim/luawould not appear until a rerun. It would also unfold the links on the current Mac.fullwould never get new tools.Behavior that removes or overwrites configs you have today
~/.zshrc, is moved to~/.dotfiles-backup/<time>-<pid>/at the same relative path.~/.config/nvimpointing at an older clone. The link moves. Its target is not touched.~/.config, is moved too.~/.config/nvim,~/.config/herdr, and~/.config/tmuxare real directories with per-file links, so herdr runtime state stays out of the repo. Existing folded links are kept.brew installcan upgrade outdated dependencies of a newly installed package. That is Homebrew's default, and it changes no configs.Verification
main(which includes the Alacritty removal).lint(macos-15) ran shellcheck, a parse with/bin/bash3.2, and--list.full install from zero(macos-15) removed the runner's Homebrew, ran the curl bootstrap with--profile full, and passed.subset install(macos-14) ran--only nvim,skhdover the preinstalled Homebrew and passed..github/scripts/verify-install.shseeds conflicting files, then checks packages, links, real top-level directories, and intact backups. It checks that no formula, cask, or link outside the selection appeared. A bare rerun must leave Homebrew versions, links, backups, repo status, and mtimes unchanged. Both jobs printedok: a bare rerun changed nothingandPASS.brew, and bash 3.2.57, four deliberate breaks turned the verifier red: a wrong expected set, a rerun that rewrites state, a backup that deletes, and a removed fold guard.claude-reviewcheck fails because the Claude action rejects PRs that a bot opened. This PR does not change that workflow.