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.