#!/usr/bin/env ruby # adapted from https://github.com/carnager/rofi-scripts/blob/master/monitor_layout.sh require 'open3' MONITORS = `xrandr`.split("\n").grep(/\Wconnected/) do |line| line.split(' ')[0] end def single_monitor_command(selected) command = "xrandr --output #{selected} --auto " MONITORS.each do |monitor| command += "--output #{monitor} --off" if monitor != selected end command end def single_monitor_commands result = {} MONITORS.each do |monitor| result["Only #{monitor}"] = single_monitor_command(monitor) end result end def dual_monitor_commands result = {} MONITORS.each do |a| MONITORS.each do |b| label = "Dual Screen #{a} -> #{b}" command = "xrandr --output #{a} --auto --output #{b} --auto --left-of #{a}" result[label] = command if a != b end end result end def clone_monitor_commands result = {} MONITORS.each do |a| MONITORS.each do |b| label = "Clone Screen #{a} -> #{b}" command = "xrandr --output #{a} --auto --output #{b} --auto --same-as #{a}" result[label] = command if a != b end end result end def monitor_commands default_commands = { 'Cancel' => nil } [default_commands, single_monitor_commands, dual_monitor_commands, clone_monitor_commands].reduce(:merge) end def pick_command commands = monitor_commands input = commands.keys.join("\n") output, = Open3.capture2('dmenu -l 15 -i', stdin_data: input) commands[output.chomp] end command = pick_command if command system('pkill -x compton') system(command) system('compton') system('wallpaper') end