Migrate dotfiles from bash to zsh and modernize the toolchain#22
Merged
Conversation
Shell layer moves to zsh, the macOS default since Catalina: .zshenv/.zprofile/ .zshrc replace the bash startup files, per-tool snippets move to zshrc.d/, and zsh's compinit replaces bash-completion. dotbot still manages the symlinks. Tooling: exa -> eza, liquidprompt -> starship, diff-so-fancy -> delta, and jenv/direnv/nodenv/rbenv -> mise. Adds ripgrep, fd, fzf and zoxide. Zenburn is wired end to end (vendored bat/delta theme, fzf colours, starship palette) with a Nerd Font for prompt glyphs. Removed as dead: the aws, aws-vault, terraform, hub, jenv, emacs, dotnet and dircolors snippets; direnvrc; the XDG_DATA_HOME/XDG_CONFIG_HOME overrides; and svn, python and bash-completion from the Brewfile. Commit signing via 1Password's op-ssh-sign, scoped by remote URL to the personal GitHub namespace so work repos stay unsigned even on a personal machine. The historical ~/.gitconfig is retired in favour of the managed config.
config.local carries machine-wide Host * overrides (work machines point at a Secure Enclave agent rather than 1Password), so it belongs after Colima's host-specific blocks but still before the repo defaults. Verified both hold at once: config.local overrides the default agent for github.com, while Colima's per-host settings are no longer shadowed by it.
Both were GOPATH-layout relics ($GOPATH/{bin,pkg,src}) from when profile set
GOPATH=$HOME; src also backed the old CDPATH. That override went with the bash
profile, go isn't installed and GOPATH is unset, and the mkdir line was the only
reference to either path in the repo. Both were empty and have been removed.
~/bin stays: it is the target of the PATH prepend in zprofile, which is a no-op
unless the directory exists.
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
Moves the shell layer to zsh (the macOS default since Catalina) and refreshes the toolchain. dotbot still manages symlinks; the
*.dsnippet architecture andcommand -vguards are retained, so a missing tool degrades silently..zshenv/.zprofile/.zshrcreplace the bash startup files;bashrc.d/→zshrc.d/; zsh'scompinitreplaces bash-completion (removing the bash-4 prerequisite entirely).brew shellenvnow runs in.zprofile, soHOMEBREW_PREFIXis actually set.exa→eza,liquidprompt→starship,diff-so-fancy→delta, andjenv/direnv/nodenv/rbenv→mise. Adds ripgrep, fd, fzf, zoxide..tmThemefor bat and delta (BAT_THEME=zenburnwas previously a no-op), fzf picker colours, starship palette, plus a Nerd Font for prompt glyphs.op-ssh-sign, scoped by remote URL to the personal GitHub namespace, so work repos stay unsigned even on a personal machine. Verification (allowed_signers) is global so signed commits elsewhere show as untrusted rather than erroring.direnvrc; theXDG_DATA_HOME/XDG_CONFIG_HOMEoverrides;svn,pythonandbash-completionfrom the Brewfile; and the historical~/.gitconfig.Several bash→zsh semantic gaps were found and fixed after the port, not just syntax:
compinitaborting on Homebrew's group-writablefpath(which silently disabled all completion),WORDCHARSswallowing whole hyphenated names on Option+Delete, andsetopt correctbeing a mis-port ofshopt -s cdspell.Test plan
make shellcheckclean (CI target repointed atzshrc.d/)eza/ll,z, Ctrl-R (fzf),miseall activebat --list-themesincludeszenburnstatus=Gwith the dedicated signing key; confirmed off for work-namespace remotesInclude, no signing)🤖 Generated with Claude Code