Wallr
The wallpaper engine for Wayland.

Wallr draws its own background surface with wlr-layer-shell and wgpu. It does not wrap hyprpaper, swww, or swaybg; it renders transitions itself and treats theme generation (Matugen, Wallust, Pywal) as an optional step after the fact, not the core of what it does.
Features
- 11 transition effects: fade, blur, wipe, slide, zoom, pixelate, ripple, dissolve, wave, grow, outer. Each tunable from the CLI or a YAML package (origin, direction, angle, easing, duration).
- Live wallpapers: animated GIFs play frame-by-frame once the transition completes, starting from the transition's incoming image so playback eases in cleanly.
- Circular reveals:
grow,outer, andrippleexpand as true, aspect-corrected circles. - Wall-clock timing: transition duration holds exactly, regardless of refresh rate.
- Background daemon:
wallr daemonowns the surface over a Unix socket;wallr setstarts it automatically. - Directory watching:
wallr watch <dir>applies new files as they land. - Animation packages: YAML timelines with inheritance and a registry (
install,search,publish,validate). - Preview window: judge an effect before it touches your desktop.
- Per-monitor control: independent wallpapers and scaling modes (
fill,fit,stretch,center,tile).
Requirements
Rust toolchain, Wayland client headers, and a compositor with wlr-layer-shell support: Hyprland, Sway, niri (with a layer rule), or KDE Plasma 6. GNOME/Mutter doesn't implement the protocol.
Install
# Arch
# Fedora
# Ubuntu/Debian
Usage
Full flag reference: docs/cli-reference.md
Configuration
~/.config/wallr/config.yaml:
wallpaper:
default: "~/Pictures/Wallpapers/default.png"
mode: "fill"
animation:
use: "smooth/crossfade"
duration: "2000ms"
theme:
provider: "matugen"
reload:
- "waybar"
- "dunst"
Full schema: docs/config-reference.md
If Matugen is configured to call wallr set as its own wallpaper command, pass --no-theme on that call to avoid a feedback loop.
Animation packages
Effects and timelines are plain YAML:
name: liquid
duration: 2000ms
timeline:
- at: 0ms
fade:
- at: 150ms
ripple:
wallr validate <file> checks a package before you use it. Full authoring guide: docs/animation-authoring.md
Architecture
The wallr CLI talks to wallr daemon over a Unix socket. The daemon owns the layer-shell surface, a wgpu renderer, and the animation engine. Every change is a GPU-rendered transition from the previous wallpaper, timed to wall-clock duration regardless of refresh rate; GIFs keep playing frame-by-frame once the transition ends.
Details: docs/architecture.md
Docs
Star History
Contributing
See CONTRIBUTING.md.
License
MIT. See LICENSE.