2022-02-06 00:15:14 -07:00
#!/bin/zsh
2024-02-06 13:08:18 -07:00
#####################################################################
2026-09-03 21:03:02 -06:00
graphics_cards_detected = " $( xrandr | sed -n 's/\(DP-[0-9]-\).*$/\1/p' | sort -u | wc -l) "
case " ${ graphics_cards_detected } " in
( 1 ) # sometimes the graphics card on the motherboard is detected and becomes primary
XRANDR_OUTPUT__splitter = 'HDMI-1-0'
XRANDR_OUTPUT__desk = 'unknown -> probably wont come up but future me needs to put this in manually'
XRANDR_OUTPUT__house = 'DP-1-4'
XRANDR_OUTPUT__zapdos = 'DP-1-0'
XRANDR_OUTPUT__server_rack = 'HDMI2'
;;
( 0 | * ) # default: just the dedicated graphics card detected
XRANDR_OUTPUT__splitter = 'HDMI-0'
XRANDR_OUTPUT__desk = 'DP-2'
XRANDR_OUTPUT__zapdos = 'DP-0'
XRANDR_OUTPUT__server_rack = 'DP-4'
;;
esac
XRANDR_OUTPUTS =()
for XRANDR_OUTPUT in \
splitter \
desk \
zapdos \
server_rack \
;
do
XRANDR_OUTPUT_var = XRANDR_OUTPUT__${ XRANDR_OUTPUT }
XRANDR_OUTPUTS +=( " ${ (P)XRANDR_OUTPUT_var } " )
done
2024-02-06 13:08:18 -07:00
2025-11-27 10:32:10 -07:00
I3_DEFAULT_THEME_BACKGROUND = $( scwrypts -n get theme) .png
2024-02-06 13:08:18 -07:00
2024-06-26 18:42:33 -06:00
MONITOR_CONFIGURATION = unknown
: \
2025-08-09 09:26:07 -06:00
&& xrandr --query | grep -q "^ ${ XRANDR_OUTPUT__splitter } connected" \
2024-06-26 18:42:33 -06:00
&& MONITOR_CONFIGURATION = home \
;
2026-09-03 21:03:02 -06:00
#&& xrandr --query | grep -q "^${XRANDR_OUTPUT__house} connected" \
2024-06-26 18:42:33 -06:00
2025-06-04 11:44:55 -06:00
#####################################################################
case $1 in
( 1080 | 1080p )
XRANDR_MODE =( --mode 1920x1080)
XRANDR_OFFSET_X = 1920
XRANDR_OFFSET_Y = 1080
2025-08-09 09:26:07 -06:00
EXTRA_ARGS__splitter =()
EXTRA_ARGS__desk =()
2026-09-03 21:03:02 -06:00
EXTRA_ARGS__house =()
EXTRA_ARGS__zapdos =()
2025-06-04 11:44:55 -06:00
I3_BACKGROUND = link-vs-gdizz.jpg
;;
2026-09-03 21:03:02 -06:00
( 1440 | 1440p | 2k | guild-wars-2 )
2025-06-04 11:44:55 -06:00
XRANDR_MODE =( --mode 2560x1440)
XRANDR_OFFSET_X = 2560
XRANDR_OFFSET_Y = 1440
2026-09-03 21:03:02 -06:00
EXTRA_ARGS__splitter =()
EXTRA_ARGS__desk =()
EXTRA_ARGS__zapdos =( --rate 120.00)
2025-06-04 11:44:55 -06:00
I3_BACKGROUND = roy-art.jpg
;;
( 2160 | 2160p | 4k | '' ) # default for the RTX5080
XRANDR_MODE =( --mode 3840x2160)
XRANDR_OFFSET_X = 3840
XRANDR_OFFSET_Y = 2160
2026-09-03 21:03:02 -06:00
EXTRA_ARGS__splitter =( --rate 119.88)
EXTRA_ARGS__desk =( --rate 119.88) # make it match
EXTRA_ARGS__house =()
#EXTRA_ARGS__zapdos=(--rate 143.99) # I thought this was a bad cable... apparently this is a MANUFACTURERS error -> they messed up the OS software and I'm big mad at LG
2025-06-04 11:44:55 -06:00
I3_BACKGROUND = ${ I3_DEFAULT_THEME_BACKGROUND [@] }
;;
2026-09-03 21:03:02 -06:00
( max ) # use only for desk gaming
XRANDR_MODE =( --mode 3840x2160)
XRANDR_OFFSET_X = 3840
XRANDR_OFFSET_Y = 2160
EXTRA_ARGS__desk =( --rate 239.99)
;;
2025-06-04 11:44:55 -06:00
( * )
echo "error : unknown resolution ' $1 '"
exit 1
;;
esac
2025-08-09 09:26:07 -06:00
XRANDR_ARGS__splitter =( --output ${ XRANDR_OUTPUT__splitter [@] } ${ XRANDR_MODE [@] } ${ EXTRA_ARGS__splitter [@] } )
2026-09-03 21:03:02 -06:00
XRANDR_ARGS__desk =( --output ${ XRANDR_OUTPUT__desk [@] } ${ XRANDR_MODE [@] } ${ EXTRA_ARGS__desk } )
XRANDR_ARGS__house =( --output ${ XRANDR_OUTPUT__house [@] } ${ XRANDR_MODE [@] } ${ EXTRA_ARGS__house [@] } )
XRANDR_ARGS__zapdos =( --output ${ XRANDR_OUTPUT__zapdos [@] } ${ XRANDR_MODE [@] } ${ EXTRA_ARGS__zapdos [@] } )
2025-06-04 11:44:55 -06:00
##########################################
source ${ HOME } /.config/wryn/env.zsh
export DISPLAY = :0
2024-06-26 18:42:33 -06:00
###############################################################################
2024-02-06 13:08:18 -07:00
XRANDR_SET() {
local ERRORS = 0
local COMPOSITING = enable
local SCREEN_BLANK = enable
2025-06-04 11:44:55 -06:00
local BACKGROUND = ${ I3_BACKGROUND }
2024-02-06 13:08:18 -07:00
local SOUND_EFFECT = login
local XRANDR_ARGS =()
2026-09-03 21:03:02 -06:00
local enable_server_rack = false
2024-02-06 13:08:18 -07:00
while [[ $# -gt 0 ]]
do
case $1 in
2025-06-04 11:44:55 -06:00
( --compositing ) COMPOSITING = " $2 " ; shift 1 ;;
( --screen-blank ) SCREEN_BLANK = " $2 " ; shift 1 ;;
( --background ) BACKGROUND = " $2 " ; shift 1 ;;
( --sound-effect ) SOUND_EFFECT = " $2 " ; shift 1 ;;
2024-02-06 13:08:18 -07:00
2026-09-03 21:03:02 -06:00
( --server-rack ) enabled_server_rack = true ;;
2025-06-04 11:44:55 -06:00
( * ) XRANDR_ARGS +=( $1 ) ;
2024-02-06 13:08:18 -07:00
esac
shift 1
done
2026-09-03 21:03:02 -06:00
local xrandr_output xrandr_output_should_turn_off
for xrandr_output in " ${ XRANDR_OUTPUTS [@] } "
do
[[ " ${ XRANDR_ARGS [(re) ${ xrandr_output } ] } " == " ${ xrandr_output } " ]] \
&& xrandr_output_should_turn_off = false \
|| xrandr_output_should_turn_off = true \
;
[[ " ${ xrandr_output_should_turn_off } " == true ]] \
&& XRANDR_ARGS +=( --output " ${ xrandr_output } " --off)
done
if [[ " ${ XRANDR_OUTPUT__server_rack } " ]]
then
case " ${ enable_server_rack } " in
( true ) XRANDR_ARGS +=( --output " ${ XRANDR_OUTPUT__server_rack } " --auto) ;;
( false ) XRANDR_ARGS +=( --output " ${ XRANDR_OUTPUT__server_rack } " --off) ;;
esac
fi
case " ${ COMPOSITING } " in
2025-06-04 11:44:55 -06:00
( enable ) ( pkill compton; sleep 1; compton; ) & ;;
( disable ) pkill compton ;;
2026-09-03 21:03:02 -06:00
( * )
2025-06-04 11:44:55 -06:00
echo "ERROR : invalid setting ' ${ COMPOSITING } ' for compositing" >& 2
2024-02-06 13:08:18 -07:00
return 1
esac
2026-09-03 21:03:02 -06:00
case " ${ SCREEN_BLANK } " in
( enable | disable ) ;;
( * )
2025-06-04 11:44:55 -06:00
echo "ERROR : invalid setting ' ${ SCREEN_BLANK } ' for screen blank" >& 2
2024-02-06 13:08:18 -07:00
return 1
esac
##########################################
2024-07-30 21:07:43 -06:00
# disabling for a moment since the latest X11/NVIDIA drivers are causing some issues after "disconnect all"
#scwrypts desktop xrandr disconnect all
2024-02-06 13:08:18 -07:00
xrandr ${ XRANDR_ARGS [@] }
sleep 1
2025-06-04 11:44:55 -06:00
scwrypts desktop screen blank -- ${ SCREEN_BLANK }
scwrypts desktop i3 set background -- ${ BACKGROUND } || scwrypts desktop i3 set background -- purple.jpg
" ${ DOTWRYN } /bin/polybar"
2025-08-09 09:26:07 -06:00
scwrypts media play sfx -- ${ SOUND_EFFECT }
2024-02-06 13:08:18 -07:00
}