146 lines
3.4 KiB
Bash
Executable File
146 lines
3.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
notify() {
|
|
notify-send " Display" "$1"
|
|
}
|
|
|
|
wofi_pick() {
|
|
wofi --dmenu --prompt "$1" --insensitive
|
|
}
|
|
|
|
connected_monitors() {
|
|
hyprctl monitors all 2>/dev/null | awk '
|
|
/^Monitor / {
|
|
name=$2
|
|
disabled=0
|
|
}
|
|
/disabled: true/ {
|
|
disabled=1
|
|
}
|
|
/^$/ && name != "" {
|
|
if (!disabled) print name
|
|
name=""
|
|
}
|
|
END {
|
|
if (name != "" && !disabled) print name
|
|
}
|
|
'
|
|
}
|
|
|
|
all_monitors() {
|
|
hyprctl monitors all 2>/dev/null | awk '/^Monitor / {print $2}'
|
|
}
|
|
|
|
first_monitor() {
|
|
connected_monitors | head -n 1
|
|
}
|
|
|
|
second_monitor() {
|
|
connected_monitors | sed -n '2p'
|
|
}
|
|
|
|
show_status() {
|
|
hyprctl monitors all | wofi --dmenu --prompt " Displaystatus"
|
|
}
|
|
|
|
choose_monitor() {
|
|
local monitors
|
|
monitors="$(all_monitors)"
|
|
|
|
if [ -z "$monitors" ]; then
|
|
notify "Keine Monitore ueber hyprctl gefunden."
|
|
exit 0
|
|
fi
|
|
|
|
printf '%s\n' "$monitors" | awk '{print " " $0}' | wofi_pick "$1"
|
|
}
|
|
|
|
disable_monitor() {
|
|
local selection monitor
|
|
selection="$(choose_monitor " Monitor deaktivieren")"
|
|
[ -n "$selection" ] || exit 0
|
|
monitor="${selection#* }"
|
|
hyprctl keyword monitor "$monitor,disable" && notify "$monitor deaktiviert."
|
|
}
|
|
|
|
enable_preferred() {
|
|
local selection monitor
|
|
selection="$(choose_monitor " Monitor aktivieren")"
|
|
[ -n "$selection" ] || exit 0
|
|
monitor="${selection#* }"
|
|
hyprctl keyword monitor "$monitor,preferred,auto,1" && notify "$monitor aktiviert."
|
|
}
|
|
|
|
extend_right() {
|
|
local primary secondary
|
|
primary="$(first_monitor)"
|
|
secondary="$(second_monitor)"
|
|
|
|
if [ -z "$primary" ] || [ -z "$secondary" ]; then
|
|
notify "Dafuer muessen mindestens zwei aktive Monitore vorhanden sein."
|
|
exit 0
|
|
fi
|
|
|
|
hyprctl keyword monitor "$primary,preferred,0x0,1"
|
|
hyprctl keyword monitor "$secondary,preferred,auto-right,1"
|
|
notify "Displays erweitert."
|
|
}
|
|
|
|
mirror_displays() {
|
|
local primary secondary
|
|
primary="$(first_monitor)"
|
|
secondary="$(second_monitor)"
|
|
|
|
if [ -z "$primary" ] || [ -z "$secondary" ]; then
|
|
notify "Dafuer muessen mindestens zwei aktive Monitore vorhanden sein."
|
|
exit 0
|
|
fi
|
|
|
|
hyprctl keyword monitor "$primary,preferred,0x0,1"
|
|
hyprctl keyword monitor "$secondary,preferred,0x0,1,mirror,$primary"
|
|
notify "Displays gespiegelt."
|
|
}
|
|
|
|
choice="$(
|
|
printf '%s\n' \
|
|
" Status anzeigen" \
|
|
" Display-Konfig neu laden" \
|
|
" Monitor aktivieren" \
|
|
" Monitor deaktivieren" \
|
|
" Displays erweitern" \
|
|
" Displays spiegeln" \
|
|
" Grafisches Display-Tool" |
|
|
wofi_pick " Display"
|
|
)"
|
|
|
|
case "$choice" in
|
|
*"Status anzeigen"*)
|
|
show_status
|
|
;;
|
|
*"Display-Konfig neu laden"*)
|
|
hyprctl reload
|
|
;;
|
|
*"Monitor aktivieren"*)
|
|
enable_preferred
|
|
;;
|
|
*"Monitor deaktivieren"*)
|
|
disable_monitor
|
|
;;
|
|
*"Displays erweitern"*)
|
|
extend_right
|
|
;;
|
|
*"Displays spiegeln"*)
|
|
mirror_displays
|
|
;;
|
|
*"Grafisches Display-Tool"*)
|
|
if command -v nwg-displays >/dev/null 2>&1; then
|
|
nwg-displays
|
|
elif command -v wdisplays >/dev/null 2>&1; then
|
|
wdisplays
|
|
else
|
|
notify "Installiere nwg-displays oder wdisplays fuer ein grafisches Display-Tool."
|
|
fi
|
|
;;
|
|
esac
|