#!/bin/sh
set -euC

##/// background 1.0
#////
#//// Set X Window System background image/video.
#////
###// usage:
#////   background [<path>]
#////   background -h|--help
#////   background --version
#////
###// arguments:
####/   <path>
#////     If not a directory, set it as background. If a directory, search
#////     recursively in it (resolving symlinks) and set a random file as
#////     background.
#////     [default: ${XDG_DATA_HOME:-$HOME/.local/share}/backgrounds]

## Messages
prog="$(basename "$0")"
help()    { sed -n 's|^#[#/]*/ \?||p' "$0";                 exit 0; }
version() { help | awk '/^$/{++p;next}p==0';                exit 0; }
usage()   { help | awk '/^$/{++p;next}p==2';                exit 0; }
parse()   { printf '%s: error: %s\n'   "$prog" "$1"; usage; exit 1; } >&2
error()   { printf '%s: error: %s\n'   "$prog" "$1";        exit 1; } >&2
warning() { printf '%s: warning: %s\n' "$prog" "$1";                } >&2
opt()     { [ $# -gt 1 ] || parse "option '$1' value not provided"; }
arg()     { [ $# -gt 1 ] || parse "argument '$1' not provided";     }
argend()  { [ $# -eq 0 ] || parse "argument '$1' not recognized";   }
dep()     { [ "$(command -v "$1")" ] || error "'$1' not available"; }

## Parse special options
case "${1:-}"
in
  '-h'|'--help') help; ;;
  '--version') version; ;;
esac

## Parse optional arguments
path="${XDG_DATA_HOME:-"$HOME/.local/share"}/backgrounds"
[ $# -eq 0 ] || { path="$1"; shift; }

## Parse unrecognized arguments
argend "$@"
