Personal dotfiles configuration for macOS, managed with GNU Stow.
This repository provides a reproducible setup for my macOS development environment, including:
- Shell configuration (zsh with plugins)
- Terminal tools and utilities
- GUI applications
- System configuration files
- Window manager (Aerospace)
- Status bar (Sketchybar)
- Keyboard remapping (Karabiner)
- zsh - with autosuggestions and syntax highlighting
- starship - customizable shell prompt
- atuin - shell history
- zoxide - smart directory navigation
- fzf - fuzzy finding
- eza - modern
lsreplacement - bat - modern
catreplacement - tealdeer - fast
tldrclient - taproom - brew packages manager
- Aerospace - Tiling window manager
- Sketchybar - Status bar
- Ghostty - Terminal emulator
- Karabiner-Elements - Keyboard customizer
- Superfile - Terminal file manager
- Raycast - Productivity launcher
- Zen Browser
- Firefox Browser
- VLC
The following fonts are installed via Homebrew for use in terminals and editors:
- Hack Nerd Font - Programming font with icon support (used in terminals and status bars)
- JetBrains Mono - Modern monospace font designed for developers
- Fira Code - Monospace font with programming ligatures
All configuration is organized by application in separate directories, which are symlinked to ~ using Stow.
- macOS (currently only macOS is supported)
- An internet connection
-
Clone this repository:
git clone [email protected]:Lakston/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Run the install script:
./install.sh
The install script will:
- Install Xcode Command Line Tools (if needed)
- Install Homebrew (if needed)
- Install all required packages and applications
- Set up shell integrations
- Configure macOS system settings
- Create symlinks for all dotfiles using Stow
- Start required services
- Restart your terminal or run:
source ~/.zshrc
This repository uses GNU Stow to manage dotfiles. Stow creates symlinks from the repository to your home directory, keeping your actual config files in version control while making them available in the expected locations.
dotfiles/
├── zsh/ → ~/.zshrc, ~/.zprofile, etc.
├── sketchybar/ → ~/.config/sketchybar/
├── aerospace/ → ~/.config/aerospace/
├── karabiner/ → ~/.config/karabiner/
└── ...
Each directory represents a "package" that gets stowed to ~.
If you need to manually manage packages:
# Stow a package
stow -t ~ package-name
# Unstow a package
stow -D -t ~ package-name
# Restow a package
stow -R -t ~ package-name- macOS only: The install script and many configurations are macOS-specific
- Linux/Windows support would require significant modifications
- Requires Homebrew to be installed (script handles this)
- Requires bash 4+ (installed via Homebrew)
- Some applications require manual permission grants (Accessibility, etc.)
After running the install script, you may need to:
-
Grant Permissions:
- Accessibility permissions for Karabiner-Elements, Sketchybar, Aerospace
- Full Disk Access for some tools
- System will prompt you when needed
-
SSH Keys:
- The script doesn't set up SSH keys
- Configure your SSH keys separately for GitHub/GitLab
- See your
~/.ssh/configfor key management
-
Environment Variables:
PROJECTS_DIRis set to$HOME/Codein.zprofile- Adjust if your projects are in a different location
-
Application Configuration:
- Some apps (like Karabiner) may need manual configuration after installation
- Sketchybar widgets may need adjustment based on your setup
- Git Widget: The sketchybar git widget is disabled by default due to performance concerns (can be re-enabled in
items/widgets/init.lua) - Log Files: Debug log files (like
git_debug.log) are gitignored but may be recreated by applications - Stow Conflicts: If you have existing dotfiles, Stow will attempt to adopt them, but conflicts may require manual resolution
- Create a new directory in the repo (e.g.,
myapp/) - Add the config structure (e.g.,
myapp/.config/myapp/config.toml) - Add the package name to the
PACKAGESarray ininstall.sh - Run
stow -t ~ myappor re-run the install script
Simply edit the files in the repository and they'll be reflected immediately (since they're symlinked).
brew update && brew upgradecd ~/dotfiles
git pull
# Restow packages if structure changed
stow -R -t ~ package-namePersonal use only. Feel free to fork and adapt for your own needs.