A terminal-first wallpaper manager with smart sources, background scheduling, and history tracking.

Wall-E is a Rust CLI tool that changes your wallpaper from multiple sources — local folders, GitHub repos, direct image URLs, or the Wallhaven API — with a single command from any terminal.
It supports background scheduling so wallpapers rotate automatically without keeping a terminal open, and tracks history and favourites across sessions using a local JSON store.
Wallpaper managers are almost universally GUI-only, making them impossible to automate, script, or use in minimal setups.
There was no single tool that could pull wallpapers from multiple sources — local, remote, and API-driven — while running silently in the background across Windows, macOS, and Linux.
True cross-platform support
Windows, macOS, and Linux each handle wallpaper setting differently. The wallpaper crate was used to abstract this, but Windows additionally required absolute paths and specific process creation flags for background spawning.
Background process without a runtime
Auto-rotation needed to survive terminal closure. Rather than requiring a system service, Wall-E spawns a detached child process of itself using OS-specific flags, saves the PID, and exposes --stop and --status commands to manage it.
Multiple remote sources with no auth
Wallhaven required no API key for SFW content but needed careful URL construction. GitHub's API required a User-Agent header and a custom URL transformation from web URLs to API endpoints, including subfolder support.
Config that works from any directory
Since walle is invoked from anywhere in the terminal, the config needed to live at a fixed path (~/.config/walle/walle.toml) with CLI flags always taking priority over stored values.
Rust for zero-cost startup and cross-platform reach
Rust compiles to a single native binary with near-instant startup — important for a tool invoked frequently. The ecosystem's crates (clap, reqwest, serde, wallpaper) covered every requirement without pulling in a heavy runtime.
Daemon pattern over system schedulers
Rather than requiring users to configure Task Scheduler or cron, Wall-E spawns itself as a detached background process with --daemon, making auto-rotation a single flag rather than a multi-step system configuration.
Setup wizard on first run
Instead of requiring users to hand-write a config file, Wall-E detects a missing config and runs an interactive wizard that writes ~/.config/walle/walle.toml automatically — covering source, mode, interval, and no-repeat preference.
History and favourites as a local JSON store
Every wallpaper set is logged to history.json with its source and timestamp. This powers the --history and --favourites commands and the no-repeat shuffle mode, which tracks seen wallpapers and resets the cycle when all have been shown.