#!/bin/sh
LIST="$(xrandr | sed '/ connected/!d;s/ .*$//')"
MONITORS="$(printf '%s' "${LIST}" | tr '\n' ' ')"
MIRR="$(printf 'Yes\nNo' | menu "Mirror monitors?:")"

[ "${MIRR}" = "Yes" ] && CMD="$(FIRST=1 ; for i in ${MONITORS} ; do
    CURR="${i}"
    [ -z "${CURR}" ] && exit 0
    [ "${FIRST}" ] && printf 'xrandr --output %s' "${CURR}" && FIRST=
    [ "${LAST}"  ] && printf ' --same-as %s' "${CURR}"
    LAST="${CURR}"
done)"

! [ "${CMD}" ] && CMD="$(FIRST=1 ; for i in ${MONITORS} ; do
    CURR="$(printf '%s' "${LIST}" | sed "/${LAST:=empty}/d" | menu "Next monitor (to right):")"
    [ -z "${CURR}" ] && exit 0
    [ "${FIRST}" ] && printf 'xrandr --output %s' "${CURR}" && FIRST=
    [ "${LAST}"  ] && printf ' --left-of %s' "${CURR}"
    LAST="${CURR}"
done)"

! [ "${MIRR}" = "Yes" ] && for i in ${MONITORS} ; do
    case ${CMD} in
        *${i}*) ;;
        *) UNSET="${UNSET} --output ${i} --off"
    esac
done

CMD="xrandr --auto && ${CMD} ${UNSET}"
[ "${CMD}" ] && eval "${CMD}"
# printf '%s\n' "${CMD}" # DEBUG