26 lines
716 B
Bash
Executable File
26 lines
716 B
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
INTERNAL="eDP1"
|
|
|
|
has_external() {
|
|
# Any monitor name that is not INTERNAL counts as external
|
|
hyprctl monitors -j | grep -q '"name"' && ! hyprctl monitors -j | grep -q "\"name\":\"$INTERNAL\"\""
|
|
}
|
|
|
|
has_external_robust() {
|
|
# robust without jq: count monitor names; if there's >1 OR there's a name not INTERNAL
|
|
local names
|
|
names="$(hyprctl monitors -j | sed -n 's/.*"name":"\([^"]*\)".*/\1/p')"
|
|
# if any name != INTERNAL then external
|
|
echo "$names" | grep -vx "$INTERNAL" >/dev/null 2>&1
|
|
}
|
|
|
|
if has_external_robust; then
|
|
# Clamshell: disable laptop panel, no lock
|
|
hyprctl keyword monitor "${INTERNAL},disable"
|
|
else
|
|
# Laptop only: suspend
|
|
systemctl suspend
|
|
fi
|