Current state
features/setup/setup.zsh sources eight files from the deprecated/ subdirectory (lines 111, 113–118, and 120: deprecated/homebrew.zsh, deprecated/rust.zsh, deprecated/uv.zsh, deprecated/node.zsh, deprecated/npm.zsh, deprecated/tmux.zsh, deprecated/neovim.zsh, deprecated/symlinks.zsh). None of these sourced steps carry any indication in the terminal output that they are executing deprecated code. A user who runs setup has no way to know that a significant portion of the installation is running older, potentially outdated scripts that the repo has marked for replacement.
The second ideal-state option below is blocked by a gap that isn't visible from reading setup.zsh: nothing calls features/install/tools.bash. It exists and auto-discovers every tools/*/install.bash by find, but setup.zsh never invokes it, so on a fresh machine no tool's install.bash runs at all — the deprecated zsh scripts are the only install path that executes. Replacing the deprecated sources therefore means wiring features/install/tools.bash into setup.zsh, not just deleting source lines. Any future tool that manages its own installation — for example one that clones a second repo — will silently not install on a new laptop until that wiring exists.
Ideal state
- When
setup.zsh runs a step sourced from deprecated/, the terminal output includes a visible indicator (e.g. a ⚠️ [deprecated] prefix line) so the user knows that step is running legacy code.
- Alternatively, all deprecated steps are replaced with their non-deprecated equivalents and the
source "${DOTINSTALL}/deprecated/*.zsh" calls are removed entirely. Taking this path also means setup.zsh calls features/install/tools.bash, so that every tool's install.bash runs on a fresh machine.
Out of scope
- Rewriting the deprecated scripts themselves (that is separate work).
- Changes to what the deprecated scripts do.
Starting points
features/setup/setup.zsh lines 109–121: the full block of source "${DOTINSTALL}/..." calls, deprecated and current interleaved
features/install/tools.bash — the auto-discovering installer that nothing currently calls
features/update/tools.bash — the equivalent for updates, which is wired up and shows the pattern to follow
QA plan
- Run
features/setup/setup.zsh (or review its echo/printf output by inspection).
- For each step sourced from
deprecated/, expect a clearly labelled terminal line such as ⚠️ [deprecated] Running homebrew.zsh — replace with features/install/....
- Confirm no step from
deprecated/ runs without this label appearing in the output.
- Grep
setup.zsh for features/install/tools.bash — expect either a call to it, or a labelled deprecation warning on every step that would otherwise have been its responsibility.
Done when
A user running setup can identify from the terminal output which installation steps are sourced from deprecated scripts, without inspecting the setup.zsh source.
Current state
features/setup/setup.zshsources eight files from thedeprecated/subdirectory (lines 111, 113–118, and 120:deprecated/homebrew.zsh,deprecated/rust.zsh,deprecated/uv.zsh,deprecated/node.zsh,deprecated/npm.zsh,deprecated/tmux.zsh,deprecated/neovim.zsh,deprecated/symlinks.zsh). None of these sourced steps carry any indication in the terminal output that they are executing deprecated code. A user who runs setup has no way to know that a significant portion of the installation is running older, potentially outdated scripts that the repo has marked for replacement.The second ideal-state option below is blocked by a gap that isn't visible from reading
setup.zsh: nothing callsfeatures/install/tools.bash. It exists and auto-discovers everytools/*/install.bashbyfind, butsetup.zshnever invokes it, so on a fresh machine no tool'sinstall.bashruns at all — the deprecated zsh scripts are the only install path that executes. Replacing the deprecated sources therefore means wiringfeatures/install/tools.bashintosetup.zsh, not just deletingsourcelines. Any future tool that manages its own installation — for example one that clones a second repo — will silently not install on a new laptop until that wiring exists.Ideal state
setup.zshruns a step sourced fromdeprecated/, the terminal output includes a visible indicator (e.g. a⚠️ [deprecated]prefix line) so the user knows that step is running legacy code.source "${DOTINSTALL}/deprecated/*.zsh"calls are removed entirely. Taking this path also meanssetup.zshcallsfeatures/install/tools.bash, so that every tool'sinstall.bashruns on a fresh machine.Out of scope
Starting points
features/setup/setup.zshlines 109–121: the full block ofsource "${DOTINSTALL}/..."calls, deprecated and current interleavedfeatures/install/tools.bash— the auto-discovering installer that nothing currently callsfeatures/update/tools.bash— the equivalent for updates, which is wired up and shows the pattern to followQA plan
features/setup/setup.zsh(or review its echo/printf output by inspection).deprecated/, expect a clearly labelled terminal line such as⚠️ [deprecated] Running homebrew.zsh — replace with features/install/....deprecated/runs without this label appearing in the output.setup.zshforfeatures/install/tools.bash— expect either a call to it, or a labelled deprecation warning on every step that would otherwise have been its responsibility.Done when
A user running setup can identify from the terminal output which installation steps are sourced from deprecated scripts, without inspecting the
setup.zshsource.