diff --git a/example_scripts/swww_randomize.sh b/example_scripts/swww_randomize.sh index 300d3e0..df4a768 100755 --- a/example_scripts/swww_randomize.sh +++ b/example_scripts/swww_randomize.sh @@ -1,32 +1,28 @@ -#!/bin/bash +#!/bin/sh +# Changes the wallpaper to a randomly chosen image in a given directory +# at a set interval. -# This script will randomly go through the files of a directory, setting it -# up as the wallpaper at regular intervals -# -# NOTE: this script is in bash (not posix shell), because the RANDOM variable -# we use is not defined in posix +DEFAULT_INTERVAL=300 # In seconds -if [[ $# -lt 1 ]] || [[ ! -d $1 ]]; then - echo "Usage: - $0 " +if [ $# -lt 1 ] || [ ! -d "$1" ]; then + printf "Usage:\n\t\e[1m%s\e[0m \e[4mDIRECTORY\e[0m [\e[4mINTERVAL\e[0m]\n" "$0" + printf "\tChanges the wallpaper to a randomly chosen image in DIRECTORY every\n\tINTERVAL seconds (or every %d seconds if unspecified)." "$DEFAULT_INTERVAL" exit 1 fi -# Edit below to control the images transition -export SWWW_TRANSITION_FPS=60 -export SWWW_TRANSITION_STEP=2 - -# This controls (in seconds) when to switch to the next image -INTERVAL=300 +# See swww-img(1) +RESIZE_TYPE="fit" +export SWWW_TRANSITION_FPS="${SWWW_TRANSITION_FPS:-60}" +export SWWW_TRANSITION_STEP="${SWWW_TRANSITION_STEP:-2}" while true; do find "$1" -type f \ - | while read -r img; do - echo "$((RANDOM % 1000)):$img" - done \ - | sort -n | cut -d':' -f2- \ - | while read -r img; do - swww img "$img" - sleep $INTERVAL - done + | while read -r img; do + echo "$(" - exit 1 +if [ $# -lt 1 ] || [ ! -d "$1" ]; then + printf "Usage:\n\t\e[1m%s\e[0m \e[4mDIRECTORY\e[0m [\e[4mINTERVAL\e[0m]\n" "$0" + printf "\tChanges the wallpaper to a randomly chosen image in DIRECTORY every\n\tINTERVAL seconds (or every %d seconds if unspecified)." "$DEFAULT_INTERVAL" + exit 1 fi -# Make sure only 1 instance of swww_randomize -PIDFILE=~/.local/state/swww-randomize-pidfile.txt -if [ -e "${PIDFILE}" ]; then - OLD_PID="$(<${PIDFILE})" - if [ "X" != "X${OLD_PID}" -a -e "/proc/${OLD_PID}" ]; then - OLD_NAME="$( ${PIDFILE} - -# Edit below to control the images transition -export SWWW_TRANSITION_FPS=60 -export SWWW_TRANSITION_STEP=2 - -# This controls (in seconds) when to switch to the next image -INTERVAL=300 - -# Possible values: -# - no: Do not resize the image -# - crop: Resize the image to fill the whole screen, cropping out parts that don't fit -# - fit: Resize the image to fit inside the screen, preserving the original aspect ratio +# See swww-img(1) RESIZE_TYPE="fit" - -DISPLAY_LIST=$(swww query | grep -Po "^[^:]+") +export SWWW_TRANSITION_FPS="${SWWW_TRANSITION_FPS:-60}" +export SWWW_TRANSITION_STEP="${SWWW_TRANSITION_STEP:-2}" while true; do - find "$1" -type f \ - | while read -r img; do - echo "$RANDOM:$img" - done \ - | sort -n | cut -d':' -f2- \ - | tee ~/.local/state/swww-randomize-list.txt \ - | while read -r img; do - # Set a different image for each display - for disp in $DISPLAY_LIST; do - # if there is no image try to get one - if [ "X" = "X${img}" ]; then - if read -r img; then - true - else # if there are no more images, refresh the list - break 2 - fi - fi - swww img --resize=$RESIZE_TYPE --outputs $disp $img - # make sure each image is only used once - img="" - done - sleep $INTERVAL - done + find "$1" -type f \ + | while read -r img; do + echo "$(