#!/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