A modern wallpaper tool with Gnome dynamic wallpaper support. https://enkei.spacesnek.rocks
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Johannes Wünsche 1f3f36340f
Add copr badge
2 weeks ago
.rpm Add rpm spec 2 weeks ago
src Use lazy regex 2 weeks ago
.gitignore Initial commit 1 month ago
Cargo.lock Use lazy regex 2 weeks ago
Cargo.toml Use lazy regex 2 weeks ago
LICENSE.txt Add License 3 weeks ago
README.md Add copr badge 2 weeks ago

README.md

enkei

A wayland wallpaper tool with support for Gnome dynamic wallpapers. The main motivation behind enkei the option to display dynamic wallpapers compatible with the Gnome wallpaper specification. This wallpaper tool uses gtk-layer-shell to render backgrounds on all monitors. It has been tested in sway but should be compatible in general with all compositors supporting the wlr-layer-shell protocol.

Features

  • Show Static Image
  • Show Dynamic Wallpapers
  • Set Different Scaling Modes
  • Set Wallpaper Filter Algorithm
  • Most common image formats supported (PNG, JPG, TIF,...)

Under the hood we use image which provides the most common image types, have a look on their documentation

Options

flag purpose/variants
-f Filter Methods (Fast, Good, Best, Nearest, Bilinear, Gaussian) [default: Good]
-m Display Mode (Dynamic, Static) [default: Autodetect]
-s Scale (Fill, Fit, None) [default: Fill]

Installation

Available Packages

Prebuilt images are currently only available for Fedora 33/34/rawhide via copr.

Add the copr to your system and install enkei with:

# dnf copr enable jwuensche/wayland-tools 
# dnf install enkei

Patches for packaging of any other distribution are welcome, and will be merged gladly.

Manual

If no packages are available for your distribution, you want to manually install, or develop on enkei you can build it yourself locally with the following steps.

Requirements

Make sure you have to following dependencies installed:

git
cargo 
rust
glibc-devel
gtk3-devel
gtk-layer-shell-devel

Building the project

To build the project then clone it and from within the cloned directory:

$ cargo build

Installing from Local Build

You can either install enkei via a cargo, to your $CARGO_BIN directory

$ cargo install --path .

or to any other arbitrary directory in your path e.g. /usr/local/bin.

$ cargo build --release
$ install -Dm755 "target/release/enkei" "/usr/local/bin/enkei"

Known Limitations / TODOs

  • Handle Output Changes

    It would be a nice to have to handle addition and removal of monitors while running. Changes required would be to connect to the gdk DisplayManager and interact with these proclaimed changes. The delay in which this should happen is best to be kept low, so long-time animations will have to interrupted.

  • More efficient image rendering for animation steps

    We create new cairo surface for separate animation steps, this leads to more effort in copying but guarantees a linear progression in the animation. We would best change this to only apply a certain level of alpha to the image at each step halving the copy effort.

  • Allow setting of wallpapers via IPC

    A nice to have would be to send messages to the already running enkei instance to change the wallpaper shown. For this we would need to interrupt any ongoing animations or static images and hot-swap the images in the current gtk session.

    oguri has done something similar seems like a cool feature to have to avoid respawning the application.

  • Individual wallpapers on different displays

    The base functionality for this is already present, as each output is treated individually. But higher logic and interface is missing to realize this. This goes hand in hand with being able to choose on which display you want to display a wallpaper. Maybe not all should be set.