#!/bin/sh # This script does the following: # Run by itself, set the wallpaper (at X start). # If given a file, set that as the new wallpaper. # If given a directory, choose random file in it. # If wal is installed, also generates a colorscheme. # Location of link to wallpaper link. wallloc="${XDG_DATA_HOME:-${HOME}/.local/share}/wallpapers" bgloc="$wallloc/bg" vidloc="$wallloc/video/1/filename00001.jpg" # Configuration files of applications that have their themes changed by pywal. dunstconf="${XDG_CONFIG_HOME:-${HOME}/.config}/dunst/dunstrc" zathuraconf="${XDG_CONFIG_HOME:-${HOME}/.config}/zathura/zathurarc" # Give -s as parameter to make notifications silent. while getopts "s" o; do case "${o}" in s) silent='1' ;; *) ;; esac done shift $((OPTIND - 1)) [ -d "$wallloc" ] || mkdir -p "$wallloc" [ "$(ls "$wallloc/video" 2>/dev/null)" ] && { [ -n "$(pgrep -f "wallset")" ] && pgrep -f "wallset" | xargs kill wallset -r 2>/dev/null wallset -q 2>/dev/null rm -rf "$wallloc/video" } [ -f ~/.fehbg ] && rm -f ~/.fehbg trueloc="$(readlink -f "$1")" && case "$(file --mime-type -b "$trueloc")" in image/*) ln -sf "$trueloc" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Changing wallpaper..." ;; inode/directory) ln -sf "$(find -L "$trueloc" -iregex '.*.\(jpg\|jpeg\|png\|gif\)' -type f | shuf -n 1)" "$bgloc" && [ -z "$silent" ] && notify-send -i "$bgloc" "Random Wallpaper chosen." ;; video/*) mkdir -p "$wallloc/video" 2>/dev/null if [ ! "${trueloc##*.}" = "mp4" ] || [ "$(($(mediainfo --Output="General;%Duration%" "$trueloc")))" -gt 10000 ]; then notify-send "⌛ Converting video for wallpaper..." && ffmpeg -i "$trueloc" -t 3 "$wallloc/video/bg.mp4" 2>/dev/null else cp "$trueloc" "$wallloc/video/bg.mp4" 2>/dev/null fi trueloc="$wallloc/video/bg.mp4" wallset --video "$trueloc" >/dev/null 2>&1 && [ -z "$silent" ] && notify-send -i "$vidloc" "Changing wallpaper..." exit ;; *) [ -z "$silent" ] && notify-send "🖼️ Error" "Not a valid image or directory." exit 1 ;; esac # If pywal is installed, use it. if command -v wal >/dev/null 2>&1; then wal -n -i "$(readlink -f "$bgloc")" -o "${XDG_CONFIG_HOME:-${HOME}/.config}/wal/postrun" >/dev/null 2>&1 # If pywal is removed, return config files to normal. else [ -f "$dunstconf.bak" ] && unlink "$dunstconf" && mv "$dunstconf.bak" "$dunstconf" [ -f "$zathuraconf.bak" ] && unlink "$zathuraconf" && mv "$zathuraconf.bak" "$zathuraconf" fi xwallpaper --zoom "$bgloc" # If running, dwm hit the key to refresh the color scheme. pidof dwm >/dev/null && xdotool key super+F5