Fast, daemon-powered wallpaper switcher for Hyprland built with Quickshell and Rust.
- ⚡ Instant popup - Wallpaper switcher appears instantly on keypress
- 🦀 Persistent Rust daemon - Low-overhead background service for wallpaper management
- ⌨️ Keyboard driven - Full navigation via keyboard
- 🖱️ Mouse support - Click to select wallpapers
- 🎨 Matugen compatible - Generates color schemes from wallpapers
- 🌌 Caelestia integration - Dynamic wallpapers from Caelestia
- 📁 Configurable wallpaper directory - Set your own wallpaper folders
- 🔍 Search functionality - Filter wallpapers by name
- ⭐ Favorites support - (Coming soon)
- 🎬 Slideshow mode - (Coming soon)
Grid View Feature
Scroll View Feature
Search Feature

git clone https://github.com/Pranavgitty/hywal.git
cd hywal
chmod +x install.sh
./install.shThe installer will:
- Build the Rust daemon (
hywalctlandhywald) - Install binaries to
~/.local/bin - Install Quickshell configuration
- Set up Matugen integration
- Optionally install Caelestia integration if detected
- Create default config at
~/.config/hywal/config.json
Requirements:
- Rust toolchain (for building)
- Quickshell
- Hyprland
- Matugen (optional, for color generation)
- Aww wallpaper daemon (for dynamic wallpapers)
Make sure ~/.local/bin is in your PATH.
- Clone the repository
- Build the daemon:
cd controller && cargo build --release - Copy the binaries (
target/release/hywalctlandtarget/release/hywald) to a directory in yourPATH - Copy the
quickshelldirectory to~/.config/quickshell/hywal - Install the Matugen templates from
templates/matugen/ - If Caelestia is present, install the optional integration scripts
Start the daemon:
hywaldToggle the wallpaper switcher:
hywalctl toggleOr bind it to a key in your Hyprland config (e.g., Super + W):
bind = $mod W, exec hywalctl toggle# Show help
hywalctl --help
# Toggle wallpaper switcher visibility
hywalctl toggle
# Show the wallpaper switcher
hywalctl show
# Hide the wallpaper switcher
hywalctl hide
# Reload wallpaper list
hywalctl reload
# Show current status
hywalctl status
# Apply a specific wallpaper by path
hywalctl apply /path/to/wallpaper.jpgHyWal creates a configuration file at ~/.config/hywal/config.json. See quickshell/config.json.example for available options:
{
"wallpaper_directory": "~/Pictures/Switcher",
"state_directory": "~/.local/state/hywal",
"animation_duration": 200,
"default_view": "coverflow",
"thumbnail_size": "860x540",
"thumbnail_quality": 82
}| Option | Default | Description |
|---|---|---|
wallpaper_directory |
~/Pictures/Switcher |
Directory to scan for wallpapers |
state_directory |
~/.local/state/hywal |
Directory for daemon state files |
animation_duration |
200 |
UI animation duration in milliseconds |
default_view |
coverflow |
Default view mode (coverflow or grid) |
thumbnail_size |
860x540 |
Thumbnail resolution for caching |
thumbnail_quality |
82 |
JPEG/WebP quality for thumbnails (1-100) |
graph LR
A[hywalctl] -->|Commands| B[hywald]
B -->|State file| C[Quickshell]
C -->|Displays| D[Wallpaper Switcher UI]
- hywalctl: Command-line client to control the daemon
- hywald: Persistent Rust daemon that manages wallpaper state
- State file: Shared state between daemon and UI (
~/.local/state/hywal/state) - Quickshell: Framework for the popup UI
./uninstall.shThis will remove:
- Binaries from
~/.local/bin - Scripts from
~/.local/share/hywal - Config from
~/.config/quickshell/hywaland~/.config/hywal - State from
~/.local/state/hywal - Matugen integration entries
- Temporary socket and state files
- Search functionality
- Favorite wallpapers
- Enhanced keyboard navigation
- Thumbnail caching for faster loading (implemented in scanner)
- Smooth animations and transitions
- Configurable wallpaper directory
- Multi-monitor wallpaper support
- Wallpaper history/recent
This project is licensed under the MIT License - see the LICENSE file for details.
- Quickshell - The UI framework
- Matugen - Color generation from images
- Caelestia - Dynamic wallpaper engine
- Hyprland - The Wayland compositor that inspired this tool