Skip to content

Instantly share code, notes, and snippets.

@jens-ox
Created October 14, 2017 09:28
Show Gist options
  • Save jens-ox/bc2d4f76406c291b826d2ff012124760 to your computer and use it in GitHub Desktop.
Save jens-ox/bc2d4f76406c291b826d2ff012124760 to your computer and use it in GitHub Desktop.
Switch layout through rofi
#!/bin/bash
XRANDR=$(which xrandr)
MONITORS=( $( ${XRANDR} | awk '( $2 == "connected" ){ print $1 }' ) )
NUM_MONITORS=${#MONITORS[@]}
TITLES=()
COMMANDS=()
function gen_xrandr_only()
{
selected=$1
cmd="xrandr --output ${MONITORS[$selected]} --auto "
for entry in $(seq 0 $((${NUM_MONITORS}-1)))
do
if [ $selected != $entry ]
then
cmd="$cmd --output ${MONITORS[$entry]} --off"
fi
done
echo $cmd
}
declare -i index=0
TILES[$index]="Cancel"
COMMANDS[$index]="true"
index+=1
for entry in $(seq 0 $((${NUM_MONITORS}-1)))
do
TILES[$index]="Only ${MONITORS[$entry]}"
COMMANDS[$index]=$(gen_xrandr_only $entry)
index+=1
done
##
# Dual screen options
##
for entry_a in $(seq 0 $((${NUM_MONITORS}-1)))
do
for entry_b in $(seq 0 $((${NUM_MONITORS}-1)))
do
if [ $entry_a != $entry_b ]
then
TILES[$index]="Dual Screen ${MONITORS[$entry_a]} -> ${MONITORS[$entry_b]}"
COMMANDS[$index]="xrandr --output ${MONITORS[$entry_a]} --auto \
--output ${MONITORS[$entry_b]} --auto --left-of ${MONITORS[$entry_a]}"
index+=1
fi
done
done
##
# Clone monitors
##
for entry_a in $(seq 0 $((${NUM_MONITORS}-1)))
do
for entry_b in $(seq 0 $((${NUM_MONITORS}-1)))
do
if [ $entry_a != $entry_b ]
then
TILES[$index]="Clone Screen ${MONITORS[$entry_a]} -> ${MONITORS[$entry_b]}"
COMMANDS[$index]="xrandr --output ${MONITORS[$entry_a]} --auto \
--output ${MONITORS[$entry_b]} --auto --same-as ${MONITORS[$entry_a]}"
index+=1
fi
done
done
##
# Generate entries, where first is key.
##
function gen_entries()
{
for a in $(seq 0 $(( ${#TILES[@]} -1 )))
do
echo $a ${TILES[a]}
done
}
# Call menu
SEL=$( gen_entries | rofi -dmenu -p "Monitor Setup:" | awk '{print $1}' )
# Call xrandr
$( ${COMMANDS[$SEL]} )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment