Welcome to my personal dotfiles repository! This is where I keep all my configuration files organized and synced across machines. Nothing fancy, just a clean setup that works.
Here's what you'll find in this repo:
- aerospace - Window management that doesn't suck
- bat - A better
catwith syntax highlighting - configstore - Various app configs and settings
- gh - GitHub CLI configuration
- ghostty - Terminal emulator config
- git - Git aliases, settings, and other git goodies
- nvim - Neovim setup (the good stuff)
- ohmyposh - Prompt theme and customization
- tmux - Terminal multiplexer config
- zsh - Shell configuration and aliases
I use GNU Stow to manage these dotfiles. It's simple and does exactly what you need without being complicated.
-
Clone this repo to your home directory:
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Install GNU Stow if you don't have it:
# macOS brew install stow # Ubuntu/Debian sudo apt install stow # Arch sudo pacman -S stow
-
Stow the configs you want:
# Zsh files live in $HOME (e.g. ~/.zshrc, ~/.zprofile, ...) stow -t ~ zsh # Everything under ./config is meant to live under ~/.config/* # (note: `stow config` from the repo root would create/link into ~/config, NOT ~/.config) stow -t ~/.config config # If you only want one app from ./config, stow that sub-package from within ./config: (cd config && stow -t ~/.config nvim) # This works because `nvim` is a package relative to ./config
Stow creates symlinks in a target directory that mirror the directory structure inside the package directory.
- If you run
stow zshfrom~/dotfiles, the default target is~(your home directory), so it links things like~/.zshrc→~/dotfiles/zsh/.zshrc. - For this repo’s
config/package, you usually want the target to be~/.config, so you runstow -t ~/.config config. That links~/.config/nvim→~/dotfiles/config/nvim,~/.config/ghostty→~/dotfiles/config/ghostty, etc.
The structure here mirrors where files should go on your system:
zsh/→~/(for.zshrc,.zprofile, etc.)config/→~/.config/(when you use-t ~/.config)
When you update a config file, the changes are automatically reflected in this repo since everything is symlinked. Just commit and push when you're happy with your changes.
# Make changes to your configs
# They're automatically "in" the repo via symlinks
# Commit your changes
git add .
git commit -m "update nvim config"
git push- Clone this repo
- Install stow
- Run:
stow -t ~ zsh stow -t ~/.config config
- You're done!
If you need to remove the symlinks for any reason:
# Remove zsh symlinks from $HOME
stow -D -t ~ zsh
# Remove config symlinks from ~/.config
stow -D -t ~/.config config
# If you stowed a single app from within ./config:
(cd config && stow -D -t ~/.config nvim)- Back up your existing configs before stowing if you care about them
- Some configs might need tweaking for your specific setup
- Not everything will work out of the box - you might need to install the actual programs first
- Feel free to fork this and make it your own!
This setup works for me, but your mileage may vary. The beauty of dotfiles is that they're personal. Take what you like, change what you don't, and make it yours.
Happy configuring! 🛠️