50a445937fe17d070a7273a71b8bf7fa6c44ec6d
🔒 RustLock
A high-performance Wayland screen locker written in Rust, inspired by swaylock-effects.
✨ Features
- ⚡ Performance: Written in safe Rust, optimized binary size (~2.4MB without networking, ~4MB with)
- 🎨 Visual Effects:
- Gaussian blur (configurable radius and passes)
- Vignette effect (configurable base and factor)
- Pixelate, Swirl, and Melting effects
- Smooth fade-in animation
- 🔐 Password Indicator:
- Circular ring with configurable radius and thickness
- Dynamic key highlight segments that rotate with each keystroke
- Caps lock indicator
- 🕐 Information Display:
- Centered clock (HH:MM format)
- Full date
- System uptime
- 📻 Media & System Status (optional):
- MPRIS media player integration with album art
- Battery percentage and charging status
- WiFi SSID and signal strength
- Bluetooth connected devices
- Keyboard layout indicator
- 🔑 Session Management:
- F1: Suspend
- F2: Reboot
- F3: Power Off
- 📸 Screenshot Support:
- Captures desktop background before locking
- Custom background image support
- 🔐 Authentication:
- PAM-based authentication
- Configurable grace period (any key press within N seconds unlocks without password)
- 🎯 Customization:
- Custom icons for WiFi, Bluetooth, Battery
- Theme presets (dark, light, nord, dracula)
- Configuration via config file or CLI
🚀 Usage
Basic Example
rustlock --screenshots --effect-blur 7x5 --effect-vignette 0.5:0.5
Full Configuration
rustlock \
--screenshots \
--clock \
--indicator \
--indicator-radius 100 \
--indicator-thickness 7 \
--effect-blur 7x5 \
--effect-vignette 0.5:0.5 \
--ring-color 785412 \
--key-hl-color 4EAC41 \
--line-color 00000000 \
--inside-color 00000088 \
--separator-color 00000000 \
--grace 2 \
--fade-in 0.2
Session Controls
When locked, use function keys to control the system:
- F1: Suspend to RAM
- F2: Reboot
- F3: Power Off
⚙️ Configuration
Options can be provided via command line or a configuration file at ~/.config/rustlock/config.toml. CLI arguments take precedence over config file, which takes precedence over theme defaults.
Options
| Option | Description |
|---|---|
| General | |
--screenshots |
Capture desktop background before locking |
--image <PATH> |
Use custom background image instead of screenshot |
--clock |
Display centered clock and date |
--indicator |
Show password entry ring (default: true) |
--indicator-radius <N> |
Ring radius in pixels (default: 100) |
--indicator-thickness <N> |
Ring thickness in pixels (default: 7) |
| Effects | |
--effect-blur <R>x<P> |
Gaussian blur: radius x passes (e.g., 7x5) |
--effect-pixelate |
Pixelate effect |
--effect-swirl |
Swirl distortion effect |
--effect-melting |
Melting distortion effect |
--effect-vignette <B>:<F> |
Vignette: base:factor (e.g., 0.5:0.5) |
| Colors | |
--ring-color <RRGGBB[AA]> |
Outer ring color (hex, optional alpha) |
--key-hl-color <RRGGBB[AA]> |
Key highlight segment color |
--line-color <RRGGBB[AA]> |
Separator line color |
--inside-color <RRGGBB[AA]> |
Inner circle color |
--separator-color <RRGGBB[AA]> |
Ring separator color |
| Display Options | |
--show-media |
Show MPRIS media info (default: true) |
--show-battery |
Show battery status (default: true) |
--show-network |
Show WiFi status (default: true) |
--show-bluetooth |
Show Bluetooth status (default: true) |
--show-keyboard-layout |
Show keyboard layout indicator (default: true) |
--show-album-art |
Show album art (default: true) |
| Custom Icons | |
--wifi-icon <PATH> |
Custom WiFi icon (PNG/SVG) |
--bluetooth-icon <PATH> |
Custom Bluetooth icon (PNG/SVG) |
--battery-icon <PATH> |
Custom battery icon (PNG/SVG) |
| Other | |
--grace <SECONDS> |
Grace period in seconds (default: 2) |
--fade-in <SECONDS> |
Fade-in animation duration (default: 0.2) |
--pam-service <NAME> |
PAM service name (default: "rustlock") |
--config <PATH> |
Path to config file |
--theme <NAME> |
Theme preset: dark, light, nord, dracula |
--debug |
Enable debug logging |
--log-file |
Write logs to ~/.rustlock.log |
📦 Installation
Using Nix (Recommended)
nix-shell -p rustlock
Or with flakes:
nix run github:yourusername/rustlock
From Source
cargo build --release
The binary will be available at target/release/rustlock.
Build Options
-
With networking (default): Includes reqwest for album art fetching
cargo build --release --features networking -
Without networking: Smaller binary (~2.4MB)
cargo build --release --no-default-features
✅ Completed
- PAM-based authentication
- Grace period (any key unlocks within N seconds)
- Screenshot capture with blur/vignette/pixelate/swirl/melting effects
- Configuration file support (
~/.config/rustlock/config.toml) with schema validation - Debug logging to
~/.rustlock.log - Clock and date display
- Password indicator ring with rotating highlights
- Dynamic screen resolution detection
- Full multi-monitor support with different resolutions
- Theme/profile support with presets (dark, light, nord, dracula)
- Wayland protocol stability fixes
- Media control integration (MPRIS support with Album Art)
- Battery, WiFi, and Bluetooth status indicators
- Custom background image support
- Custom icons for status indicators
- Keyboard layout indicator
- Session management (F1-F3 keys)
- Caps lock indicator
📄 License
GPL v3
Languages
Rust
99.4%
Nix
0.6%