#!/bin/bash # omarchy:summary=Toggle nightlight screen temperature # omarchy:args=[--status] # omarchy:examples=omarchy toggle nightlight ON_TEMP=4000 OFF_TEMP=6500 IDENTITY_TEMP=6000 current_temp() { local output output=$(hyprctl hyprsunset temperature 2>/dev/null) || return grep -oE '[0-9]+' <<<"$output" | head -n1 } status_json() { local temp enabled temp=$(current_temp) if [[ -n $temp ]] && (( temp < IDENTITY_TEMP )); then enabled=true else enabled=false fi jq -cn --argjson enabled "$enabled" --arg temp "$temp" \ '{enabled:$enabled, temperature:(($temp | tonumber?) // null)}' } if [[ ${1:-} == "--status" ]]; then status_json exit 0 fi # Ensure hyprsunset is running if ! pgrep -x hyprsunset >/dev/null; then setsid uwsm-app -- hyprsunset & fi # Query the current temperature CURRENT_TEMP=$(current_temp) if [[ -z $CURRENT_TEMP || $CURRENT_TEMP == $OFF_TEMP ]]; then TARGET_TEMP=$ON_TEMP else TARGET_TEMP=$OFF_TEMP fi # A freshly-started hyprsunset applies its default temperature at the end of # its boot, overriding anything set before then — so resend until it sticks for _ in {1..10}; do hyprctl hyprsunset temperature $TARGET_TEMP >/dev/null 2>&1 sleep 0.2 [[ $(current_temp) == "$TARGET_TEMP" ]] && break done omarchy-shell -q nightlight refresh