# shellcheck shell=bash wallpaper="" color="" mode="" flavor="" contrast="" set_wallpaper() { if [[ -f "$1" ]]; then wallpaper="$(realpath "$1")" else echo "Invalid wallpaper path: $1" exit 1 fi } set_color() { local re='^#([A-Fa-f0-9]{6})$' if [[ "$1" =~ $re ]]; then color="$1" else echo "Invalid color format: $1" exit 1 fi } set_flavor() { case "$1" in content|expressive|fidelity|fruit-salad|monochrome|neutral|rainbow|tonal-spot) flavor="$1" ;; *) echo "Invalid flavor: $1" exit 1 ;; esac } set_contrast() { if [[ "$1" =~ ^-?[0-1](\.[0-9]+)?$ ]]; then contrast="$1" else echo "Invalid contrast value: $1" exit 1 fi } toggle_mode() { if [[ "$(cat "$CONFIG"/mode)" = "light" ]]; then mode="dark" else mode="light" fi } usage() { echo "Usage: $0 [-m {light|dark|toggle}] [-w ] [-h ] [-f ] [-c ]" echo " Only one of -w (wallpaper) or -h (hex color) can be used." echo " Valid flavors: content, expressive, fidelity, fruit-salad, monochrome, neutral, rainbow, tonal-spot" echo " Contrast must be a number between -1 and 1" exit 1 } finish() { [[ -n "$wallpaper" ]] && rm -f "$CONFIG"/wallpaper && ln -sf "$wallpaper" "$CONFIG"/wallpaper [[ -n "$color" ]] && rm -f "$CONFIG"/wallpaper && magick -size 1x1 xc:"$color" png:"$CONFIG"/wallpaper [[ -n "$mode" ]] && echo "$mode" > "$CONFIG"/mode [[ -n "$flavor" ]] && echo "$flavor" > "$CONFIG"/flavor [[ -n "$contrast" ]] && echo "$contrast" > "$CONFIG"/contrast "$INIT" > /dev/null "$RELOAD" > /dev/null } # Parse arguments while getopts "m:w:h:f:c:" opt; do case "$opt" in m) case "$OPTARG" in light|dark) mode="$OPTARG" ;; toggle) toggle_mode ;; *) usage ;; esac ;; w) [[ -n "$color" ]] && usage set_wallpaper "$OPTARG" ;; h) [[ -n "$wallpaper" ]] && usage set_color "$OPTARG" ;; f) set_flavor "$OPTARG" ;; c) set_contrast "$OPTARG" ;; *) usage ;; esac done finish