Repository navigation
veil 1.0.0-beta.1
Pre-release
Pre-release
·
2 commits
to main
since this release
Added
- veil is source-available under the PolyForm Strict License 1.0.0 with additional permissions (
ADDITIONAL-PERMISSIONS.md), free to use for noncommercial purposes; it is not open source. The release tarballs and the Nix package carryLICENSE,ADDITIONAL-PERMISSIONS.mdandTHIRD-PARTY-NOTICES, the licences of the Rust crates veil links. veil daemon: a wallpaper on every output of a Wayland compositor withwlr-layer-shell(Hyprland, sway and other wlroots compositors), also on outputs connected later, or only on the outputs named with--output. An output that is unplugged gets its wallpaper back when it returns.- Images in the formats of the
imagecrate (PNG, JPEG, WebP, BMP, TIFF, GIF, ...), decoded once and composited at the output's resolution; pictures over 16384 pixels per side, or that would need more than 512 MiB, are refused before they are decoded. - Video wallpapers through GStreamer (
waylandsink), without audio, looped without rebuilding the pipeline, decoded in hardware when GStreamer has a decoder for the card. The log names the decoder. - Images and videos are told apart by the content of the file. Animated GIFs play as videos. Files that cannot be a wallpaper (a directory, an empty file, HEIF, JPEG XL, something unknown) are refused with the reason.
- Scaling modes
fill,fit,stretch,centerandtile(--mode), and a background colour for the bars (--bg-color), for images and videos. - HiDPI and fractional scales (
wp_viewporter,wp_fractional_scale_v1): pictures are drawn at the output's physical resolution. - A new wallpaper replaces the old one only once it has something to show (for a video, its first frame); one that fails leaves the old one on screen.
- A video that fails while it plays is restarted (four times in a row at most), then given up with one desktop notification. Notifications are throttled.
- Automatic pause of a video behind a fullscreen window, or, with
--pause-on covered, behind windows that cover the whole output, read from the IPC of Hyprland or sway, per output. - A video nobody is shown (a locked screen, a monitor that is off) is stopped after two seconds and started again when the output is drawn again, on any compositor (
--release-unseen-after). - Commands for a running daemon:
veil set,clear,pause,resumeandtoggle, for every output or one (--output),statusandoutputs(both with--json),quit(aliasstop) andping, with stable exit statuses. - A control socket in
XDG_RUNTIME_DIRfor other programs (status bars, scripts), one JSON object per line, versioned, and only for processes of the same user. Reference:docs/ipc.md. - The wallpaper of each output is saved (
$XDG_STATE_HOME/veil/state.json) and shown again after a restart;veil set --no-persistskips that. - A configuration file,
~/.config/veil/config.toml: the daemon's options and each output's wallpaper, checked withveil config check. Reference:docs/configuration.md, example:contrib/config.example.toml. - A systemd user unit (
contrib/systemd/veil.service): active once every output shows its wallpaper, restarted after a crash with the wallpapers it had, a watchdog on the event loop. - One daemon per compositor; a second one exits with status 4.
- Shell completions for bash, zsh, fish and nushell (
veil completions) and a man page per command. - A Nix flake: the package (wrapped with its GStreamer plugins and a GStreamer registry of its own),
nix run, an overlay, and dev shells. - Prebuilt binaries for x86_64 and aarch64 Linux with every release: a tarball with the binary, the systemd unit, the man pages, the shell completions, the documents and
install.sh(into/usr/local, or--prefix ~/.local;--uninstall), withSHA256SUMSand a build-provenance attestation per tarball. They use the system's GStreamer and need glibc 2.34 or newer; run on Debian 12 and 13, Ubuntu 22.04 and 24.04, Fedora 44 and Arch Linux. - Documentation: a README with a quick start, the features and their status, the measured numbers, and the installation from source on Arch, Debian, Ubuntu and Fedora; troubleshooting and a compatibility table, what was measured, known issues.
Deprecated
veil --daemon ..., the command line of the first prototype. It still starts the daemon, with a warning; useveil daemon ....
Known issues
- A monitor that is changed, plugged in or powered on while a video plays crashes the daemon, inside GStreamer's
waylandsink(known issue 1). Under the systemd unit it is back within seconds with its wallpapers. - On NVIDIA every video frame is converted to RGB on the CPU: about 18 % of a core for 1080p at 30 fps (known issue 7).
- Without
MALLOC_ARENA_MAX=1, which the Nix package and the systemd unit set, memory grows with every video switch (known issue 3). - With the prebuilt binary on a GStreamer older than 1.26 (Debian 12, Ubuntu 22.04 and 24.04), animated GIFs stand still or do not start, because of GStreamer's GIF demuxer (on Debian 12 it also keeps a CPU core busy); converted to a video they play. On Ubuntu 24.04, 1080p videos showed only part of their frames in a headless sway (known issue 8).
- Everything so far was checked in a headless sway on an NVIDIA card; the checks in a real Hyprland session, and on Intel and AMD cards, are still to be done.