• Stars
    star
    256
  • Rank 156,003 (Top 4 %)
  • Language
    Rust
  • License
    GNU General Publi...
  • Created over 2 years ago
  • Updated about 1 month ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Modern wallpaper daemon for Wayland

wpaperd

GitHub release (latest by date) GitHub license GitHub Workflow Status

wpaperd is a minimal wallpaper daemon for Wayland. It allows the user to choose a different image for each output (aka for each monitor) just as swaybg. Moreover, a directory can be chosen and wpaperd will randomly choose an image from it. Optionally, the user can set a duration, after which the image displayed will be changed with another random one.

Features

  • Choose your wallpaper for each input
  • Randomly choose an image from a directory
  • Change the random image after a set duration
  • Configurable via a TOML configuration file
  • Reload config at runtime and apply new settings
  • (optional) Apply a shadow on the top of the wallpaper

Getting started

Dependencies

wpaperd is written entirely in Rust and, other than the crates it depends on, it has the following dependencies:

  • pkg-config (build-time)
  • libxkbcommon

It does not depend on wayland-client C library, but it instead uses a Rust implementation.

Build

To install wpaperd, clone the repository and build the project:

$ git clone https://github.com/danyspin97/wpaperd
$ cd wpaperd
$ cargo build --release

Install

You can install the daemon (wpaperd) and cli (wpaperctl) using cargo:

$ cargo install --path="./daemon" && cargo install --path="./cli"

Otherwise you can install it using rinstall:

# First generate the man page
$ scdoc < man/wpaperd-output.5.scd > man/wpaperd-output.5
$ rinstall -y

To run it, execute the wpaperd program:

$ wpaperd

If you want to automatically run it at startup, add this line to your sway configuration (located in $HOME/.config/sway/config) depending on your installation method:

# For installation using cargo
exec ~/.cargo/bin/wpaperd
# For installation using rinstall
exec ~/.local/bin/wpaperd

Images format support

wpaperd relies on the image crate for loading and dislaying images. By default it supports for the following formats:

  • jpeg
  • png
  • webp

Optionally, support for avif images can be enabled by adding its respective feature:

$ cargo build --release --features avif

Wallpaper Configuration

The wallpaper configuration file for wpaperd is located in XDG_CONFIG_HOME/wpaperd/wallpaper.toml (which defaults to $HOME/.config/wpaperd/wallpaper.toml) and is a TOML file. Each section represents a different output and contains the following keys:

  • path, path to the image/directory
  • duration, how much time the image should be displayed until it is changed with a new one. This is only valid when path points to a directory. (Optional)
  • apply-shadow, apply a shadow on the top part of the image, to work as a shadow effect of the status bar. This is particularly suited for window managers like sway. (Optional)
  • sorting, choose the sorting order. Valid options are ascending, descending, and random, with the unspecified or default being random (Optional)

The section default will be used as fallback for the all the outputs that aren't listed in the config file. This is an example configuration:

[default]
path = "/home/danyspin97/Pictures/Wallpapers/"
duration = "30m"
sorting = "ascending"

[eDP-1]
path = "/home/danyspin97/Pictures/Wallpapers/github_octupus.png"
apply-shadow = true

[DP-2]
path = "/home/danyspin97/Pictures/Landscapes/"
sorting = "descending"

If you're running sway, you can look for the available outputs and their ID by running:

$ swaymsg -t get_outputs

Every time you update the configuration while the program is running, the changes will be applied automatically.

TODO

wpaperd is still a work in progress. The next things to do, in order, are:

  • Configurable upscaling algorithm, right now Lanzcos3 is always used
  • Add different modes to apply the wallpaper, i.e. center, fit, original
  • Add IPC and a client to control wpaperd
  • Update smithay-client-toolkit to next version (still unreleased)

License

wpaperd is licensed under the GPL-3.0+ license.