Rust-powered window management for Hyprland
Features
- ⚡ Fast: Written in Rust for maximum performance and efficiency
- 🔒 Production-Ready: Memory-safe with comprehensive error handling and 48+ tests
- 🧩 Plugin-based: Modular architecture with hot-reload and animation systems
- 🔄 Compatible: Drop-in replacement for Pyprland configurations
- 📦 Easy deployment: Single binary, no Python dependencies
- 🎯 Multi-monitor: Intelligent caching with 90% API call reduction
- 🔧 Enhanced IPC: Robust reconnection logic and event filtering
Installation
Prerequisites
- Rust: Version 1.81 or newer (Install Rust)
- Hyprland: Compatible window manager (Install Hyprland)
- Environment:
HYPRLAND_INSTANCE_SIGNATUREmust be set (usually automatic)
Method 1: From Source (Recommended)
# Clone the repository
# Build and install
Method 2: Development Build
# Clone and build in debug mode
# Run directly from source
Method 3: Release Build
# Build optimized release version
# Copy binaries to your PATH
Verify Installation
# Check daemon version and features
# Check client connectivity
# Verify Hyprland connection
Uninstall
To completely remove Rustrland from your system:
# Remove binaries (if installed via cargo)
# Or manually remove binaries (if copied to /usr/local/bin/)
# Remove configuration files (optional - keeps your settings)
# Remove from Hyprland autostart (if added)
# Edit ~/.config/hypr/hyprland.conf and remove:
# exec-once = rustrland --config ~/.config/hypr/rustrland.toml
# Kill any running daemon
# Clean up socket files
Configuration
Overview
Rustrland supports dual configuration formats for maximum compatibility:
- Pyprland Format:
[pyprland]- Full compatibility with existing Pyprland configs - Rustrland Format:
[rustrland]- Native format with enhanced features - Dual Format: Both sections in one file - Rustrland merges them intelligently
Configuration Locations
Rustrland looks for configuration files in this order:
--configcommand line argument~/.config/hypr/rustrland.toml(primary)~/.config/rustrland.toml(alternative)./rustrland.toml(current directory)
Creating Your Configuration
Create your configuration file at ~/.config/hypr/rustrland.toml:
Basic Pyprland-Compatible Configuration
[]
= ["scratchpads"]
[]
= "foot --app-id"
= "firefox"
= "thunar"
[]
= "[term_classed] dropterm"
= "dropterm"
= "75% 60%"
= "fromTop"
[]
= "firefox --new-window --class=[browser_class]"
= "[browser_class]"
= "90% 85%"
= "center"
[]
= "thunar --class=[filemanager_class]"
= "[filemanager_class]"
= "80% 70%"
= "center"
Advanced Rustrland Native Configuration
[]
= ["scratchpads", "expose", "workspaces_follow_focus", "magnify"]
[]
= "foot --app-id"
= "firefox"
= "thunar"
= "spotify"
# Enhanced scratchpad with all features
[]
= "[term_classed] dropterm"
= "dropterm"
= "75% 60%"
= "center"
= "fromTop"
= true
= false
= ["class:^org\\.gnome\\..*"]
# Multi-monitor aware scratchpad
[]
= "firefox --new-window --class=[browser_class]"
= "[browser_class]"
= "90% 85%"
= "center"
= true
= true
# Mission Control-style expose (v0.3.0+ - Full Implementation)
[]
# Grid layout and visual settings
= 25 # Padding between windows in pixels
= 0.3 # Window scale factor (0.1-1.0)
= true # Display window titles
= "#000000CC" # Semi-transparent overlay
= "#FF6600" # Selection highlight color
# Animation and performance
= "fromTop" # Animation type (fromTop, fromBottom, etc.)
= 250 # Animation duration in milliseconds
= 30 # Performance limit (prevents slowdown)
# Advanced features
= true # Include floating windows
= false # Include minimized windows
= false # Limit to current workspace
= true # Thumbnail caching for performance
= true # Mouse click selection support
= "auto" # Target monitor ("auto", "DP-1", etc.)
# Multi-monitor workspace management
[]
= true
= true
= 100
# Viewport magnification
[]
= 2.0
= 300
= true
= 1.0
= 5.0
= 0.5
Dual Format Configuration
# Legacy Pyprland section (for compatibility)
[]
= ["scratchpads"]
[]
= "foot --app-id"
# Enhanced Rustrland section (overrides and extends)
[]
= ["scratchpads", "expose", "workspaces_follow_focus"]
[]
= "firefox" # Additional variables
# Scratchpad definitions (shared between formats)
[]
= "[term_classed] dropterm"
= "dropterm"
= "75% 60%"
= "fromTop"
[]
= "firefox --class=[browser_class]"
= "[browser_class]"
= "90% 85%"
[]
= 20
= 0.2
Configuration Examples
The examples/ directory contains ready-to-use configurations:
examples/pyprland-compatible.toml- Drop-in Pyprland replacementexamples/rustrland-native.toml- Full Rustrland featuresexamples/dual-config.toml- Hybrid configuration approachexamples/advanced-animations.toml- Animation system showcase
Usage
Starting Rustrland
As a Daemon (Recommended)
# Start with default config location
# Start with specific config file
# Start in foreground with debug output
# Start as background service
&
Auto-start with Hyprland
Add to your ~/.config/hypr/hyprland.conf:
# Auto-start Rustrland daemon
Client Commands
Scratchpad Management
# Toggle scratchpads
# List and manage
Window Overview (Expose) - v0.3.0+ Enhanced
# Mission Control-style window overview with full navigation
# Advanced navigation (v0.3.0+)
# Selection and control
Workspace Management
# Cross-monitor workspace switching
Magnification/Zoom
# Viewport magnification
Command Line Options
Daemon Options
Client Options
Keyboard Integration
Basic Keybindings
Add these to your ~/.config/hypr/hyprland.conf for essential functionality:
# Scratchpad keybindings
# Window overview (Mission Control) - v0.3.0+ Enhanced
# Workspace management
# Magnification
# Utility
Advanced Keybindings
# Expose navigation
# Advanced workspace management
# Magnification control
Installation Script
For automatic keybinding setup:
# Download and run the keybinding setup script
|
See KEYBINDINGS.md for complete setup guide and alternative key schemes.
Troubleshooting
Common Issues
Daemon won't start
# Check Hyprland environment
# Verify Hyprland is running
# Check configuration syntax
Client can't connect
# Check if daemon is running
# Check socket permissions
# Restart daemon
&
Scratchpads not working
# Test application command manually
# Check window class detection
|
# Verify configuration
Debug Mode
For detailed troubleshooting:
# Run daemon with debug output
# Check logs (if using systemd)
# Verbose client output
Development
Building from Source
# Clone and build
# Run in development mode
# Run client from source
Development Commands
# Run comprehensive tests (48+ tests)
# Run specific test suites
# Code quality
# Full CI pipeline
Project Structure
rustrland/
├── src/
│ ├── main.rs # Daemon entry point
│ ├── ... # Client entry point
│ ├── config/ # Configuration system
│ │ └── mod.rs # Rustrland config
│ ├── core/ # Core daemon and plugin management
│ │ ├── daemon.rs # Main daemon loop
│ │ └── ... # Hot reload system
│ ├── ipc/ # IPC communication
│ │ ├── mod.rs # Hyprland IPC client
│ │ └── ... # Unix socket server
│ ├── animation/ # Animation system
│ │ ├── timeline.rs # Keyframe timelines
│ │ └── ... # And more
│ └── plugins/ # Plugin implementations
│ ├── scratchpads.rs # Production-ready scratchpads
│ │ └── ... # And more
├── examples/ # Configuration examples
├── tests/ # Integration tests
└── docs/ # Documentation
Supported Plugins
- ✅ scratchpads: Production-ready dropdown terminals and applications with multi-monitor support (20/20 tests)
- ✅ expose: Mission Control-style window overview with grid layout and navigation (Integrated tests)
- ✅ workspaces_follow_focus: Multi-monitor workspace management with cross-monitor switching (Integrated tests)
- ✅ magnify: Viewport zooming and magnification with smooth animations (Integrated tests)
- ✅ shift_monitors: Shift workspaces between monitors with configurable direction (Integrated tests)
- ✅ toggle_special: Manage Hyprland special workspaces with multi-workspace support (Integrated tests)
- ✅ monitors: Advanced monitor management with relative positioning and hotplug support (15/15 tests)
- ✅ wallpapers: Hardware-accelerated wallpaper management with interactive carousel navigation (15/15 tests)
- ✅ system_notifier: Log monitoring with animated desktop notifications and Pyprland compatibility (10/10 tests)
Plugin Status Summary
| Plugin | Status | Tests | Key Features |
|---|---|---|---|
| Scratchpads | ✅ Production | 20/20 | Multi-monitor, caching, events, Pyprland compatible |
| Expose | ✅ Production | Integrated | Grid layout, navigation, Mission Control experience |
| Workspaces Follow Focus | ✅ Development | Integrated | Cross-monitor, focus following, workspace rules |
| Magnify | ✅ Production | Integrated | Zoom, animations, accessibility support |
| Shift Monitors | ✅ Production | Integrated | Workspace shifting between monitors |
| Toggle Special | ✅ Development | Integrated | Special workspace management |
| Monitors | ✅ Development | 15/15 | Relative positioning, hotplug, hardware acceleration |
| Wallpapers | ✅ Production | 15/15 | Hardware accel, carousel, multi-monitor support |
| System Notifier | ✅ Production | 10/10 | Log monitoring, animations, desktop notifications |
Total: 6 production-ready plugins with 60+ comprehensive tests passing across all functionality.
License
MIT License - see LICENSE for details.
Contributing
Contributions welcome! See CONTRIBUTING.md for guidelines.