hyprland.conf
The main entry point for Hyprland configuration that orchestrates the entire HyprFlux desktop environment by sourcing all other configuration files in the correct order.
Purpose
- Configuration Orchestration: Sources all modular configuration files
- Initial Setup: Executes first-time boot script
- Loading Order: Defines the sequence of configuration loading
- System Integration: Integrates with GUI tools like nwg-displays
File Location
~/.config/hypr/hyprland.conf
Configuration Structure
Initial Boot Process
bash
# Initial boot script for first-time setup and theming
exec-once = $HOME/.config/hypr/initial-boot.sh
Purpose:
- Runs only on first boot (controlled by
.initial_startup_done
file) - Sets up initial wallpapers and themes
- Applies default settings
- Initializes the desktop environment
Directory Variables
bash
# Configuration directories
$configs = $HOME/.config/hypr/configs # Default configurations
$UserConfigs = $HOME/.config/hypr/UserConfigs # User customizations
Benefits:
- Centralized path management
- Easy maintenance and updates
- Clear separation of system vs user configs
Configuration Loading Order
The order of sourcing is crucial for proper configuration precedence:
1. Base Keybindings
bash
source=$configs/Keybinds.conf # Pre-configured keybinds
- Loads default system keybindings
- Provides fallback bindings if user configs fail
2. User Customizations (Priority Order)
bash
source= $UserConfigs/Startup_Apps.conf # Applications to start on login
source= $UserConfigs/ENVariables.conf # Environment variables
source= $UserConfigs/Laptops.conf # Laptop-specific settings
source= $UserConfigs/LaptopDisplay.conf # Laptop display configuration
source= $UserConfigs/WindowRules.conf # Window and layer rules
source= $UserConfigs/UserDecorations.conf # Visual decorations
source= $UserConfigs/UserAnimations.conf # Animation settings
source= $UserConfigs/UserKeybinds.conf # Custom keybindings
source= $UserConfigs/UserSettings.conf # Main Hyprland settings
source= $UserConfigs/01-UserDefaults.conf # Default applications
3. Auto-Generated Configurations
bash
# Generated by nwg-displays
source= $HOME/.config/hypr/monitors.conf # Monitor configuration
source= $HOME/.config/hypr/workspaces.conf # Workspace assignments
Key Features
Modular Design
- Separation of Concerns: Each aspect isolated in separate files
- Easy Maintenance: Updates don't affect user customizations
- Selective Loading: Can comment out specific configurations
User Override System
- User configs load after base configs: Ensures user preferences take precedence
- Non-destructive updates: System updates don't overwrite user settings
- Fallback mechanism: Base configs provide defaults if user configs are missing
GUI Integration
- nwg-displays compatibility: Auto-generated monitor configs are sourced
- Dynamic updates: Changes from GUI tools are automatically applied
Customization Guidelines
What NOT to Modify
bash
# DO NOT EDIT - These ensure proper system function
exec-once = $HOME/.config/hypr/initial-boot.sh
$configs = $HOME/.config/hypr/configs
source=$configs/Keybinds.conf
Safe Modifications
Adding Custom Source Files
bash
# Add after existing sources
source= $UserConfigs/MyCustomConfig.conf
Conditional Loading
bash
# Load config only if file exists
source= $UserConfigs/OptionalConfig.conf
Environment-Specific Loading
bash
# Load different configs based on hostname
source= $UserConfigs/$(hostname).conf
Advanced Customization
Custom Directory Structure
bash
# Define custom paths
$MyConfigs = $HOME/.config/hypr/custom
source= $MyConfigs/MySettings.conf
Conditional Configuration
bash
# Load configs based on conditions
exec-once = [[ -f "$HOME/.config/hypr/gaming.conf" ]] && source $HOME/.config/hypr/gaming.conf
Troubleshooting
Common Issues
Configuration Not Loading
bash
# Check file exists and has correct permissions
ls -la ~/.config/hypr/UserConfigs/
# Verify syntax
hyprctl --help
Conflicting Settings
bash
# Check loading order - later configs override earlier ones
# Move conflicting config to load last
Initial Boot Script Issues
bash
# Check if initial boot completed
ls -la ~/.config/hypr/.initial_startup_done
# Force re-run initial boot
rm ~/.config/hypr/.initial_startup_done
hyprctl reload
Debug Commands
bash
# Reload configuration
hyprctl reload
# Check current configuration
hyprctl getoption general:layout
# List all options
hyprctl getoption
# Monitor configuration loading
tail -f ~/.local/share/hyprland/hyprland.log
Validation
Check Configuration Syntax
bash
# Test configuration without applying
hyprctl --help
# Validate specific settings
hyprctl getoption animations:enabled
Monitor Loading Process
bash
# Enable debug logging
env HYPRLAND_LOG_WLR=1 hyprland
# Check which configs are being loaded
grep "source=" ~/.config/hypr/hyprland.conf
Best Practices
Configuration Management
Backup Strategy
bash
# Backup main configuration
cp ~/.config/hypr/hyprland.conf ~/.config/hypr/hyprland.conf.backup
# Version control
cd ~/.config/hypr
git init
git add hyprland.conf
git commit -m "Initial hyprland.conf"
Documentation
bash
# Add comments for custom modifications
# Custom modification for dual monitor setup
source= $UserConfigs/DualMonitor.conf
Update Safety
Before Updates
bash
# Backup user configurations
tar -czf ~/hyprflux-backup-$(date +%Y%m%d).tar.gz ~/.config/hypr/UserConfigs/
After Updates
bash
# Verify configuration still works
hyprctl reload
# Check for new features
diff ~/.config/hypr/hyprland.conf ~/.config/hypr/hyprland.conf.backup
Performance Optimization
Selective Loading
bash
# Comment out unused configurations
# source= $UserConfigs/GamingConfig.conf # Disabled for work setup
Lazy Loading
bash
# Load heavy configurations only when needed
exec-once = [[ "$XDG_SESSION_TYPE" == "wayland" ]] && source $UserConfigs/WaylandSpecific.conf
Integration Examples
Multi-User Setup
bash
# Load user-specific configurations
source= $UserConfigs/users/$(whoami).conf
Environment-Based Loading
bash
# Different configs for different environments
case "$(hostname)" in
"work-laptop")
source= $UserConfigs/work.conf
;;
"gaming-pc")
source= $UserConfigs/gaming.conf
;;
*)
source= $UserConfigs/default.conf
;;
esac
Conditional Features
bash
# Load gaming config only if gaming directory exists
exec-once = [[ -d "$HOME/Games" ]] && source $UserConfigs/Gaming.conf
File Dependencies
Required Files
initial-boot.sh
- Must exist for proper initializationconfigs/Keybinds.conf
- Provides base keybindingsUserConfigs/*.conf
- User customization files
Optional Files
monitors.conf
- Auto-generated by nwg-displaysworkspaces.conf
- Auto-generated workspace configuration
Generated Files
.initial_startup_done
- Prevents re-running initial setup- Various cache and state files in
~/.cache/hyprland/
This main configuration file serves as the foundation of the HyprFlux system, ensuring all components load in the correct order while maintaining separation between system defaults and user customizations.