A modern, reproducible, and elegant dotfiles configuration for Arch Linux using GNU Stow.
- π¨ Clean and organized configuration structure
- π§ Fully reproducible system configuration
- π¦ Modular package management with GNU Stow
- π Easy installation and management
- π Well-documented setup process
- π― Optimized for daily use
- OS: Arch Linux
- Window Manager: Hyprland
- Shell: Zsh with Starship prompt
- Terminal: Kitty
- File Manager: Thunar
- Audio: Pipewire, PulseAudio
This dotfiles repository includes configurations for:
- dconf - Desktop configuration
- go - Go development environment
- gtk-3-0 - GTK 3.0 theme configuration
- hypr - Hyprland window manager
- kitty - Kitty terminal emulator
- pavucontrol - PulseAudio Volume Control
- pipewire - Pipewire audio system
- pulse - PulseAudio configuration
- starship - Starship prompt configuration
- systemd - Systemd user services
- thunar - Thunar file manager
- xfce4 - XFCE4 desktop environment
- yay - Yay AUR helper configuration
Note: Browser profiles, cache directories, and sensitive data are excluded from this repository. Only actual configuration files are version controlled.
- Arch Linux (or compatible distribution)
- GNU Stow (will be installed automatically if missing)
- Git (for cloning this repository)
- Clone the repository:
git clone <your-repository-url> ~/.dotfiles
cd ~/.dotfiles- Run the installation script:
./install.shThe script will:
- Check for GNU Stow and install it if missing
- Backup your existing
.configdirectory - Create symlinks for all packages using Stow
- Verify installation:
ls -la ~/.configYou should see your configuration directories linked to the dotfiles repository.
To see what would be installed without making changes:
./install.sh --dry-runTo specify a custom backup directory:
./install.sh --backup-dir ~/my-backupTo install a specific package:
cd ~/.dotfiles
stow --target="$HOME" <package-name>Example:
stow --target="$HOME" hyprTo remove a package (delete symlinks):
cd ~/.dotfiles
stow -D --target="$HOME" <package-name>Example:
stow -D --target="$HOME" hyprTo update symlinks after making changes:
cd ~/.dotfiles
stow --restow --target="$HOME" <package-name>Or restow all packages:
cd ~/.dotfiles
find . -maxdepth 1 -type d ! -path . ! -name ".*" | \
xargs -I {} stow --restow --target="$HOME" {}.dotfiles/
βββ .gitignore # Git ignore rules
βββ .stowrc # Stow configuration
βββ install.sh # Installation script
βββ README.md # This file
βββ <package-name>/ # Individual package directories
β βββ .config/
β βββ <app-name>/ # Application configuration
βββ ...
Each package follows the structure: package-name/.config/app-name/ which creates symlinks from ~/.config/app-name/ to the dotfiles repository.
- Create a new directory for your package:
mkdir -p ~/.dotfiles/my-app/.config/my-app- Add your configuration files:
cp ~/.config/my-app/* ~/.dotfiles/my-app/.config/my-app/- Install the package:
cd ~/.dotfiles
stow --target="$HOME" my-app- Edit files in the package directory:
nano ~/.dotfiles/hypr/.config/hypr/hyprland.conf- Restow the package to update symlinks:
cd ~/.dotfiles
stow --restow --target="$HOME" hyprThe installation script automatically creates a backup of your existing .config directory before installation. Backups are stored in ~/.config-backup-TIMESTAMP.
To restore your original configuration:
cp -r ~/.config-backup-TIMESTAMP ~/.configOr restore a specific package:
cp -r ~/.config-backup-TIMESTAMP/<app-name> ~/.config/If symlinks are not being created:
- Check that GNU Stow is installed:
which stow- Verify the package structure is correct:
ls -la ~/.dotfiles/<package-name>/.config/- Try reinstalling the package:
cd ~/.dotfiles
stow -D --target="$HOME" <package-name>
stow --target="$HOME" <package-name>If you have existing files that conflict with dotfiles:
- Backup the conflicting files:
mv ~/.config/<app-name> ~/.config/<app-name>.backup- Install the package:
cd ~/.dotfiles
stow --target="$HOME" <package-name>- Compare and merge configurations if needed
If you encounter permission issues:
- Check file permissions:
ls -la ~/.dotfiles/<package-name>/- Fix permissions if needed:
chmod -R u+rw ~/.dotfiles/<package-name>/- Always backup your configuration before installation
- Only actual configuration files are included (browser profiles, cache, and sensitive data are excluded)
- The
.gitignorefile excludes sensitive data and cache directories - Some packages may require additional system configuration
- Browser configurations are intentionally excluded from version control
Contributions are welcome! Please feel free to submit issues and pull requests.
When contributing:
- Follow the existing package structure
- Update this README if adding new packages
- Test your changes before submitting
- Ensure sensitive data is excluded via
.gitignore
This project is licensed under the MIT License - see the LICENSE file for details.
- Inspired by modern dotfiles management practices
- Structure adapted from Chere3/dots-nixos
- Uses GNU Stow for symlink management
Made with β€οΈ using Arch Linux