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
icing can be used in two ways.
- Specify a wallpaper explicitly as an argument
icing --set /path/to/image.png
Sets the wallpaper immediately without modifying the config file.
- Use the config file
icing
Run without arguments to apply the wallpaper defined in the config file. Fails if no config exists.
See below for config instructions.
Additional options
--mode
Use the --mode option to specify the image scaling mode.
icing --set /path/to/image.png --mode fill
Overrides the default or configured scaling mode (see below).
--update
Use the --update flag to persist the new settings to the config file.
icing --set /path/to/image.png --update
icing --set /path/to/image.png --mode stretch --update
- Sets the wallpaper
- Writes the settings to the config file
- Future runs of
icingwill reuse these settings
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