Bash-only macOS dotfiles: shell, git, vim, and OS settings. Symlinked into ~,
so every local edit is immediately visible as an uncommitted change in this repo —
new terminals print ≡ dotfiles: uncommitted changes until it's committed.
That one line is the entire sync mechanism.
Principles:
- bash only — login shell is brew bash; zsh is deliberately unmanaged.
- no install lists — setup installs only what the shell itself needs (bash, bash-completion, git, anyenv). Languages and apps are installed by hand when actually needed.
- no surprises — every tool init in
.bash_profileis guarded, so a machine without anyenv/cargo/atuin gets a working shell, not errors. - no secrets — tokens,
.netrc, ssh keys never live here.
| Dir | Contents |
|---|---|
shell/ |
.bash_profile .bashrc .aliases .bash_prompt .exports .path .inputrc .hushlogin |
git/ |
.gitconfig (incl. identity) .gitignore (global excludes) .gitattributes |
editors/ |
.vimrc .gvimrc .vim/ .editorconfig |
misc/ |
.curlrc .finicky.js |
assets/ |
Terminal profile, Rectangle config — imported manually |
setup/ |
setup.sh macos.sh sudo.sh |
git clone git@github.com:kessl/dotfiles.git ~/dev/dotfiles
~/dev/dotfiles/setup/setup.shsetup.sh is idempotent and does: Command Line Tools → Homebrew →
brew install bash bash-completion@2 git anyenv → registers brew bash in
/etc/shells and makes it the login shell (chsh prompts for your password) →
anyenv install --force-init → Atuin installer → link.sh (symlinks all
dotfiles into ~, replacing whatever is there). Open a new terminal afterwards.
Then, in any order:
~/dev/dotfiles/setup/macos.sh # OS settings (Finder, Dock, input, screenshots…); log out/in for all to apply
~/dev/dotfiles/setup/sudo.sh # Touch ID for sudo (writes /etc/pam.d/sudo_local, survives OS updates)Remaining manual steps — everything the scripts don't do:
- SSH: restore or generate keys into
~/.ssh, write~/.ssh/config(not in this repo), add the public key to GitHub. - Languages (as needed):
anyenv install rbenv/nodenv/pyenv, restart the shell, then e.g.rbenv install <version> && rbenv global <version>. - Atuin sync (optional):
atuin loginto pull shell history. - Terminal profile: Terminal → Settings → Profiles → gear → Import →
assets/Basic.terminal, then set it as default. - Rectangle: install (
brew install --cask rectangle), then Preferences → importassets/RectangleConfig.json. - Finicky:
.finicky.js(default browser routing) takes effect once the app is installed:brew install --cask finicky. - Secrets: never on disk or in this repo — recreate
~/.netrcetc. only if something actually needs them.
Edit dotfiles in place (they're symlinks into this repo), then commit here. If a tool appends to a profile file, the drift alert catches it in the next terminal.