159 lines
4.2 KiB
Bash
Executable file
159 lines
4.2 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
|
|
|
|
#// hyde envs
|
|
|
|
export confDir="${XDG_CONFIG_HOME:-$HOME/.config}"
|
|
export hydeConfDir="${confDir}/hyde"
|
|
export cacheDir="$HOME/.cache/hyde"
|
|
export thmbDir="${cacheDir}/thumbs"
|
|
export dcolDir="${cacheDir}/dcols"
|
|
export hashMech="sha1sum"
|
|
|
|
get_hashmap()
|
|
{
|
|
unset wallHash
|
|
unset wallList
|
|
unset skipStrays
|
|
unset verboseMap
|
|
|
|
for wallSource in "$@"; do
|
|
[ -z "${wallSource}" ] && continue
|
|
[ "${wallSource}" == "--skipstrays" ] && skipStrays=1 && continue
|
|
[ "${wallSource}" == "--verbose" ] && verboseMap=1 && continue
|
|
|
|
hashMap=$(find "${wallSource}" -type f \( -iname "*.gif" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -exec "${hashMech}" {} + | sort -k2)
|
|
if [ -z "${hashMap}" ] ; then
|
|
echo "WARNING: No image found in \"${wallSource}\""
|
|
continue
|
|
fi
|
|
|
|
while read -r hash image ; do
|
|
wallHash+=("${hash}")
|
|
wallList+=("${image}")
|
|
done <<< "${hashMap}"
|
|
done
|
|
|
|
if [ -z "${#wallList[@]}" ] || [[ "${#wallList[@]}" -eq 0 ]] ; then
|
|
if [[ "${skipStrays}" -eq 1 ]] ; then
|
|
return 1
|
|
else
|
|
echo "ERROR: No image found in any source"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [[ "${verboseMap}" -eq 1 ]] ; then
|
|
echo "// Hash Map //"
|
|
for indx in "${!wallHash[@]}" ; do
|
|
echo ":: \${wallHash[${indx}]}=\"${wallHash[indx]}\" :: \${wallList[${indx}]}=\"${wallList[indx]}\""
|
|
done
|
|
fi
|
|
}
|
|
|
|
get_themes()
|
|
{
|
|
unset thmSortS
|
|
unset thmListS
|
|
unset thmWallS
|
|
unset thmSort
|
|
unset thmList
|
|
unset thmWall
|
|
|
|
while read thmDir ; do
|
|
if [ ! -e "$(readlink "${thmDir}/wall.set")" ] ; then
|
|
get_hashmap "${thmDir}" --skipstrays || continue
|
|
echo "fixig link :: ${thmDir}/wall.set"
|
|
ln -fs "${wallList[0]}" "${thmDir}/wall.set"
|
|
fi
|
|
[ -f "${thmDir}/.sort" ] && thmSortS+=("$(head -1 "${thmDir}/.sort")") || thmSortS+=("0")
|
|
thmListS+=("$(basename "${thmDir}")")
|
|
thmWallS+=("$(readlink "${thmDir}/wall.set")")
|
|
done < <(find "${hydeConfDir}/themes" -mindepth 1 -maxdepth 1 -type d)
|
|
|
|
while IFS='|' read -r sort theme wall ; do
|
|
thmSort+=("${sort}")
|
|
thmList+=("${theme}")
|
|
thmWall+=("${wall}")
|
|
done < <(parallel --link echo "{1}\|{2}\|{3}" ::: "${thmSortS[@]}" ::: "${thmListS[@]}" ::: "${thmWallS[@]}" | sort -n -k 1 -k 2)
|
|
|
|
if [ "${1}" == "--verbose" ] ; then
|
|
echo "// Theme Control //"
|
|
for indx in "${!thmList[@]}" ; do
|
|
echo -e ":: \${thmSort[${indx}]}=\"${thmSort[indx]}\" :: \${thmList[${indx}]}=\"${thmList[indx]}\" :: \${thmWall[${indx}]}=\"${thmWall[indx]}\""
|
|
done
|
|
fi
|
|
}
|
|
|
|
[ -f "${hydeConfDir}/hyde.conf" ] && source "${hydeConfDir}/hyde.conf"
|
|
|
|
case "${enableWallDcol}" in
|
|
0|1|2|3) ;;
|
|
*) enableWallDcol=0 ;;
|
|
esac
|
|
|
|
if [ -z "${hydeTheme}" ] || [ ! -d "${hydeConfDir}/themes/${hydeTheme}" ] ; then
|
|
get_themes
|
|
hydeTheme="${thmList[0]}"
|
|
fi
|
|
|
|
export hydeTheme
|
|
export hydeThemeDir="${hydeConfDir}/themes/${hydeTheme}"
|
|
export wallbashDir="${hydeConfDir}/wallbash"
|
|
export enableWallDcol
|
|
|
|
|
|
#// hypr vars
|
|
|
|
if printenv HYPRLAND_INSTANCE_SIGNATURE &> /dev/null; then
|
|
export hypr_border="$(hyprctl -j getoption decoration:rounding | jq '.int')"
|
|
export hypr_width="$(hyprctl -j getoption general:border_size | jq '.int')"
|
|
fi
|
|
|
|
|
|
#// extra fns
|
|
|
|
pkg_installed()
|
|
{
|
|
local pkgIn=$1
|
|
if pacman -Qi "${pkgIn}" &> /dev/null ; then
|
|
return 0
|
|
elif pacman -Qi "flatpak" &> /dev/null && flatpak info "${pkgIn}" &> /dev/null ; then
|
|
return 0
|
|
elif command -v "${pkgIn}" &> /dev/null ; then
|
|
return 0
|
|
else
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
get_aurhlpr()
|
|
{
|
|
if pkg_installed yay
|
|
then
|
|
aurhlpr="yay"
|
|
elif pkg_installed paru
|
|
then
|
|
aurhlpr="paru"
|
|
fi
|
|
}
|
|
|
|
set_conf()
|
|
{
|
|
local varName="${1}"
|
|
local varData="${2}"
|
|
touch "${hydeConfDir}/hyde.conf"
|
|
|
|
if [ $(grep -c "^${varName}=" "${hydeConfDir}/hyde.conf") -eq 1 ] ; then
|
|
sed -i "/^${varName}=/c${varName}=\"${varData}\"" "${hydeConfDir}/hyde.conf"
|
|
else
|
|
echo "${varName}=\"${varData}\"" >> "${hydeConfDir}/hyde.conf"
|
|
fi
|
|
}
|
|
|
|
set_hash()
|
|
{
|
|
local hashImage="${1}"
|
|
"${hashMech}" "${hashImage}" | awk '{print $1}'
|
|
}
|
|
|