This repo is my home base for my Arch Linux development environment dotfiles. I am using Stow to make sure I am version controlling only the files I want.
-
Clone this repository to your home directory:
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles cd ~/dotfiles
-
Clone the theme-switcher (separate project):
git clone https://github.com/StephenGunn/theme-switcher.git ~/projects/theme-switcher ln -sf ~/projects/theme-switcher/scripts/theme-switch ~/.local/bin/theme-switch
-
Install essential packages:
# Install base packages ./scripts/install.sh # Install configuration files ./link.sh # Install Nerd Fonts ./scripts/install_nerd_fonts.sh # Restore systemd services ./scripts/restore_systemd_services.sh # Configure HyprPanel ./scripts/configure_hyprpanel.sh
- Git
- Stow
-
Shells
- fish (primary shell with plugins)
- zsh (with oh-my-zsh)
-
Terminal Emulators
- alacritty
- kitty
- wezterm
- ghostty
-
Window Manager & UI
- hyprland
- waybar
- hyprpanel (AGS-based desktop UI)
-
Development Tools
- neovim
- tmux
- git
-
Utilities
- rofi/wofi (application launchers)
- fzf (fuzzy finder)
- starship (prompt)
- zoxide (smarter cd)
- yazi (file manager)
- thunar (GTK file manager - source of truth for bookmarks)
- lazygit (git TUI)
The scripts/ directory contains several helpful scripts:
- install.sh - Installs packages from
packages/core.md+packages/<hostname>.md - config.sh - Sets up configuration for various tools
- configure_system_defaults.sh - Sets up XDG default applications (file manager, browser, editor)
- sync_bookmarks.sh - Syncs GTK bookmarks (Thunar) to Qt format (one-way)
- backup_systemd_services.sh - Backs up enabled systemd user services
- restore_systemd_services.sh - Restores systemd user services
- setup_systemd_backup_cron.sh - Sets up weekly automatic backups of systemd services
- install_nerd_fonts.sh - Installs Nerd Fonts needed for proper icons
- configure_hyprpanel.sh - Configures HyprPanel and sets up autostart
Stow is used to create symlinks from this repository to your home directory:
# Use the provided script (recommended)
./link.sh
# Or manually with stow
stow -t ~ .This repo supports multiple machines (desktop, tablet, etc.) using hostname-based configs.
-
Create host-specific Hyprland config:
# Copy from existing host and modify cp .config/hypr/hosts/jovian.conf .config/hypr/hosts/<hostname>.conf # Edit monitors and workspaces for your hardware nvim .config/hypr/hosts/<hostname>.conf
-
Create host-specific packages (optional):
# Only needed if machine needs different packages than core cp packages/jovian.md packages/<hostname>.md # Edit to add/remove packages nvim packages/<hostname>.md
-
Run setup on the new machine:
./scripts/install.sh # Installs core.md + <hostname>.md ./link.sh # Links dotfiles + creates hosts/current.conf
- Hyprland:
monitors.confsourceshosts/current.conf, which is symlinked tohosts/<hostname>.confbylink.sh - Packages:
install.shreadspackages/core.md(all machines) +packages/<hostname>.md(machine-specific) - Single branch: No need for separate branches per machine
| Hostname | Description | Notes |
|---|---|---|
jovian |
Desktop | Dual monitors, gaming, heavy apps |
surfarch |
Surface Pro 8 | Single high-DPI display, tablet |
dotfiles/
├── .config/
│ ├── hypr/
│ │ ├── hosts/ # Machine-specific configs
│ │ │ ├── current.conf # Symlink to active host (gitignored)
│ │ │ ├── jovian.conf # Desktop config
│ │ │ └── surfarch.conf # Tablet config
│ │ ├── monitors.conf # Sources hosts/current.conf
│ │ ├── workspaces.conf # (in host config)
│ │ └── ... # Shared configs
│ ├── fish/
│ ├── nvim/
│ └── ...
├── packages/
│ ├── core.md # Shared packages (all machines)
│ ├── jovian.md # Desktop-specific packages
│ └── surfarch.md # Tablet-specific packages
├── scripts/
│ ├── install.sh # Reads packages/*.md based on hostname
│ └── ...
└── link.sh # Creates symlinks + hosts/current.conf
- To backup your current systemd services:
./scripts/backup_systemd_services.sh - To set up automatic weekly backups:
./scripts/setup_systemd_backup_cron.sh - To update package lists after installing new software: edit
scripts/install.sh - After making changes, commit and push to your repository
This dotfiles repo integrates with a separate theme-switcher project for unified theming.
# Clone theme-switcher (separate git repo)
git clone https://github.com/StephenGunn/theme-switcher.git ~/projects/theme-switcher
# Create symlink for easy access
ln -sf ~/projects/theme-switcher/scripts/theme-switch ~/.local/bin/theme-switch- Keybinding:
Super + T- Opens theme selector - Command:
theme-switch- Opens theme selector - Direct:
theme-switch <theme-name>- Switch directly
- Gruvbox Dark
- Catppuccin Mocha
- Nord
- Kanagawa Dark
- Everforest
- Tokyo Night
- Ghostty (terminal) - Custom theme files
- Neovim (editor) - Native colorschemes (live reload)
- Hyprland (window manager) - Color scheme files
- HyprPanel (desktop panel) - Complete theme files
- Rofi (launcher) - .rasi theme files
- Thunar (file manager) - GTK themes
- Yazi (TUI file manager) - Flavor system
- Starship (prompt) - Pywal-generated colors
- Dunst (notifications) - Pywal-generated config
- Wallpapers - Random selection with smooth transitions (swww)
Each theme needs the following files in ~/projects/theme-switcher/themes/<theme-name>/:
config.json- Theme configurationhyprpanel.json- HyprPanel colors (simplified 20-line or full 375-line format)colors.json- Pywal color palette (16 colors)<theme-name>.conf- Hyprland color definitions<theme-name>.rasi- Rofi themewallpapers/- Directory with wallpaper images- Custom Ghostty theme in
~/.config/ghostty/themes/<ThemeName>
HyprPanel Theme Format:
- Simplified (20 keys): Basic colors, HyprPanel auto-fills the rest
- Complete (375 keys): Full control over every UI element
- Both work! Simplified is easier to maintain.
See the theme-switcher repository for documentation.
Source of Truth: Thunar (GTK Bookmarks)
- Primary file:
~/.config/gtk-3.0/bookmarks - Sync direction: GTK → Qt (one-way, optional)
- Used by: Thunar, Firefox file dialogs, most Linux apps
- In Thunar: Navigate to folder, press
Ctrl+D - Edit directly:
nvim ~/.config/gtk-3.0/bookmarks - Sync to Qt apps (optional):
./scripts/sync_bookmarks.sh
Bookmarks automatically appear in:
- ✅ Thunar sidebar
- ✅ Firefox/Zen save dialogs
- ✅ Most application file dialogs
- ✅ Any GTK file chooser
See BOOKMARKS_SYNC.md for detailed documentation.
- SYSTEM_DEFAULTS.md - Default applications and XDG configuration
- BOOKMARKS_SYNC.md - How bookmarks work across programs
- GTK_BOOKMARKS.md - GTK bookmarks and file dialog configuration
- SETUP_COMPLETE.md - Recent setup summary and installation steps
- CLAUDE.md - Instructions for Claude Code when working with this repo