84 lines
2 KiB
Bash
Executable file
84 lines
2 KiB
Bash
Executable file
is_integer() {
|
|
local input=$1
|
|
[[ $input =~ ^-?[0-9]+$ ]]
|
|
}
|
|
|
|
wallpaper_history_path="$HOME/.wallpaper_history"
|
|
|
|
function set_wallpaper() {
|
|
local wallpaper_path="$1"
|
|
local history_size="$2"
|
|
local monitor="DP-1"
|
|
|
|
hyprctl hyprpaper wallpaper "$monitor, $wallpaper_path"
|
|
|
|
if [ $history_size -le 1 ]; then
|
|
echo "Won't set wallpaper, history size is less than or equal to 1"
|
|
return
|
|
fi
|
|
|
|
local -a wallpapers
|
|
if [ -f "$wallpaper_history_path" ]; then
|
|
mapfile -t wallpapers < "$wallpaper_history_path"
|
|
fi
|
|
|
|
wallpapers+=("$wallpaper_path")
|
|
if [ ${#wallpapers[@]} -gt $history_size ]; then
|
|
wallpapers=("${wallpapers[@]: -$history_size}")
|
|
fi
|
|
|
|
printf "%s\n" "${wallpapers[@]}" > "$wallpaper_history_path"
|
|
}
|
|
|
|
wallpaper_dir="$HOME/dev/git/.dotfiles/wallpapers/catppuccin"
|
|
files=($wallpaper_dir/*)
|
|
|
|
history_size=1
|
|
if [ $# -eq 1 ]; then
|
|
if is_integer "$1"; then
|
|
history_size=$1
|
|
if [ $history_size -lt 1 ]; then
|
|
echo "History size must be greater than 0"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ${#files[@]} -le $history_size ]; then
|
|
echo "Number of wallpapers is less than or equal to the history size"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Invalid argument: $1"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ ${#files[@]} -eq 1 ]; then
|
|
set_wallpaper "${files[0]}" 0
|
|
exit 0
|
|
fi
|
|
|
|
if [ -f "$wallpaper_history_path" ]; then
|
|
mapfile -t history < "$wallpaper_history_path"
|
|
|
|
for hist_wallpaper in "${history[@]}"; do
|
|
for i in "${!files[@]}"; do
|
|
if [[ "${files[$i]}" == "$hist_wallpaper" ]]; then
|
|
unset 'files[i]'
|
|
fi
|
|
done
|
|
echo "Removing $hist_wallpaper"
|
|
done
|
|
|
|
# Re-create the files array to eliminate gaps
|
|
files=("${files[@]}")
|
|
fi
|
|
|
|
array_length=${#files[@]}
|
|
if [ $array_length -eq 0 ]; then
|
|
echo "No wallpapers available after filtering."
|
|
exit 1
|
|
fi
|
|
|
|
array_length=${#files[@]}
|
|
index=$(($RANDOM % $array_length))
|
|
set_wallpaper "${files[$index]}" $history_size
|