#!/bin/bash # ~/bin/matugen-random-wall.sh export WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-0}" export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" WALL_DIR="${1:-$HOME/.walls}" IMAGE_EXTS=("jpg" "jpeg" "png" "webp" "gif") # Функция получения случайного изображения get_random_image() { local images=() for ext in "${IMAGE_EXTS[@]}"; do while IFS= read -r -d '' file; do images+=("$file") done < <(find "$WALL_DIR" -type f -iname "*.$ext" -print0 2>/dev/null) done if [[ ${#images[@]} -eq 0 ]]; then echo "Ошибка: изображения не найдены в $WALL_DIR" >&2 return 1 fi echo "${images[RANDOM % ${#images[@]}]}" } # Функция получения безопасного случайного индекса цвета get_random_color_index() { local image="$1" local max_index # Запрашиваем JSON с цветами, извлекаем массив и считаем элементы # 2>/dev/null скрывает лишние логи, оставляем только чистый JSON max_index=$(matugen image "$image" --json hex 2>/dev/null | jq -r '.colors[].source_color' 2>/dev/null | wc -l) # Если jq не сработал или цветов нет — фоллбэк на 1 if [[ -z "$max_index" || "$max_index" -eq 0 ]]; then max_index=1 fi echo $((RANDOM % max_index)) } # Получаем случайное изображение IMAGE=$(get_random_image) || exit 1 echo "→ Выбрано изображение: $IMAGE" # Получаем валидный случайный индекс цвета COLOR_INDEX=$(get_random_color_index "$IMAGE") echo "→ Выбран индекс цвета: $COLOR_INDEX" # Запускаем matugen matugen image $IMAGE \ --source-color-index $COLOR_INDEX \ -m dark \ --verbose notify-send "[INFO]" "wallpapers was changed" -i "$IMAGE"