You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							100 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
	
	
							100 lines
						
					
					
						
							1.7 KiB
						
					
					
				#!/bin/sh | 
						|
 | 
						|
help() { | 
						|
	B=$(tput bold) | 
						|
	U=$(tput smul) | 
						|
	N=$(tput sgr0) | 
						|
 | 
						|
	cat << EOF | 
						|
${B}NAME${N} | 
						|
	monctl - monitor manager | 
						|
 | 
						|
${B}SYNOPSIS${N} | 
						|
	${B}monctl${N} [${U}OPTION${N}] [${U}ARG(S)${N}] | 
						|
 | 
						|
${B}OPTIONS${N} | 
						|
	${B}a*${N} ${U}width${N} ${U}height${N} ${U}hertz${N} ${U}name${N} | 
						|
		Setup single monitor with new mode. | 
						|
 | 
						|
	${B}p*${N} ${U}name${N} ${U}mode${N} | 
						|
		Setup single primary monitor. | 
						|
 | 
						|
${B}ARGS${N} | 
						|
	width | 
						|
		Pixel width of the monitor. | 
						|
 | 
						|
	height | 
						|
		Pixel height of the monitor. | 
						|
 | 
						|
	hertz | 
						|
		Refresh rate of the monitor. | 
						|
 | 
						|
	name | 
						|
		Xrandr name of the monitor. | 
						|
EOF | 
						|
} | 
						|
 | 
						|
# Exit if no option is provided | 
						|
[ "$#" -eq 0 ] && help && exit 1 | 
						|
 | 
						|
# Set required X variables | 
						|
export DISPLAY=:0 | 
						|
export XAUTHORITY="$XDG_DATA_HOME/xorg/Xauthority" | 
						|
 | 
						|
update() { | 
						|
	sleep 4 | 
						|
 | 
						|
	# Reconfigure desktops | 
						|
	"$HOME/.local/bin/wm/desktops.sh" | 
						|
	sleep 1 | 
						|
 | 
						|
	# Restart panel | 
						|
	"$HOME/.local/bin/panel/polybar.sh" & | 
						|
 | 
						|
	# Reload wallpaper | 
						|
	"$HOME/.local/bin/wm/wallpaper.sh" & | 
						|
} | 
						|
 | 
						|
auto() { | 
						|
	[ "$#" != "4" ] && return 1 | 
						|
 | 
						|
	# Add mode to primary monitor | 
						|
	OUTPUT="$(xrandr -q)" | 
						|
	if ! echo "$OUTPUT" | grep -Fq "$1x$2_$3.00"; then | 
						|
		eval xrandr --newmode $(cvt "$1" "$2" "$3" | awk '/Modeline/{ $1=""; print $0 }') | 
						|
		xrandr --addmode "$4" "$1x$2_$3.00" | 
						|
	fi | 
						|
 | 
						|
	primary "$4" "--mode $1x$2_$3.00" | 
						|
} | 
						|
 | 
						|
primary() { | 
						|
	[ "$#" != "1" ] && [ "$#" != "2" ] && return 1 | 
						|
	MODE=${2:-"--auto"} | 
						|
 | 
						|
	# Get all connected monitors | 
						|
	CONNECTED="$(xrandr -q | awk '/ connected/{ print $1 }')" | 
						|
 | 
						|
	# Disable all other monitors | 
						|
	eval xrandr --output "$1" "$MODE" --primary \ | 
						|
		"$(echo "$CONNECTED" | grep -vx "$1" | awk '{ print "--output", $1, "--off" }' | tr '\n' ' ')" | 
						|
 | 
						|
	# Post monitor change | 
						|
	update | 
						|
} | 
						|
 | 
						|
[ $OPTIND -ge 2 ] && shift $((OPTIND - 2)) | 
						|
case "$1" in | 
						|
	a*) | 
						|
		shift 1 | 
						|
		auto "$@" | 
						|
		;; | 
						|
	p*) | 
						|
		shift 1 | 
						|
		primary "$@" | 
						|
		;; | 
						|
	*) | 
						|
		help | 
						|
		exit 1 | 
						|
		;; | 
						|
esac
 | 
						|
 |