#!/usr/bin/env bash DEFPATH="$HOME/Pictures/defaultWall" WALLFILE="$HOME/Pictures/wallconfig" BINNAME="setwall" function unsetwalls() { echo unsetting $@ for wall in $@; do sed -i.bak "/$wall/d" $WALLFILE done } function delete() { echo deleting wallfile rm $WALLFILE } function unsetall() { echo clearing wallfile echo -n > $WALLFILE } function setwalls() { for wall in $@; do if grep -q $wall "$WALLFILE"; then echo $wall already set else echo setting $wall echo $wall >> $WALLFILE fi done } function applywall() { echo applying wallpaper $1 feh --bg-fill $1 } function help() { echo "Wallpaper mangement script" echo echo "Syntax: ${BINNAME} OPTIONS" echo "options:" echo " -A, --apply applies a random wallpaper" echo " -S, --set FILES sets new wallpapers" echo " -U, --unset [OPTIONS] [FILES] unsets new wallpapers" echo " -P, --preview FILE temporarily sets a wallpaper" echo " -h, --help this message" echo echo "unset options:" echo " -a, --all clears wallconfig file" echo " -d, --delete deleted wallconfig file" } function unknown() { echo "${BINNAME}: unknown option $1" 1>&2 exit 1 } if [[ $# -eq 0 ]]; then echo "${BINNAME}: no arguments given" 1>&2 help exit 1 fi mode="N" pos="" while [[ $# -gt 0 ]]; do keys="$1" # If $1 does is single - argument if [[ $1 == '-'* ]] && [[ ! $1 == '--'* ]] ; then # Remove first - keys=${keys#?} # Place space between each character keys=$(echo $keys | sed 's/./-& /g') fi for key in $keys; do case $mode in U) case $key in -a|--all) unsetall exit 0 ;; -d|--delete) delete exit 0 ;; '-'*|'--'*) unknown $key ;; *) pos="$pos $key" shift ;; esac ;; S) pos="$pos $key" shift ;; *) case $key in -A|--apply) applywall $(shuf -n 1 $WALLFILE) exit 0 ;; -U|--unset) mode="U" shift ;; -S|--set) mode="S" shift ;; -P|--preview) applywall $2 exit 0 ;; -h|--help) help shift exit 0 ;; *) unknown $key ;; esac ;; esac done done case $mode in U) unsetwalls $pos ;; S) setwalls $pos ;; esac