A comprehensive configuration repository for a modern Wayland-based Linux desktop environment using Hyprland as the window manager. This setup is optimized for productivity, gaming, and customization with pre-configured integration between multiple tools and utilities.
- Hyprland Window Manager โ Tiling compositor for Wayland with advanced animations and GPU acceleration
- Gaming Mode โ Performance profile toggle that disables animations, optimizes power settings, and pauses notifications for distraction-free gaming
- Custom Waybar Status Bar โ Modular status bar with system tray, clock, media controls, and custom gamemode indicator
- Kitty Terminal โ GPU-accelerated terminal with custom fonts and color themes
- Desktop Notifications โ Dunst daemon configured to integrate seamlessly with Waybar aesthetic
- Systemd User Services โ Automated daemon management for core session components
- Automatic Installation โ
install.shscript handles package installation, symlink management, and service enabling
This repository follows the GNU Stow symlink farm pattern. Each top-level directory represents a "package" containing a .config/ subdirectory structure that mirrors your home directory.
dotfiles/
โโโ hypr/ # Hyprland window manager configuration
โ โโโ .config/hypr/
โ โโโ hyprland.conf # Core Hyprland settings (monitors, keybinds, rules)
โ โโโ keybindings.conf # All keyboard shortcuts and window management bindings
โ โโโ monitors.conf # Display configuration (resolution, refresh, scaling)
โ โโโ workspaces.conf # Workspace setup and behavior
โ โโโ autostart.conf # Applications to launch on session start
โ โโโ hypridle.conf # Idle management (screen off, suspend timeouts)
โ โโโ hyprlock.conf # Screen lock appearance and behavior
โ โโโ windowrules.conf # Per-app window rules and behaviors
โ โโโ wallpapers/ # Wallpaper images for awww daemon
โ โโโ bin/
โ โ โโโ wallpaper-manager # Compiled wallpaper rotation daemon
โ โโโ scripts/
โ โโโ gamemode.sh # Gaming Mode toggle script
โ โโโ wallpaper_manager.go # Wallpaper manager source (built at install)
โ
โโโ systemd/ # User-level systemd services
โ โโโ .config/systemd/user/
โ โโโ hyprpolkitagent.service # PolicyKit authentication service
โ โโโ ssh-agent.service # SSH key management daemon
โ โโโ awww.service # Wallpaper daemon
โ โโโ waybar.service # Status bar service
โ โโโ hypridle.service # Idle management service
โ โโโ default.target.wants/ # Default session startup targets
โ โโโ graphical-session.target.wants/ # Graphical session targets
โ
โโโ kitty/ # Terminal emulator configuration
โ โโโ .config/kitty/
โ โโโ kitty.conf # Terminal settings, fonts, colors, keybindings
โ
โโโ waybar/ # Status bar and system tray
โ โโโ .config/waybar/
โ โโโ config.jsonc # Module definitions and layout configuration
โ โโโ style.css # Colors, fonts, spacing, and visual styling
โ โโโ icons/ # Custom icon definitions and theme
โ
โโโ dunst/ # Desktop notification daemon
โ โโโ .config/dunst/
โ โโโ dunstrc # Notification styling, placement, and urgency levels
โ
โโโ wlogout/ # Lock/logout screen interface
โ โโโ .config/wlogout/
โ โโโ layout # Button layout for power menu
โ โโโ logout # Handler script for system commands
โ โโโ style.css # Lock screen styling and theme
โ
โโโ install.sh # Automated installation and setup script
โโโ README.md # This file
Each directory (e.g., hypr/, kitty/, waybar/) is a Stow "package." Running stow hypr creates symlinks from .config/hypr/ โ ~/.config/hypr/. This modular approach makes it easy to:
- Enable/disable individual configurations
- Manage multiple profiles
- Keep dotfiles organized
- OS: Arch Linux or Arch-based distribution (Manjaro, EndeavourOS, etc.)
- Wayland Session: A Wayland login session (not X11)
- Standard Tools:
git,curl, andbash
The easiest way to set up these dotfiles is to run the provided installation script:
# Clone the repository
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
cd ~/dotfiles
# Run the installer
bash install.sh- Installs
yay(AUR helper) โ If not already installed, builds and installs it from source - Installs all dependencies โ Uses
yayto install all required packages (see Dependencies section) - Builds Go executables โ Compiles
wallpaper_manager.gotobin/wallpaper-managerbinary - Symlinks configurations โ Uses
stowto create symlinks for each package (hypr, kitty, waybar, etc.) - Enables systemd services โ Reloads systemd daemon and enables/starts user services
- Prints status โ Shows progress and errors for each step
If you prefer granular control, use Stow manually:
# Clone the repository
git clone https://github.com/yourusername/dotfiles.git ~/dotfiles
cd ~/dotfiles
# Manually stow packages
stow hypr systemd kitty waybar dunst wlogout
# Install dependencies via your package manager
sudo pacman -S hyprland waybar kitty wlogout hyprlock hypridle dunst stow yay git base-devel
# Enable and start services
systemctl --user daemon-reload
systemctl --user enable --now waybar.service hypridle.service hyprpolkitagent.service awww.service ssh-agent.serviceEdit install.sh before running it to customize which packages are installed:
# In install.sh, modify PACKAGES array:
PACKAGES=("hypr" "systemd" "kitty" "waybar" "dunst" "wlogout")
# And modify ALL_SOFTWARE array to add/remove packages:
ALL_SOFTWARE=(
"hyprland"
"waybar"
"kitty"
# ... add or remove as needed
)Hyprland is a tiling compositor for Wayland with advanced animations, multiple workspace support, and GPU acceleration. The configuration is split into modular files for easier maintenance.
Core Files:
-
hyprland.confโ Main configuration file that includes all other configs and sets core Hyprland behavior (decorations, animations, input settings, general options) -
keybindings.confโ All keyboard shortcuts organized by function:- Window management (focus, move, resize, fullscreen, float)
- Workspace switching
- Application launching
- Gaming Mode toggle (
$mainMod+Shift+G) - Media/brightness controls
-
monitors.confโ Display configuration with monitor definitions:monitor=HDMI-1,1920x1080@60,0x0,1 monitor=DP-1,3440x1440@100,1920x0,1Adjust resolution, refresh rate, position, and scaling for each display
-
workspaces.confโ Workspace settings and per-workspace configurations -
autostart.confโ Applications/commands to execute on session start:- Daemons:
waybar,awww,cliphist - Environment variables: Wayland/XDG settings
- Wallpaper loading
- Daemons:
-
hypridle.confโ Idle management settings:- Screen timeout (e.g., turn off after 5 minutes)
- Suspend behavior (e.g., suspend after 10 minutes)
- Lock behavior (e.g., lock on idle)
-
hyprlock.confโ Screen lock appearance:- Login widget styling
- Password input appearance
- Background/wallpaper display
-
windowrules.confโ Application-specific window rules:- Window size/positioning
- Floating vs tiling behavior
- Opacity and animation rules
-
wallpapers/โ Directory containing wallpaper images used byawww -
scripts/gamemode.shโ Gaming Mode toggle script that:- Disables animations, shadows, and blur
- Sets system power profile to
performance - Pauses desktop notifications via
dunstctl - Can be toggled via keybinding or Waybar module
-
scripts/wallpaper_manager.goโ Automatic wallpaper rotation daemon that:- Rotates desktop wallpapers at configurable intervals (default: 1 hour)
- Supports multiple monitors with independent wallpaper selection
- Applies smooth transitions via
awww - Pauses during Gaming Mode via lock file mechanism
Customization Tips:
- Update
monitors.confif your display setup differs - Modify
keybindings.confto change keyboard shortcuts - Add applications to
autostart.conffor automatic launching - Adjust idle timeouts in
hypridle.conffor your preference - Add window rules in
windowrules.conffor app-specific behavior
Gaming Mode is a performance profile toggle that optimizes Hyprland for gaming:
What it does:
- Disables animations, shadows, blur, and window gaps in Hyprland (reduces latency and CPU usage)
- Sets system power profile to
performance(unlocks higher CPU/GPU clocks) - Pauses desktop notifications (prevents popups during gameplay)
How to use:
- Keybinding: Press
$mainMod + Shift + Gto toggle - Waybar Module: Click the gaming mode icon in the status bar
How it works:
- Implemented in
hypr/scripts/gamemode.sh - Script checks Hyprland's
animations:enabledoption to detect current state - On enable: runs
hyprctlcommands to disable effects +powerprofilesctl set performance+dunstctl set-paused true - On disable: runs
hyprctl reloadto restore config +powerprofilesctl set balanced+dunstctl set-paused false
The Wallpaper Manager is an automated wallpaper switching daemon written in Go that rotates desktop backgrounds at configurable intervals. It supports multiple monitors with independent wallpaper selection and smooth transitions.
What it does:
- Automatic rotation: Changes wallpapers at a configurable interval (default: 1 hour / 3600 seconds)
- Multi-monitor support: Independently manages wallpapers for different displays (main monitor: DP-1, side monitor: DP-3)
- Random selection: Randomly picks wallpapers from designated folders (
mainandsidedirectories) - Smooth transitions: Uses
awwwdaemon to apply transitions with configurable FPS and animation steps - Gaming Mode integration: Automatically pauses wallpaper switching during Gaming Mode via lock file mechanism
- Lazy loading: Scans wallpaper directories once on startup, no continuous disk I/O
Features:
| Feature | Details |
|---|---|
| Interval Control | Configure via -interval flag (in seconds) |
| Monitor Support | Handles multiple displays with per-monitor configuration |
| Image Formats | Supports .jpg, .png, .webp, .jpeg formats |
| Transition Effects | Random transition types with 60 FPS smoothness |
| Gaming Mode | Detects /tmp/wallpaper_cycle.lock lock file and pauses switching |
| Error Recovery | Waits for awww-daemon to start, retries with 5-second intervals |
Setup and Configuration:
The Wallpaper Manager runs as a systemd user service and is configured through the awww.service file:
[Unit]
Description=awww Wallpaper Daemon
PartOf=graphical-session.target
[Service]
Type=simple
ExecStart=/path/to/wallpaper_manager -interval 3600
Restart=on-failure
RestartSec=5Wallpaper Directory Structure:
~/.config/hypr/wallpapers/
โโโ main/ # Main monitor wallpapers (DP-1)
โ โโโ wallpaper1.jpg
โ โโโ wallpaper2.png
โ โโโ ...
โโโ side/ # Side monitor wallpapers (DP-3)
โโโ landscape1.jpg
โโโ landscape2.webp
โโโ ...
Customization:
-
Change rotation interval:
# Edit systemd service to change interval (in seconds) # 3600 = 1 hour, 1800 = 30 minutes, etc. systemctl --user edit awww.service
-
Add wallpaper images:
- Place
.jpg,.png,.webp, or.jpegfiles in~/.config/hypr/wallpapers/main/and/or~/.config/hypr/wallpapers/side/ - Manager will automatically discover and include them
- Place
-
Configure monitor outputs:
- Edit
hypr/scripts/wallpaper_manager.go(lines 43-44) to match your display names:
cmdMain := exec.Command("awww", "img", "-o", "DP-1", ...) // Your main monitor cmdSide := exec.Command("awww", "img", "-o", "DP-3", ...) // Your side monitor
- Edit
-
Adjust transition smoothness:
- Modify
--transition-fps(currently 60 FPS) and--transition-step(currently 90) in the source code for different transition effects
- Modify
Gaming Mode Integration:
When Gaming Mode is enabled via $mainMod + Shift + G:
- A lock file
/tmp/wallpaper_cycle.lockis created - The Wallpaper Manager detects this and pauses switching
- When Gaming Mode is disabled, the lock file is removed and switching resumes
Manual Execution:
Build and run the Wallpaper Manager manually:
# Navigate to scripts directory
cd ~/.config/hypr/scripts
# Compile the Go program
go build -o wallpaper_manager wallpaper_manager.go
# Run with default 1-hour interval
./wallpaper_manager
# Run with custom interval (e.g., 30 minutes = 1800 seconds)
./wallpaper_manager -interval 1800
# Kill the process when done
killall wallpaper_managerTroubleshooting:
- Wallpapers not changing: Verify
awww-daemonis running (pgrep awww) - Gaming Mode not pausing: Confirm lock file mechanism is working or manually restart the daemon
- No images found: Ensure wallpaper directories exist and contain valid image files
- Slow transitions: Reduce
-intervalvalue or adjust FPS/step values in source code
Kitty is a modern, GPU-accelerated terminal emulator with excellent performance and feature support.
Configuration:
kitty.confโ Master configuration file including:- Font family and size (default: JetBrains Mono Nerd Font)
- Color scheme and theme
- Keyboard shortcuts for terminal operations
- Scrollback history settings
- Mouse and copy-paste behavior
- Shell integration
- Padding and line height
Customization Tips:
- Change font:
font_familyandfont_sizeoptions - Modify colors: Update color palette definitions
- Define custom keybindings for terminal-specific operations
- Adjust scrollback to control history depth
Waybar is a highly customizable status bar for Wayland. It displays system information, has integrated system tray, and supports custom modules.
Configuration:
-
config.jsoncโ Defines modules, layout, and behavior:- Modules list and order
- Module-specific settings (pulse, network, battery, etc.)
- Bar position and margins
- Systemd service integration
- Gaming Mode custom module
- Shortcuts and click commands
- Signal handlers for real-time updates
-
style.cssโ Visual styling:- Colors and themes (matches Hyprland aesthetic)
- Font and text styling
- Module spacing and sizing
- Hover and active states
- Progress bar styling
- Gaming Mode indicator styling
-
icons/โ Custom icon definitions and theme overrides
Available Modules:
clockโ Date and time displaynetworkโ WiFi status and connectivitybatteryโ Battery percentage and statuspulseaudioโ Volume controlbacklightโ Screen brightnesscpuโ CPU usage percentagememoryโ RAM usagediskโ Disk space usagecustom/gamemodeโ Gaming Mode indicator (custom module)trayโ System tray integration- And many more...
Customization Tips:
- Add/remove modules by editing
config.jsonc - Modify bar position (top/bottom) and margins
- Customize colors and fonts in
style.css - Create custom modules for specific tasks
- Adjust update intervals for performance
Dunst is a lightweight notification daemon that displays desktop notifications. It integrates with Hyprland and is paused during Gaming Mode.
Configuration:
dunstrcโ Main configuration file:- Monitor selection where notifications appear
- Origin and offset (where notifications spawn on screen)
- Width, height, and dynamic sizing
- Notification limits
- Corner radius and frame styling
- Font selection (matches Waybar aesthetic)
- Padding and spacing
- Progress bars for volume/brightness feedback
- Urgency levels (low, normal, critical) with different styling/timeouts
Urgency Levels:
lowโ 5 second timeout, muted colorsnormalโ 10 second timeout, standard visibilitycriticalโ No timeout, highlighted with red frame
Gaming Mode Integration:
During Gaming Mode, the gamemode.sh script pauses notifications:
dunstctl set-paused true # Pause on enable
dunstctl set-paused false # Resume on disableCustomization Tips:
- Adjust
timeoutvalues for notification duration - Change colors to match your theme
- Modify
offsetto reposition notifications - Adjust
widthandheightfor different screen sizes - Enable/disable
progress_barfor volume/brightness feedback
Wlogout provides an on-screen lock/logout/power menu interface for Hyprland sessions.
Configuration:
-
layoutโ Button layout definition:- Specifies which buttons appear and their order
- Button labels and icons
- Button actions (power off, reboot, logout, lock, etc.)
-
logoutโ Handler script:- Executes system commands based on button clicks
- Uses
systemctlfor power operations - Handles logout and lock actions
-
style.cssโ Visual styling:- Background and overall layout styling
- Button appearance, hover, and active states
- Theming and colors
Customization Tips:
- Edit
layoutto add/remove buttons or change their order - Modify
logoutscript to customize system commands - Adjust
style.cssfor color and appearance changes
User-level systemd services that manage daemons and utilities for the graphical session.
Service Files:
-
hyprpolkitagent.serviceโ PolicyKit authentication agent- Handles password prompts for privileged operations
- Launched on graphical session start
-
ssh-agent.serviceโ SSH key management- Manages SSH keys for authentication
- Provides SSH_AUTH_SOCK environment variable
-
awww.serviceโ Wallpaper daemon- Manages desktop wallpapers
- Supports animated wallpapers via awww
-
waybar.serviceโ Status bar service- Runs the Waybar process
- Respawn on crash
-
hypridle.serviceโ Idle management- Monitors user activity
- Triggers idle actions (screen off, suspend, lock)
Service Targets:
default.target.wants/โ Services linked here start with the default user targetgraphical-session.target.wants/โ Services linked here start with the graphical session
Customization Tips:
- Edit service files to add dependencies or environment variables
- Create new service files for custom daemons
- Adjust
TypeandRestartpolicies for different behavior - Use
EnvironmentandExecStartto customize commands
- Distribution: Arch Linux, Manjaro, EndeavourOS, or other Arch-based distribution
- Display Server: Wayland (not X11)
- Build Tools:
base-develpackage (required for building AUR packages withyay) - Package Manager:
pacman(with AUR support viayay) - Symlink Manager:
stow(for managing dotfiles)
| Component | Purpose | Package Manager |
|---|---|---|
| hyprland | Window manager and Wayland compositor | Official Repos |
| waybar | Customizable status bar for Wayland | Official Repos |
| kitty | GPU-accelerated terminal emulator | Official Repos |
| wlogout | On-screen logout/power menu | Official Repos |
| hyprpolkitagent | PolicyKit authentication agent for Hyprland | Official Repos |
| hypridle | Idle management daemon with screen timeout | Official Repos |
| hyprlock | Screen lock utility for Hyprland | Official Repos |
| hyprshutdown | Power menu helper for Hyprland sessions | AUR |
| awww | Wallpaper daemon with animation support | AUR |
| fastfetch | System information display utility | Official Repos |
| ssh-agent | SSH key management utility | Official Repos |
| wl-clipboard | X11/Wayland clipboard synchronization | Official Repos |
| cliphist | Clipboard history manager | AUR |
| power-profiles-daemon | Power management profile switcher | Official Repos |
| dunst | Lightweight desktop notification daemon | Official Repos |
| noto-fonts-emoji | Noto emoji font family | Official Repos |
| ttf-jetbrains-mono-nerd | JetBrains Mono Nerd Font (used in terminal/status bar) | AUR |
| go | Go programming language (for building wallpaper-manager) | Official Repos |
| stow | Symlink farm manager (GNU Stow) | Official Repos |
| yay | AUR helper (automatically installed by script) | AUR |
| git | Version control system | Official Repos |
| base-devel | Build tools and development utilities | Official Repos |
All dependencies are automatically installed by install.sh.
After installation, your Hyprland session should start automatically on the next login. Default keybindings include:
$mainMod + Returnโ Open terminal (Kitty)$mainMod + Qโ Close focused window$mainMod + Vโ Toggle floating window$mainMod + Fโ Toggle fullscreen$mainMod + 1-9โ Switch to workspace 1-9$mainMod + Shift + 1-9โ Move window to workspace 1-9$mainMod + Shift + Gโ Toggle Gaming Mode$mainMod + Eโ Open file manager$mainMod + Escโ Open logout menu (wlogout)
See keybindings.conf for the complete list.
Edit hypr/monitors.conf with your display configuration:
# Format: monitor=NAME,RESOLUTION@REFRESH,POSITION,SCALE
monitor=DP-1,3440x1440@100,0x0,1
monitor=HDMI-1,1920x1080@60,3440x0,1.25
monitor=eDP-1,disable # Disable built-in laptop display
Run hyprctl monitors to list connected displays and their names.
Edit hypr/keybindings.conf to add/modify shortcuts:
# Syntax: bind = MODIFIERS, KEY, DISPATCHER, ARGUMENTS
bind = $mainMod, Q, killactive
bind = $mainMod SHIFT, Q, exec, systemctl poweroff
Edit hypr/autostart.conf to add applications that launch on session start:
# Syntax: exec-once = command
exec-once = $terminal # Start terminal
exec-once = firefox & # Start Firefox in background
Edit hypr/hypridle.conf to adjust screen timeout and suspend behavior:
listener {
timeout = 300 # 5 minutes
on-timeout = hyprctl dispatch dpms off
on-resume = hyprctl dispatch dpms on
}
Edit waybar/config.jsonc to add more modules to the status bar:
"modules-center": [
"clock",
"custom/weather", // Add custom weather module
"custom/gamemode"
]Edit waybar/style.css to change colors, fonts, and layout:
* {
font-family: "JetBrains Mono";
font-size: 12px;
color: #cdd6f4;
background: #1e1e2e;
}- Ensure you're using a Wayland session (not X11)
- Check if required packages are installed:
pacman -Q hyprland waybar - View Hyprland logs:
journalctl --user -u Hyprland -n 50
- Verify symlinks are correct:
ls -la ~/.config/waybar/ - Check service status:
systemctl --user status waybar - Restart the service:
systemctl --user restart waybar
- Verify symlinks were created:
ls -la ~/.config/hypr/ - Re-run stow with force:
cd ~/dotfiles && stow -R hypr waybar kitty systemd wlogout dunst - Reload Hyprland:
$mainMod + Escthen open a new session
- Ensure
powerprofilesctlis installed:pacman -Q power-profiles-daemon - Check if Gaming Mode script is executable:
ls -la ~/.config/hypr/scripts/gamemode.sh - Test manually:
~/.config/hypr/scripts/gamemode.sh 1
- Ensure
dunstis running:pgrep dunst - Start dunst manually:
dunst & - Add to autostart: Edit
hypr/autostart.confand addexec-once = dunst
- Install required fonts:
sudo pacman -S ttf-jetbrains-mono-nerd noto-fonts-emoji - Reload terminal: Close and reopen Kitty
- Check font settings in
kitty/kitty.conf
Contributions are welcome! To contribute:
- Test thoroughly โ Ensure changes work on a fresh Wayland/Hyprland session
- Update documentation โ Modify the README if adding new files or features
- Verify symlinks โ Run
stowto ensure configurations link correctly - Check services โ Confirm systemd services start without errors
- Commit clearly โ Use clear, descriptive commit messages
# Create a feature branch
git checkout -b feature/my-improvement
# Make your changes and commit
git add .
git commit -m "Add feature: brief description"
# Push and open a pull request
git push origin feature/my-improvementMIT License โ Feel free to reuse, modify, and adapt these dotfiles for your setup. See the LICENSE file for full details (if included).
- Hyprland Wiki โ Comprehensive Hyprland documentation
- Waybar GitHub โ Waybar source and module documentation
- Kitty Documentation โ Kitty terminal documentation
- Dunst GitHub โ Dunst notification daemon
- GNU Stow Manual โ Symlink farm management
- systemd User Services โ User service guide
- Wayland Protocol โ Wayland display server protocol
Happy tiling! ๐