#!/bin/bash # omarchy:summary=Cycle to the next background for the current theme # omarchy:examples=omarchy theme bg next THEME_NAME=$(cat "$HOME/.config/omarchy/current/theme.name" 2>/dev/null) THEME_BACKGROUNDS_PATH="$HOME/.config/omarchy/current/theme/backgrounds/" USER_BACKGROUNDS_PATH="$HOME/.config/omarchy/backgrounds/$THEME_NAME/" CURRENT_BACKGROUND_LINK="$HOME/.config/omarchy/current/background" mapfile -d '' -t BACKGROUNDS < <( find -L "$USER_BACKGROUNDS_PATH" "$THEME_BACKGROUNDS_PATH" -maxdepth 1 -type f \ \( -iname '*.jpg' -o -iname '*.jpeg' -o -iname '*.png' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.webp' \) \ -print0 2>/dev/null | sort -z ) TOTAL=${#BACKGROUNDS[@]} if (( TOTAL == 0 )); then omarchy-notification-send "No background was found for theme" -t 2000 else # Get current background from symlink if [[ -L $CURRENT_BACKGROUND_LINK ]]; then CURRENT_BACKGROUND=$(readlink "$CURRENT_BACKGROUND_LINK") else # Default to first background if no symlink exists CURRENT_BACKGROUND="" fi # Find current background index INDEX=-1 for i in "${!BACKGROUNDS[@]}"; do if [[ ${BACKGROUNDS[$i]} == $CURRENT_BACKGROUND ]]; then INDEX=$i break fi done # Get next background (wrap around) if (( INDEX == -1 )); then # Use the first background when no match was found NEW_BACKGROUND="${BACKGROUNDS[0]}" else NEXT_INDEX=$(((INDEX + 1) % TOTAL)) NEW_BACKGROUND="${BACKGROUNDS[$NEXT_INDEX]}" fi omarchy-theme-bg-set "$NEW_BACKGROUND" fi