Repository navigation
feat(dots): add CLI to install, check and update components - #3
Merged
Merged
Conversation
Show per-package progress so a failing Brewfile entry is visible in the installer output.
Every machine has been migrated to dotstate, so link_dotfiles no longer needs to move pre-dotstate state or unfold Stow directory links.
Group the installer steps into named components (brew, gh, shell, tmux, tools, link, herdr, skills) run from one ordered list, so parts of the setup can be installed on their own. A full install runs the same steps in the same order. Shared checks used by the installers move into small helpers, and the ordering tests read the step order from the components.
install.sh could only reinstall everything. dots installs selected components (failing with a hint when a prerequisite is missing), reports their status, updates them, and passes doctor/sync/add/remove through to dotstate. It sources install.sh and is linked to ~/.local/bin/dots by dotstate.
There was a problem hiding this comment.
🟡 Changes recommended
Skill updates bypass existing collision safeguards, and unresolved update, status, validation, and test-isolation issues need correction.
5 open issues
What changed in this PR
Adds a dots CLI for managing individual parts of the dotfiles setup, reusing ordered installer components while preserving the full installation sequence.
Changes:
- Adds selective installation, status checks, updates, and dotstate command passthrough.
- Shares installer helpers, enables verbose Brewfile installation, and removes legacy Stow migration steps.
- Documents the CLI and adds checks for component ordering, argument handling, prerequisites, and command linking.
| File | Description |
|---|---|
test.sh |
Adds component-order and stubbed CLI checks; removes legacy migration assertions. |
README.md |
Documents CLI commands and component prerequisites. |
install.sh |
Groups installation steps into components and extracts shared helpers. |
dots |
Adds the component-management CLI and dotstate passthrough. |
.gitignore |
Allows tracking the root CLI script. |
.dotstate-profiles.toml |
Registers the CLI’s home-directory link. |
Review effort: Balanced
mainframev
force-pushed
the
feat/dots-cli
branch
from
October 25, 2026 02:08
cc6a01f to
0699b69
Compare
The substring check accepted an argument like 'brew gh', which then matched no component, so dots install, status and update silently did nothing. Compare each argument against the component names exactly.
The check relied on npx being absent from /usr/bin:/bin, which fails on hosts with distro-installed Node. Stub command_exists to hide it instead.
dots update skipped the tools component. Update uv with uv self update, OpenCode with opencode upgrade and ccstatusline with npm, matching how each is installed.
skills update reinstalls through the same Claude Code paths that install_agent_skills refuses to replace, so update only installed skills whose ~/.claude/skills entry is not a real directory. dots status link trusted dotstate doctor even when dotstate links another checkout; check repo_path first, sharing the checks with install.sh.
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.


Summary
install.shcould only reinstall everything. This PR splits the installer into ordered components and adds adotsCLI that works on them one at a time.install.sh): the steps are grouped intobrew gh shell tmux tools link herdr skillsand run from one ordered list../install.shruns the same 16 steps in the same order as before. The installers anddots statusnow share small helpers (Brewfile casks, gh extensions, zsh plugin dir, herdr plugins).dotsCLI (repo root, linked to~/.local/bin/dotsby dotstate):dots install <components>installs only what you name, in install order. If a prerequisite is missing it stops with a hint (e.g.npx not found; run: dots install brew) instead of installing it.dots install --allruns the full install.dots list,dots status [--no-gui]anddots updatecover the components.update brewonly upgrades installed packages, so it never adds casks.dots link, plusdoctor,sync,addandremovepassed through to dotstate.masteryet. One runsbrew bundle --verbose; the other drops the Stow-era migration steps, since every machine is now on dotstate.Testing
./test.shpasses (1 warning: taplo/toml-cli not installed). New checks:dots;dotsagainst stubs in a temp home: list through the linked command, the missing-prerequisite hint, selection order and dedup, unknown components, and dotstate passthrough;dotsand its link stay trackable.dots list,statusanddoctoron a real macOS machine. Status was correct.dots install,updateandlink(tested against stubs only). Also not verified: Linux and Codespaces.