Configuration files for my development environment using a Git bare repo strategy.
# Clone the bare repo
git clone --bare [email protected]:socketwiz/dotfiles.git $HOME/.dotfiles
# Define a temporary alias
alias dotfiles='/usr/bin/git --git-dir="$HOME/.dotfiles" --work-tree="$HOME"'
# Backup any conflicting files
dotfiles checkout 2>&1 | grep -E "^\s+" | awk '{print $1}' | \
xargs -I{} mv {} {}.bak
# Checkout the dotfiles
dotfiles checkout
# Don't show untracked files (reduces noise in home directory)
dotfiles config status.showUntrackedFiles no
# Restart your shell
exec zshAfter restart, the git function in .zshrc automatically uses the dotfiles repo when in $HOME, $HOME/.config, or $HOME/.emacs.d.
- Starship — cross-shell prompt
- zoxide — smart directory jumping (use
zto jump) - fzf — fuzzy finder integration
| Original | Replacement |
|---|---|
cat |
bat |
ls |
eza --git |
vim |
nvim |
- mise — runtime version manager
- pyenv — Python version management (lazy loaded)
Git:
ga (add), gc (commit), gco (checkout), gcb (checkout -b), gd (diff), gl (pull), gp (push), gst (status), glog (log graph)
Docker:
sdc (sudo docker compose), dcup, dcstop, dclogs, dcps, dcdestroy
Safety:
rm -I, mv -i, cp -i
ed— start daemon (emacs --daemon)ec— connect to daemon (emacsclient -c -nw)et— terminal mode (emacs --no-window-system)
.zshrc, .zshenv, .zprofile, .bashrc, .bash_profile, .bash_logout, .profile
.darwin, .linux, .sun — sourced based on uname
.emacs.d/*.el— Emacs config.config/nvim/— Neovim config.config/Code/— VS Code settings.config/helix/— Helix editor
.config/alacritty/, .config/kitty/, .config/wezterm/, .config/termite/, .config/iterm2/
.config/i3/, .config/i3status-rs/, .config/sway/, .config/waybar/, .config/rofi/, .config/dunst/, .config/picom.conf
.config/tmux/,.config/zellij/— terminal multiplexers.config/fish/,.config/nushell/— alternative shells.config/gitui/— git TUI.config/starship.toml— prompt config.ssh/config— SSH configuration.local/bin/— custom scripts.deno/— Deno runtime
Secrets like API keys are stored in files excluded from Git:
~/.zshrc.local
~/.zshenv.localSourced at the end of .zshrc:
[[ -f ~/.zshrc.local ]] && source ~/.zshrc.localKeep only what you need. Track only what you trust. Automate the rest.
— Ricky Nelson