hyprdots/Configs/.local/share/bin/swwwallpaper.sh
2024-12-10 23:54:56 +01:00

115 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env sh
#// lock instance
lockFile="/tmp/hyde$(id -u)$(basename ${0}).lock"
[ -e "${lockFile}" ] && echo "An instance of the script is already running..." && exit 1
touch "${lockFile}"
trap 'rm -f ${lockFile}' EXIT
#// define functions
Wall_Cache()
{
ln -fs "${wallList[setIndex]}" "${wallSet}"
ln -fs "${wallList[setIndex]}" "${wallCur}"
"${scrDir}/swwwallcache.sh" -w "${wallList[setIndex]}" &> /dev/null
"${scrDir}/swwwallbash.sh" "${wallList[setIndex]}" &
ln -fs "${thmbDir}/${wallHash[setIndex]}.sqre" "${wallSqr}"
ln -fs "${thmbDir}/${wallHash[setIndex]}.thmb" "${wallTmb}"
ln -fs "${thmbDir}/${wallHash[setIndex]}.blur" "${wallBlr}"
ln -fs "${thmbDir}/${wallHash[setIndex]}.quad" "${wallQad}"
ln -fs "${dcolDir}/${wallHash[setIndex]}.dcol" "${wallDcl}"
}
Wall_Change()
{
curWall="$(set_hash "${wallSet}")"
for i in "${!wallHash[@]}" ; do
if [ "${curWall}" == "${wallHash[i]}" ] ; then
if [ "${1}" == "n" ] ; then
setIndex=$(( (i + 1) % ${#wallList[@]} ))
elif [ "${1}" == "p" ] ; then
setIndex=$(( i - 1 ))
fi
break
fi
done
Wall_Cache
}
#// set variables
scrDir="$(dirname "$(realpath "$0")")"
source "${scrDir}/globalcontrol.sh"
wallSet="${hydeThemeDir}/wall.set"
wallCur="${cacheDir}/wall.set"
wallSqr="${cacheDir}/wall.sqre"
wallTmb="${cacheDir}/wall.thmb"
wallBlr="${cacheDir}/wall.blur"
wallQad="${cacheDir}/wall.quad"
wallDcl="${cacheDir}/wall.dcol"
#// check wall
setIndex=0
[ ! -d "${hydeThemeDir}" ] && echo "ERROR: \"${hydeThemeDir}\" does not exist" && exit 0
wallPathArray=("${hydeThemeDir}")
wallPathArray+=("${wallAddCustomPath[@]}")
get_hashmap "${wallPathArray[@]}"
[ ! -e "$(readlink -f "${wallSet}")" ] && echo "fixig link :: ${wallSet}" && ln -fs "${wallList[setIndex]}" "${wallSet}"
#// evaluate options
while getopts "nps:" option ; do
case $option in
n ) # set next wallpaper
xtrans="grow"
Wall_Change n
;;
p ) # set previous wallpaper
xtrans="outer"
Wall_Change p
;;
s ) # set input wallpaper
if [ ! -z "${OPTARG}" ] && [ -f "${OPTARG}" ] ; then
get_hashmap "${OPTARG}"
fi
Wall_Cache
;;
* ) # invalid option
echo "... invalid option ..."
echo "$(basename "${0}") -[option]"
echo "n : set next wall"
echo "p : set previous wall"
echo "s : set input wallpaper"
exit 1 ;;
esac
done
#// check swww daemon
swww query &> /dev/null
if [ $? -ne 0 ] ; then
swww-daemon --format xrgb &
swww query && swww restore
fi
#// set defaults
[ -z "${xtrans}" ] && xtrans="grow"
[ -z "${wallFramerate}" ] && wallFramerate=60
[ -z "${wallTransDuration}" ] && wallTransDuration=0.4
#// apply wallpaper
echo ":: applying wall :: \"$(readlink -f "${wallSet}")\""
swww img "$(readlink "${wallSet}")" --transition-bezier .43,1.19,1,.4 --transition-type "${xtrans}" --transition-duration "${wallTransDuration}" --transition-fps "${wallFramerate}" --invert-y --transition-pos "$(hyprctl cursorpos | grep -E '^[0-9]' || echo "0,0")" &