#!/bin/bash # menu similar to the super + p menu on windows # used to quickly change settings when docking a laptop mainmenu() { echo '>>h PROJECT   Extend   PC screen only   Second screen only  Duplicate :g Set default action :r Close menu' | instantmenu -l 20 -h -1 -c -w -1 -bw 4 -q search } defaultmenu() { echo '>>h Default projection settings   Extend   PC screen only   Second screen only  Duplicate :b Ask :r None :b Back' | instantmenu -l 20 -h -1 -c -w -1 -bw 4 -q search } restartdunst() { sleep 1 if pgrep dunst then echo "restarting dunst" pkill dunst sleep 1 dunst & fi } setdefault() { DEFAULTLOOPING="true" while [ -n "$DEFAULTLOOPING" ]; do DEFAULTCHOICE="$(defaultmenu)" if [ -z "$DEFAULTCHOICE" ]; then continue else unset DEFAULTLOOPING fi case "$DEFAULTCHOICE" in "*Second screen only") iconf automon S ;; *Extend) iconf automon e ;; "*PC screen only") iconf automon s ;; *Duplicate) iconf automon c ;; *None) iconf automon n ;; *Ask) iconf -d automon ;; *) # Back instantdisper & exit ;; esac done } # apply saved setting applydefault() { if ! iconf automon; then echo "no default monitor setting" fi AUTOMON="$(iconf automon)" if grep '^[esSc]$' <<<"$AUTOMON"; then disper -"$AUTOMON" restartdunst & else echo "none" fi } if [ -n "$1" ]; then case "$1" in apply) if iconf automon; then applydefault exit fi ;; setdefault) setdefault applydefault exit ;; settings) echo "starting instantdisper" ;; esac fi LOOPING="true" while [ -n "$LOOPING" ]; do CHOICE="$(mainmenu)" unset LOOPING case "$CHOICE" in *Extend) echo "extend" disper -e restartdunst & ;; *only) if grep -q 'PC' <<<"$CHOICE"; then echo "setting display to primary monitor" disper -s else echo "setting display to secondary monitor" disper -S fi restartdunst & ;; *Duplicate) echo "duplicating monitors" disper -c restartdunst & ;; *action) echo "setting default action" setdefault applydefault ;; *menu) exit ;; *) echo "choice $CHOICE" LOOPING="true" ;; esac done