Kind: foundation
Effort: L · Risk: high
Source: samandmoore/dotfiles (run 2026-08-19)
Decision: spike
Problem
Bash gives weak out-of-the-box interactive ergonomics: no autosuggestions, no syntax highlighting, completions only where someone wrote them.
Current state (this repo)
bash-first by design (Homebrew bash via chsh). ~257 lines across .bashrc/.bashrc.Darwin/.bashrc.Linux/.bashrc.nyx/.bash_profile/.profile, a .bash_completion.d tree, ~90 lines of secondary zsh, and 11 bash scripts in bin.Darwin. .githelpers is bash functions sourced by git aliases.
Their approach
config/fish (~169 lines: config.fish, conf.d/exports.fish, conf.d/aliases.fish, functions/, completions/) alongside a maintained bash and zsh, with ~/.config/fish/local.fish as the untracked escape hatch. starship supplies the prompt across all three, so the prompt is not shell-specific.
Difference that matters
fish gets autosuggestions, syntax highlighting, and generated completions with zero plugin management, where zsh needs a framework or hand-wired plugins. The price is non-POSIX syntax: the rc files cannot be shared, and every conditional and function in the existing 257 lines is a rewrite, not a port. Their setup sidesteps this by maintaining all three shells in parallel rather than migrating.
Translation into this repo
home/.config/fish/ plus manifest entries; the OS/host branching would move from .bashrc./.bashrc. filename suffixes to conf.d/ files. The tmux auto-attach block at the end of .bashrc.Darwin and its guards (CLAUDECODE/AI_AGENT markers, TERM_PROGRAM allowlist) would need a fish equivalent. Scripts and git aliases stay bash regardless.
Pilot slice
Install fish and run it as a non-login shell for a week without chsh, porting only exports and aliases. Nothing in the repo changes until the week is up.
Spike question
Do fish's out-of-the-box interactive ergonomics beat zsh-plus-plugins or ble.sh-on-bash by enough to justify a non-POSIX rc language, given ~257 lines of bash rc that cannot be ported mechanically and a bash-first deploy? Compare all three against the same concrete list of daily interactions, and decide against zsh-migration (#9) rather than in isolation.
Kind: foundation
Effort: L · Risk: high
Source: samandmoore/dotfiles (run 2026-08-19)
Decision: spike
Problem
Bash gives weak out-of-the-box interactive ergonomics: no autosuggestions, no syntax highlighting, completions only where someone wrote them.
Current state (this repo)
bash-first by design (Homebrew bash via chsh). ~257 lines across .bashrc/.bashrc.Darwin/.bashrc.Linux/.bashrc.nyx/.bash_profile/.profile, a .bash_completion.d tree, ~90 lines of secondary zsh, and 11 bash scripts in bin.Darwin. .githelpers is bash functions sourced by git aliases.
Their approach
config/fish (~169 lines: config.fish, conf.d/exports.fish, conf.d/aliases.fish, functions/, completions/) alongside a maintained bash and zsh, with ~/.config/fish/local.fish as the untracked escape hatch. starship supplies the prompt across all three, so the prompt is not shell-specific.
Difference that matters
fish gets autosuggestions, syntax highlighting, and generated completions with zero plugin management, where zsh needs a framework or hand-wired plugins. The price is non-POSIX syntax: the rc files cannot be shared, and every conditional and function in the existing 257 lines is a rewrite, not a port. Their setup sidesteps this by maintaining all three shells in parallel rather than migrating.
Translation into this repo
home/.config/fish/ plus manifest entries; the OS/host branching would move from .bashrc./.bashrc. filename suffixes to conf.d/ files. The tmux auto-attach block at the end of .bashrc.Darwin and its guards (CLAUDECODE/AI_AGENT markers, TERM_PROGRAM allowlist) would need a fish equivalent. Scripts and git aliases stay bash regardless.
Pilot slice
Install fish and run it as a non-login shell for a week without chsh, porting only exports and aliases. Nothing in the repo changes until the week is up.
Spike question
Do fish's out-of-the-box interactive ergonomics beat zsh-plus-plugins or ble.sh-on-bash by enough to justify a non-POSIX rc language, given ~257 lines of bash rc that cannot be ported mechanically and a bash-first deploy? Compare all three against the same concrete list of daily interactions, and decide against zsh-migration (#9) rather than in isolation.