gesso 0.3.1

Deterministic Wayland wallpaper daemon/controller
Documentation

gesso

Deterministic Wayland wallpaper daemon and controller with smooth, low-latency transitions.

gesso renders wallpapers using wlr-layer-shell, creating a dedicated background surface per output. It supports image and solid-colour wallpapers with carefully paced fade and wipe animations designed to stay smooth even under compositor quirks.

Wayland-only. Requires a compositor with layer-shell support (most wlroots-based compositors).


Features

  • Image wallpapers with multiple modes (fill, fit, stretch, center, tile)
  • Solid colour wallpapers
  • Smooth fade and wipe transitions
  • Per-output targeting
  • Deterministic timing (no runaway frame pacing)
  • SHM double-buffering with frame-callback fallback
  • Cached last frames for instant re-apply
  • Minimal dependencies, daemon-friendly design

Installation

Build from source

git clone <your-repo-url>
cd gesso
cargo build --release

Binary location:

./target/release/gesso

Usage

Start the daemon

In your wayland compositors autostart section start gesso daemon with:

gessod 

Set an image wallpaper

gesso set ~/Pictures/wallpaper.png

Image modes

gesso set ~/Pictures/wallpaper.png --mode fill
gesso set ~/Pictures/wallpaper.png --mode fit
gesso set ~/Pictures/wallpaper.png --mode stretch
gesso set ~/Pictures/wallpaper.png --mode center
gesso set ~/Pictures/wallpaper.png --mode tile

Background colour (for fit / center letterboxing)

gesso set ~/Pictures/wallpaper.png --mode fit --colour "#101010"

Transitions

Fade:

gesso set ~/Pictures/wallpaper.png --transition fade --duration 600

Wipe:

gesso set ~/Pictures/wallpaper.png --transition wipe --duration 750

Solid colour

gesso colour "#0b0f14"

With transition:

gesso colour "#0b0f14" --transition fade --duration 200
gesso colour "#0b0f14" --transition wipe --from right --duration 260

Target a specific output

Uses the compositor’s wl_output.name (e.g. DP-1, HDMI-A-1).

gesso set ~/Pictures/wallpaper.png --output DP-1
gesso colour "#111111" --output DP-1

Unset wallpaper

Unset all outputs:

gesso unset

Unset one output:

gesso unset --output DP-1

CLI Reference

gesso set

Set an image wallpaper (path or name resolved via GESSO_DIRS).

gesso set <target> [OPTIONS]

Options:

  • -m, --mode <fill|fit|stretch|center|tile>
    Default: fill

  • -c, --colour <hex>
    Background fill colour for fit/center letterboxing (e.g. #101010)

  • -t, --transition <none|fade|wipe>
    Default: none

  • -d, --duration <ms>
    Default: 850

  • -f, --from <left|right> Wipe direction (only used when --transition wipe) Default: left

  • -o, --output <name> Target a specific output


gesso colour

Set a solid colour wallpaper.

gesso colour <colour> [OPTIONS]

Options:

  • -t, --transition <none|fade|wipe>
    Default: none

  • -d, --duration <ms>
    Default: 850

  • -f, --from <left|right> Default: left

  • -o, --output <name>
    Target a specific output


gesso unset

Unset wallpaper on one output or all outputs.

gesso unset [--output <name>]

Other commands

gesso status
gesso doctor
gesso stop

Environment

WAYLAND_DISPLAY

Must be set (Wayland-only).

GESSO_DIRS

Optional search paths for gesso set <target> when <target> is not an absolute or relative path.

Example:

export GESSO_DIRS="$HOME/Pictures/Wallpapers:/usr/share/backgrounds"

Philosophy

gesso is designed to be boring in the best way:

  • deterministic timing
  • no runaway animations
  • no daemon lockups
  • graceful degradation when compositors misbehave

Silence is a feature.