Personal shell, editor, and terminal dotfiles for macOS and apt-based Linux systems.
The setup flow is primarily exercised on macOS, but the repo also supports Debian-family Linux with a separate apt-based dependency path.
./setup.shThis will:
- backup all current dotfiles to
~/.dotfile_backups/<current timestamp> - install dependencies if possible
- install new dotfiles to
~/ - install new fonts to
~/Library/Fontson macOS or~/.local/share/fontselsewhere - configure
~/.gitconfig_customfromGIT_NAMEandGIT_EMAIL, reuse an existing file, or prompt if needed
After installation, set your terminal font to one of the patched fonts from the repo's fonts/ directory.
backup- will backup current dotfiles to~/.dotfile_backups/<current timestamp>deps- will install the base dependency setdeps <group...>- will install the base dependency set plus optional package groups, for example./setup.sh deps azure kubernetesdotfiles- will install the new dotfiles to~/fonts- will install new fonts to~/Library/Fontson macOS or~/.local/share/fontson other systemsgroups- will list the optional package groups available for the current OSinstall- runsbackup,deps,setup_git,dotfiles, andfonts-- this is the default commandinstall <group...>- runs the default install flow and also installs optional package groupsrestore- will restore backed up dotfiles, usageRESTORE_TIMESTAMP=<desired timestamp> ./setup.sh restoresetup_git- configures git identity from environment, existing config, or a prompt when needed
For unattended setup, use NONINTERACTIVE=1 and preseed git identity:
NONINTERACTIVE=1 GIT_NAME='Jane Doe' GIT_EMAIL='jane@example.com' ./setup.sh install
Install repo-local development tooling with npm install.
See docs/development.md for the local development workflow.
npm run lintis the umbrella lint entrypoint and runs shell plus Markdown linting.npm run lint:mdrunsmarkdownlint-cli2for repo Markdown files.npm run lint:shellrunsshellcheckagainst bash and sh files andzsh -nagainst zsh-specific files.npm run lint:shell:stagedruns the staged-file version used bypre-commit.huskyandlint-stagedrun the same shell and Markdown lint checks duringpre-commitfor staged files.
These are the base tools the installer attempts to install by default when the current platform supports them.
On macOS, the installer bootstraps Homebrew if needed and uses it to install the base package set.
- bat - syntax-highlighting
catreplacement - https://github.com/sharkdp/bat#installation - delta - syntax-highlighting pager for Git and diff output - https://github.com/dandavison/delta
- ctags -
universal-ctags, installed via Homebrew on macOS - https://github.com/universal-ctags/homebrew-universal-ctags - eza - modern
lsreplacement - https://github.com/eza-community/eza - fastfetch - system information tool - https://github.com/fastfetch-cli/fastfetch
- fd - fast, user-friendly
findalternative - https://github.com/sharkdp/fd - fzf - command-line fuzzy finder - https://github.com/junegunn/fzf
- git-extras - additional Git subcommands - https://github.com/tj/git-extras
- btop - interactive system monitor - https://github.com/aristocratos/btop
- jq - command-line JSON processor - https://stedolan.github.io/jq/
- neovim - modern Vim-compatible editor - https://neovim.io/
- starship - cross-shell prompt - https://github.com/starship/starship
- vim-plug - Vim and Neovim plugin manager - https://github.com/junegunn/vim-plug
- zoxide - smarter directory jumper - https://github.com/ajeetdsouza/zoxide
On apt-based Linux, fastfetch and git-delta are installed only when the package is available in the configured repositories.
On Debian-family Linux, the shell config also normalizes a couple of common package-name differences when needed:
batcatis aliased tobatfdfindis aliased tofd
The installer also attempts a best-effort Linux install of starship when it is available via apt.
Neovim is now the default editor. For fresh installs, ~/.config/nvim/init.vim sources the shared ~/.vimrc, so the core configuration works in both Vim and Neovim while the default editor command path uses nvim.
If ~/.config/nvim/init.lua already exists, the installer preserves it and skips the repo's init.vim shim to avoid Neovim's conflicting-config error.
Shell completions are now configured per shell instead of through the shared runtime. Bash loads Homebrew bash_completion.d scripts from .bashrc, while zsh uses Homebrew's native share/zsh/site-functions completions with compinit from .zshrc.
The old j muscle-memory command is kept as a compatibility alias backed by zoxide.
Use ./setup.sh groups to list the groups available for the current OS.
azure- Azure CLI toolsaws- AWS CLI toolsgcp- Google Cloud CLI toolsdigitalocean- DigitalOcean CLI toolskubernetes- cluster tooling such askubectl,helm, andk9scontainers- container tooling such as Docker CLI-related packageslocal-runtime-macos- macOS-only local runtime tools such as OrbStack
Examples:
./setup.sh deps azure kubernetes./setup.sh install aws containers./setup.sh install digitalocean local-runtime-macos