Wallpaper engine kernel for the equisdots desktop. Headless CLI that applies, thumbnails, searches and rotates wallpapers — no shell dependency; the Quickshell picker UI lives in the dottes shell and talks to this CLI.
Version: 0.1.0 · License: MIT
| Role | Tool |
|---|---|
| Apply still images | xwww (xwww-daemon) |
| Apply videos | mpvpaper |
| Thumbnails / webp / color helpers | ImageMagick (magick) |
| Video posters | ffmpeg + ffprobe |
| Search downloads | curl |
| Search scraper | python3 (stdlib only) |
| Trash on delete | gio (optional; falls back to rm) |
| Notifications | notify-send (optional) |
git clone https://github.com/equisdots/davincix ~/davincixThe UI resolves the CLI in this order:
$DAVINCIX_CLI— explicit path todavincix.sh.- Sibling
../kernel/davincix.shnext to the UI.
So on the dottes shell the recommended wiring is a symlink:
ln -s ~/davincix ~/.config/hypr/scripts/quickshell/davincix/kernelAny other frontend only needs the CLI path.
davincix.sh set <file|url> [--video] [--monitors all|A,B] \
[--transition name] [--thumb <poster>] [--notify] [--dry-run]
davincix.sh fetch --name <n> --map <f> --dest <f> \
[--thumb-in <f>] [--thumb-out <f>] [--monitors ...] [--transition ...]
davincix.sh current [--thumb-name]
davincix.sh thumbs
davincix.sh search <query> [--source ddg|wallhaven|pexels|pixabay]
davincix.sh search --continue <query> # next page (keeps the cache)
davincix.sh search --clear # stop + drop the cache
davincix.sh stop
davincix.sh rm <file>
davincix.sh import <paths…>
davincix.sh slideshow start|stop|status [interval]
davincix.sh keys [list | set NAME VALUE] # provider API keys (keys.conf)
davincix.sh paths
davincix.sh --version| Variable | Default | Use |
|---|---|---|
DAVINCIX_WALLPAPER_DIR |
$WALLPAPER_DIR or ~/.config/hypr/wallpapers |
source directory |
DAVINCIX_CACHE_DIR |
~/.cache/quickshell/wallpaper_picker |
thumbs, current, search |
DAVINCIX_STATE_DIR |
~/.local/state/quickshell/wallpaper_picker |
persistent flags |
DAVINCIX_RUN_DIR |
$XDG_RUNTIME_DIR/quickshell/wallpaper_picker |
control, locks, PIDs |
DAVINCIX_LOG_DIR |
$XDG_RUNTIME_DIR/quickshell/logs |
logs |
DAVINCIX_CLI |
— | consumed by the UI (CLI location) |
current_wallpaper.png— current wallpaper cache (lock screens, theme tools).ddg_search_control—run|pause|stop; written by the UI.search_cursors/<source>— per-provider pagination cursor (search --continue).search_source— active search provider (persisted per fresh search).thumbs/.manifest+thumbs/.source_dir— thumbnail cache index.search_map.txt—name|urlfor search results.slideshow.pid+slideshow_enabled— slideshow daemon state.
slideshow start [interval] runs a detached daemon that rotates still images
(--transition random) and never repeats the previous one. State lives in the
run/state dirs; resuming after a reboot needs an autostart entry in the host
(e.g. davincix.sh slideshow start when the enabled flag exists).
bash davincix.sh --version
bash davincix.sh paths
bash davincix.sh current
bash davincix.sh set ~/.config/hypr/wallpapers/7.png --dry-run # no aplica
bash davincix.sh thumbsSearch providers live in providers/ (one script per source) and are plain
"thumb|full" emitters consumed by search.sh:
ddg.py— DuckDuckGo (stdlib only; JSON endpoint + VQD token dance; DDG can change it at any time).wallhaven.py— Wallhaven public API (no key needed for SFW), native resolution filter and page-number pagination.pexels.py— Pexels videos API (stock clips; responds without a key today, sendsPEXELS_KEYwhen present). thumb = preview image, full = best mp4= 1920x1080.
pixabay.py— Pixabay videos API (needsPIXABAY_KEY; free). thumb = Vimeo preview, full = best variant >= 1920x1080.
API keys live in $DAVINCIX_STATE_DIR/keys.conf (sourced by search.sh) or the
environment: PEXELS_KEY, PIXABAY_KEY.
Video results keep an image thumbnail in the cache and the map stores the video
URL; fetch saves the local file with its real container extension
(.mp4/.webm), applies it with mpvpaper and the thumbnail prep builds the
000_ poster.
Results are filtered to >= 1920x1080 and validated (content-type + mime)
before being kept.
MIT — see LICENSE.