#!/run/current-system/sw/bin/bash set -euo pipefail echo "Running as $(whoami)" currentuser=$(whoami) # or set manually currentpath=/run/current-system/sw/bin while [ ! -S "$IPC_SOCKET" ]; do echo "Waiting for Hyprland socket..." sleep 1 done # ----------------------------- # Configuration # ----------------------------- PICTURES_DIR="$HOME/Wallpapers/pictures" NAMESPACE="main" # Fixed swww namespace MONITOR=$($currentpath/hyprctl monitors -j | $currentpath/jq -r '.[0].name') # ----------------------------- # Start swww-daemon if not running # ----------------------------- if ! pgrep -x $currentpath/swww-daemon >/dev/null; then echo "Starting swww-daemon..." $currentpath/swww-daemon --namespace "$NAMESPACE" & sleep 0.5 # give socket time to appear fi # ----------------------------- # Gather wallpapers # ----------------------------- mapfile -t IMAGES < <(find "$PICTURES_DIR" -type f \( -iname '*.png' -o -iname '*.jpg' -o -iname '*.jpeg' \)) if [ "${#IMAGES[@]}" -eq 0 ]; then echo "No images found in $PICTURES_DIR" exit 1 fi # ----------------------------- # Workspace event listener # ----------------------------- IPC_SOCKET="$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" echo "Listening for workspace events on $IPC_SOCKET..." $currentpath/socat -u UNIX-CONNECT:"$IPC_SOCKET" STDOUT | while read -r line; do if [[ "$line" =~ workspace\#([0-9]+) ]]; then WS="${BASH_REMATCH[1]}" RAND_IMAGE="${IMAGES[RANDOM % ${#IMAGES[@]}]}" echo "Workspace $WS active → setting wallpaper: $RAND_IMAGE" $currentpath/swww img "$RAND_IMAGE" --resize stretch --transition-type random --namespace "$WS" fi done