Icing: The sweet coating on your desktop 🍰
icing is a small, fast X11 wallpaper setter written in Rust.
It sets a wallpaper directly on the X11 root window, without daemons, background services, or unnecessary dependencies. Configuration is optional, and the app exits immediately after setting the wallpaper.
Features
- Simple CLI usage
- Optional config file
- Two image scaling modes: Fill and Stretch
- Minimal dependencies
- X11 only (Wayland not supported)
Usage
Set wallpaper once (no config change)
icing --set /path/to/image.png
Sets the wallpaper immediately but does not update the config file.
Update config and set wallpaper
icing --update /path/to/image.png
- Writes the image path to the config file
- Sets the wallpaper immediately
- Future runs of
icingwill reuse this image
Use config only
icing
Uses the image path and settings from the config file.
Fails if no config exists.
Optional arguments
--mode fill|stretch
Overrides the default or configured scaling mode (see below).
Configuration
Config file location:
~/.config/candywidgets/icing/config.toml
Example config:
background_image = "/path/to/image.png"
mode = "fill"
Config options
| Key | Description |
|---|---|
background_image |
Path to the wallpaper image |
mode |
Scaling mode (fill or stretch) |
If mode is missing, fill is used by default.
Invalid modes cause icing to exit with an error.
Scaling modes
fill (default) |
stretch |
|---|---|
| Covers the entire screen | Covers the entire screen |
| Aspect ratio preserved | Aspect ratio not preserved |
| Excess image cropped (centered) | Image may be stretched and distorted |
| Best choice for most wallpapers | Useful for exact fits or abstract images |
Installation
Build from source
git clone https://git.candifloss.cc/candifloss/icing.git
cd icing
cargo build --release
Binary will be located at:
target/release/icing
Optionally move it to your $PATH (for example /usr/bin/) if desired.
Requirements
- X11 (Xorg)
- A window manager
- Rust (for building)
Future plans
-
Multi-monitor support via
--monitor <MONITOR>icing --monitor HDMI-1 --set image.png icing --monitor HDMI-2 --set image2.jpg --mode stretch -
Probably not:
- Additional scaling modes (unless they make sense)
- Wayland support
Notes
icingdoes not run in the background- No daemon, no config watcher
- Intended to be called explicitly (startup scripts, keybindings, etc.)
License
GPL-3.0-or-later