A clean, modern dotfiles management system using GNU Stow for cross-platform configuration management.
Each configuration is organized as a "Stow package" - a directory containing files in the same structure as they would appear in your home directory:
dotfiles-stow/
├── bash/ # Shell configuration
│ └── .bashrc
├── kitty/ # Terminal emulator
│ └── .config/kitty/kitty.conf
├── emacs/ # Emacs editor
│ └── .emacs.d/
│ ├── *.el # Configuration files
│ └── packages/ # Custom packages
├── hyprland/ # Wayland compositor (Linux)
│ └── .config/hypr/hyprland.conf
├── waybar/ # Status bar (Linux)
│ └── .config/waybar/
├── dunst/ # Notifications (Linux)
│ └── .config/dunst/dunstrc
├── scripts/ # User scripts
│ └── .local/bin/
└── install.sh # Installation script
GNU Stow is required and will be automatically installed if missing.
cd ~/Sync/dotfiles-stow
./install.sh
./install.sh # Install all packages
./install.sh uninstall # Remove all symlinks
./install.sh restow # Remove and reinstall (useful after updates)
./install.sh update # Update git-based packages
./install.sh help # Show usage information
INSTALL_IOSEVKA=true ./install.sh # Install optional Iosevka font
- GNU Stow creates symbolic links from each package to your home directory
- Dependencies are automatically installed (stow, fonts, system packages)
- Backups are created for existing configurations before linking
- Platform detection installs appropriate packages (Linux/macOS)
cd ~/Sync/dotfiles-stow
stow bash # Install just bash configuration
stow kitty # Install just kitty configuration
stow emacs # Install just Emacs configuration
stow -D bash # Remove bash configuration links
stow -D emacs # Remove Emacs configuration links
- Universal: bash, kitty, emacs, scripts
- Linux Only: hyprland, waybar, dunst
- macOS Only: (none currently)
The installer automatically detects your platform and installs required packages:
- Arch Linux:
stow
,dunst
,libnotify
,wofi
,ripgrep
- macOS:
stow
(via Homebrew),ripgrep
- Other Linux:
stow
,ripgrep
Automatically downloads and installs:
- FiraMono Nerd Font (default terminal font)
- JetBrains Mono Nerd Font (Linux only, for Waybar icons)
- Iosevka (optional, set
INSTALL_IOSEVKA=true
)
- Uses minimal-emacs.d as base
- Git packages (macrursors) are automatically cloned and updated
- Custom configuration files are stowed on top
Before installing, existing configurations are backed up to timestamped directories like ~/.dotfiles_backup_20250808_143022/
.
- Arch Linux (full support: Hyprland, Waybar, Dunst)
- macOS (basic support: terminal, shell, Emacs)
- Other Linux (basic support: terminal, shell, Emacs)
If you're migrating from a previous dotfiles system:
- Backup your current configs:
cp -r ~/.config ~/.config.backup
- Run installer:
./install.sh
- Test configurations and verify everything works
- Remove backups when satisfied
- Create a new directory:
mkdir mypackage
- Add files with proper structure:
mypackage/.config/myapp/config
- Install:
stow mypackage
- Edit files in the package directory
- Restow:
stow -R packagename
or./install.sh restow
Create .stow-local-ignore
in any package to exclude files:
\.git
README.md
*.tmp
If Stow reports conflicts (existing files/directories):
- Check what exists:
ls -la ~/.config/conflicting-app
- Backup if needed:
mv ~/.config/app ~/.config/app.backup
- Restow:
stow -R packagename
If packages fail to install:
- Check your package manager is working
- Install manually:
sudo pacman -S stow
(Arch) orbrew install stow
(macOS) - Re-run installer:
./install.sh
Scripts need execute permissions:
chmod +x ~/.local/bin/*
This system follows the Unix philosophy of "do one thing well":
- GNU Stow handles symlink management
- Install script handles dependencies and setup
- Package structure mirrors home directory layout
- Version control tracks all configurations
Clean, simple, and maintainable.