Wallpaper manager for the bread desktop
  • Rust 96.4%
  • Shell 3.6%
Find a file
Breadway 96688c0fe3
All checks were successful
dev release / build (push) Successful in 1m21s
CI: isolate tag release clones
Remove shared temporary cleanup from release workflows.
2026-09-30 02:31:07 +08:00
.forgejo/workflows CI: isolate tag release clones 2026-09-30 02:31:07 +08:00
.github/workflows fix: move release workflow to Forgejo, add LICENSE 2026-06-17 14:45:56 +08:00
ci ci: bump ci/bread-ecosystem.rev for the per-product build lock 2026-09-29 17:36:24 +08:00
packaging Add GTK wallpaper library 2026-08-16 00:26:50 +08:00
src fix: fix set_on ordering, enable bread-theme extract feature, add third-party notices 2026-09-29 08:32:06 +08:00
tests fix: ship the combined third-party licence text with the release artifact 2026-09-29 08:32:06 +08:00
.gitignore ci: build dev track and PR checks against dependency main 2026-09-28 07:05:47 +08:00
AGENTS.md docs: remove em dashes from code and docs 2026-09-09 13:59:40 +08:00
bakery.toml fix: extract palette natively via bread-theme instead of shelling to pywal 2026-09-29 08:32:06 +08:00
Cargo.lock chore: bump version to 0.2.0 2026-09-29 13:13:09 +08:00
Cargo.toml chore: bump version to 0.2.0 2026-09-29 13:13:09 +08:00
config.example.toml Add GTK wallpaper library 2026-08-16 00:26:50 +08:00
CONTRIBUTING.md ci: build dev track and PR checks against dependency main 2026-09-28 07:05:47 +08:00
EVENTS.md fix: address review on native palette extraction 2026-09-29 08:32:06 +08:00
LICENSE fix: ship the combined third-party licence text with the release artifact 2026-09-29 08:32:06 +08:00
LICENSE-ImageMagick fix: fix set_on ordering, enable bread-theme extract feature, add third-party notices 2026-09-29 08:32:06 +08:00
LICENSE-libjpeg-turbo fix: fix set_on ordering, enable bread-theme extract feature, add third-party notices 2026-09-29 08:32:06 +08:00
NOTICE fix: fix set_on ordering, enable bread-theme extract feature, add third-party notices 2026-09-29 08:32:06 +08:00
README.md fix: fix set_on ordering, enable bread-theme extract feature, add third-party notices 2026-09-29 08:32:06 +08:00

breadpaper

Wallpaper setter for the bread desktop. One command sets the wallpaper via awww, extracts a palette from it natively via bread-theme, and writes the shared stylesheet in-process. Two monitors can keep different wallpapers (and per-output bread-theme files); the last path per output is stored in ~/.config/breadpaper/current.json.

set / get / apply stay one-shot CLI. breadpaper library (alias browse) opens a GTK picker over the wallpaper directories. It is not a slideshow daemon.

Dependencies

Must be on $PATH for set:

  • awww: Wayland wallpaper (awww img)

Palette extraction and the shared stylesheet write are done in-process via the bread-theme library crate (with its extract feature): the bread-theme CLI binary does not need to be installed or on $PATH for set to work.

library also needs GTK4 (the window loads bread-theme's shared stylesheet and follows the monitor it sits on). get (with or without --output) reads ~/.config/breadpaper/current.json; see the docstring on get() for which entry it picks with no --output.

Install

bakery install breadpaper

From source:

cargo build --release
install -Dm755 target/release/breadpaper ~/.local/bin/breadpaper

Usage

breadpaper <path>                 # shorthand for `set` (all outputs)
breadpaper <path> --output NAME   # one output
breadpaper set <path>             # awww + palette extraction + shared stylesheet write (all)
breadpaper set <path> --output NAME
breadpaper get                    # print the current wallpaper (see get() docstring)
breadpaper get --output NAME      # path from current.json
breadpaper apply                  # restore current.json
breadpaper library                # GTK picker (alias: browse)
breadpaper library --dir PATH     # also scan PATH (repeatable)
breadpaper listen                 # honor bread.command.paper.set / .library

Supported formats: png, jpg, jpeg, webp, gif, bmp.

Library

breadpaper library scans these directories (missing ones are skipped):

  1. ~/Pictures/Wallpapers
  2. /usr/share/backgrounds/bos

Override the list in ~/.config/breadpaper/config.toml:

library_dirs = [
    "~/Pictures/Wallpapers",
    "/usr/share/backgrounds/bos",
]

BREADPAPER_LIBRARY_DIRS (colon-separated) overrides the file. --dir appends extra roots for that invocation. Clicking a thumbnail applies to the monitor the picker is on (set --output); if the output cannot be resolved it falls back to all outputs.

Bread events

After a successful set, breadpaper emits bread.paper.changed if breadd is running (silent no-op if it isn't). breadpaper listen is the optional long-running subscriber for bread.command.paper.set and bread.command.paper.library; it does not start by itself. Lua modules can still bread.exec("breadpaper set …") or bread.exec("breadpaper library"). See EVENTS.md.

License

MIT, see LICENSE, plus third-party terms: breadpaper always builds bread-theme with its extract feature (palette extraction is breadpaper's whole purpose), which statically links a Rust port of ImageMagick and libjpeg-turbo/IJG code (bread-palette-extract). See NOTICE, LICENSE-ImageMagick and LICENSE-libjpeg-turbo, or run breadpaper notice.