#!/usr/bin/env bash # Select image file if none is provided if [ -z "$1" ]; then image=$(zenity --file-selection --title="Open File" --file-filter="*.jpg *.jpeg *.png *.webp *.bmp *.jfif *.tiff *.avif *.heic *.heif") else image="$1" fi [ -z "$image" ] && exit 1 [ ! -f "$image" ] && exit 1 # $HOME/.config/wallpaper-chooser/config.json: # ```json # "sort": { # "type": "date", # "reverse": true # } # ``` # So in order to let the most recently used wallpapers appear first: touch "$image" # Copy image to local wallpaper directory ext=${image##*.} random_name=$(tr -dc 'a-zA-Z0-9' $2)?$1:$2; s=m*f; if(s<2) s=2; if(s>200) s=200; printf "%.2f", s }') ### use a temporary file to avoid incomplete file being used temp_blurred=$(mktemp --suffix=."$ext") || exit 1 trap 'rm -f "${temp_blurred}"' EXIT magick "$image_copied" -blur 0x"$sigma" "$temp_blurred" || ( echo "Could not create blurred image" exit 1 ) mv -f "$temp_blurred" "$blurred_image" || ( echo "Could not move blurred image to cache directory" exit 1 ) if [ "$XDG_CURRENT_DESKTOP" = "niri" ]; then swww img -n backdrop "$blurred_image" --transition-type fade --transition-duration 2 > /dev/null 2> /dev/null fi notify-send -a "change-wallpaper" "Blurred Wallpaper Generated" "$blurred_image" -i "$blurred_image" ) & # Apply wallpaper if [ "$XDG_CURRENT_DESKTOP" = "Hyprland" ]; then swww img -n background "$image_copied" --transition-type fade --transition-duration 2 > /dev/null 2> /dev/null notify-send -a "change-wallpaper" "Wallpaper Changed" "$image" -i "$image_copied" change-colortheme -i "$image_copied" || exit 1 elif [ "$XDG_CURRENT_DESKTOP" = "niri" ]; then swww img -n background "$image_copied" --transition-type fade --transition-duration 2 > /dev/null 2> /dev/null notify-send -a "change-wallpaper" "Wallpaper Changed" "$image" -i "$image_copied" change-colortheme -i "$image_copied" || exit 1 else echo "Unsupported desktop environment: $XDG_CURRENT_DESKTOP" exit 1 fi