These are my personal dotfiles for Arch Linux with Omarchy + Hyprland.
Now using GNU Stow for robust symlink management that eliminates circular symlink issues and provides a cleaner, more maintainable setup.
/usr/bin/env bash -c 'set -euo pipefail; dotfiles_dir="$HOME/.dotfiles"; rm -rf "$dotfiles_dir"; mkdir -p "$dotfiles_dir"; curl -fsSL "https://codeload.github.com/shawntz/dotfiles/tar.gz/refs/heads/master" | tar -xz -C "$dotfiles_dir"; cd "$dotfiles_dir"/dotfiles-*; mv * .* "$dotfiles_dir"/ 2>/dev/null || true; cd "$dotfiles_dir"; git init; git remote add origin https://github.com/shawntz/dotfiles.git; bash ./install.sh -y'
Install stow and clone the repository:
# On Arch Linux
sudo pacman -S stow
# On macOS
brew install stow
# Clone dotfiles
git clone https://github.com/shawntz/dotfiles.git ~/Developer/dotfiles
cd ~/Developer/dotfiles
# Install dotfiles for your platform (auto-detected)
make install
# Or install for specific platform
make archlinux # For Arch Linux
make darwin # For macOS
make base # Base files only
# Complete setup: packages + dotfiles
make bootstrap
This will:
- Install packages from backup lists (if on Arch Linux)
- Create symlinks for all configuration files using stow
- Handle conflicts automatically
Run make help
to see all available targets:
make install # Install dotfiles for detected platform
make uninstall # Remove all symlinks
make restow # Re-create symlinks (useful after adding files)
make status # Show current installation status
make doctor # Run comprehensive health check
make preview # Preview what stow would do (dry run)
make backup-packages # Export package lists (Arch Linux only)
make restore-packages # Install packages from lists (Arch Linux only)
make adopt # Adopt existing files into dotfiles (use with caution)
make archlinux # Force install Arch Linux dotfiles
make darwin # Force install macOS dotfiles
make base # Install base dotfiles only
make list-packages # List available stow packages
make clean # Alias for uninstall
The repository is organized as stow packages:
dotfiles/
βββ Makefile # Simplified stow-based automation
βββ base/ # Common files for all platforms
β βββ .gitconfig
β βββ .zshrc
β βββ .bashrc
β βββ .profile
β βββ .gitignore
β βββ scripts/
β βββ auto-mount-cloud.sh
β βββ open-url.sh
βββ archlinux/ # Arch Linux specific files
β βββ .config/
β β βββ hypr/
β β β βββ hyprland.conf
β β β βββ bindings.conf
β β β βββ ...
β β βββ waybar/
β β βββ alacritty/
β β βββ nvim/
β β βββ ...
β βββ .local/
β β βββ bin/
β β βββ share/
β β βββ applications/
β βββ packages/ # Package lists
β βββ pkglist.txt
β βββ aurlist.txt
βββ darwin/ # macOS specific files
β βββ .config/
β βββ ...
βββ wallpapers/ # Wallpaper collection
βββ misc/ # Miscellaneous files
# Check status
make status
# Install/update dotfiles
make install
# Preview changes before applying
make preview
# Reinstall symlinks after adding files
make restow
# Backup current packages
make backup-packages
# Restore packages on new machine
make restore-packages
# Run health check
make doctor
# If you have conflicts with existing files
make adopt
# Remove all symlinks and start over
make uninstall
make install
If you're upgrading from the previous custom symlink system:
- Backup your current setup (automatic in migration)
- Install stow:
sudo pacman -S stow
orbrew install stow
- Run the new install:
make install
- Verify everything works:
make status
andmake doctor
The new system:
- β Eliminates circular symlink issues
- β Simplified maintenance
- β Better conflict detection
- β Standard tool (GNU Stow)
- β Dry-run capabilities
Important
- Conflicts: Existing files that conflict are handled by stow's
--adopt
feature - Sensitive files: Never commit SSH keys, API tokens, or other secrets
- Platform detection: Automatically detects Arch Linux vs macOS vs other Linux
- Package lists: Automatically maintained in
archlinux/packages/
- β Removed: Complex custom symlink logic that caused circular references
- β Removed: The
backup-configs
target (caused the circular symlink issues) - β Added: GNU Stow for reliable symlink management
- β Added: Better conflict detection and resolution
- β
Added: Dry-run capabilities with
make preview
- β Added: Simplified directory structure
To customize for your setup:
- Add files: Place them in the appropriate stow package (
base/
,archlinux/
,darwin/
) - Platform-specific: Use the platform directories for OS-specific configurations
- Common files: Use
base/
for files shared across all platforms - Re-stow: Run
make restow
after adding new files
The stow-based approach makes customization much more predictable and maintainable.