#!/usr/bin/env bash
_scriptname="gpd-screen-watcher"
set -u
set -e


# where's the screen state?
state="/proc/acpi/button/lid/LID0/state"


# how to print stuff
println() { printf '%s\n' "${_scriptname}: $*"; }


# how to sleep without a subprocess
snore()
{
    local IFS
	[[ -n "${_snore_fd:-}" ]] || exec {_snore_fd}<> <(:)
	read ${1:+-t "$1"} -u $_snore_fd || :
}


# do we have a display?
if [[ -z "${DISPLAY:-}" ]]; then
	println '$DISPLAY is not set!' >&2
	exit 1
fi


# loop!
while snore 1; do
	lid=$(<"$state")
	if [[ "$lid" != "${last:-}" ]] || ((SECONDS % 10 == 0)); then
		last=$lid
		case "${lid##* }" in
			open)
				xset dpms force on
			;;
			closed)
				xset dpms force off
			;;
			*) println "Unrecognized lid state: $lid" ;;
		esac
	fi
done
