Skip to content

Instantly share code, notes, and snippets.

@matejc
Last active March 3, 2019 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matejc/560c251b3e27ad1c221d0f91c85340a5 to your computer and use it in GitHub Desktop.
Save matejc/560c251b3e27ad1c221d0f91c85340a5 to your computer and use it in GitHub Desktop.
rofi interface for xrandr
#!/usr/bin/env bash
set -e
state="$(xrandr)";
outputs="$(awk '{if ($2 == "connected") print $1}' <<< "$state")"
function getModes() {
awk -v output=$1 '{if ($1 == output) {getline; while ($0 ~ /^\ \ /) {print $1; getline;}}}' <<< "$state"
}
function getMode() {
echo "$((echo auto; getModes "$1";) | rofi -dmenu -p "Select mode for $1 output")"
}
function getPosition() {
output="$1"
relationTo="$2"
echo "$((echo -e "$output same-as $relationTo\n$output left-of $relationTo\n$output right-of $relationTo\n$output above $relationTo\n$output below $relationTo";) | rofi -dmenu -p "Select $output output relation to $relationTo output")"
}
function permutations() {
python -c "import sys, itertools; a=sys.argv[1:]; print('\n'.join('\n'.join(' '.join(str(i) for i in c) for c in itertools.permutations(a, i)) for i in range(1, len(a)+1)))" "$@";
}
entries="$(permutations $outputs | rofi -dmenu -p "Select output combination (first one is primary)" | tr ' ' '\n')"
flags=""
primary="$(head -n 1 <<< "$entries")"
if [[ -z "$entries" ]]
then
echo "No Selection" >&2
exit 1
fi
for output in $outputs
do
if echo "$entries" | grep -Eq "^${output}$"
then
mode="$(getMode $output)"
if [ "$mode" == "auto" ] || [ -z "$mode" ]
then
modeFlag="--auto"
else
modeFlag="--mode $mode"
fi
if [ "$primary" == "$output" ]
then
flags="$flags --output $output --primary $modeFlag"
else
positionFlag="$(getPosition $output $primary | awk '{printf "--"$2" "$3}')"
flags="$flags --output $output $modeFlag $positionFlag"
fi
else
flags="$flags --output $output --off"
fi
done
xrandr $flags
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment