#!/usr/bin/env bash WALLPAPERS_PATH="$HOME/.config/wallpapers" WALLPAPERS=$(find "$WALLPAPERS_PATH" -type f,l) function help() { echo "Usage: wallpaper [OPTIONS]" echo "" echo "Options:" echo " -h, --help Show this help message and exit" echo " -r, --random Set a random wallpaper" echo " -s, --set Set a wallpaper" } function randomWallpaper() { find ~/.config/wallpapers/ -type f,l | shuf -n 1 } function setWallpaper() { case "$DESKTOP_SESSION" in hyprland) hyprctl hyprpaper preload "$1" &>/dev/null hyprctl monitors -j | jq '.[].name' | xargs -I{} -P 0 hyprctl hyprpaper wallpaper '{}',"$1" &>/dev/null hyprctl hyprpaper unload all &>/dev/null ;; *) feh --bg-fill "$1" &>/dev/null ;; esac } # Parse arguments # https://stackoverflow.com/a/14203146 POSITIONAL=() while [[ $# -gt 0 ]]; do key="$1" case $key in -h | --help) help exit 0 ;; -r | --random) WALLPAPER=$(randomWallpaper) shift # past argument ;; -s | --set) WALLPAPER="$2" shift # past argument shift # past value ;; *) POSITIONAL+=("$1") # save it in an array for later shift # past argument ;; esac done set -- "${POSITIONAL[@]}" # restore positional arguments if [[ -z ${WALLPAPER+x} ]]; then WALLPAPER=$(echo "$WALLPAPERS" | fzf --preview="viu -sb -h 30 {}" --preview-window=right:70%:wrap) fi if [[ ! -f "$WALLPAPER" ]]; then echo "File not found: $WALLPAPER" exit 1 fi setWallpaper "$WALLPAPER"