Last active
May 1, 2025 10:14
-
-
Save mbierman/30d19343d5533f660bd143d7aee17213 to your computer and use it in GitHub Desktop.
a macOS shutdown script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
shutdown_now () { | |
logger "UPS Script: Sending IFTTT power_off event." | |
if ! curl -s -X POST https://maker.ifttt.com/trigger/...; then | |
logger "UPS Script: IFTTT notification failed." | |
fi | |
sleep 4 | |
logger "UPS Script: Initiating shutdown." | |
if ! /sbin/shutdown -h +0; then | |
logger "UPS Script: Shutdown command failed." | |
exit 1 | |
fi | |
} | |
pause_nut () { | |
logger "UPS Script: Stopping NUT (via Homebrew)." | |
if ! brew services stop nut; then | |
logger "UPS Script: Failed to stop NUT service." | |
fi | |
} | |
resume_nut () { | |
logger "UPS Script: Starting NUT (via Homebrew)." | |
if ! brew services start nut; then | |
logger "UPS Script: Failed to start NUT service." | |
fi | |
} | |
# Show dialog with 20-second timeout | |
response=$(osascript <<'EOF' | |
try | |
with timeout of 20 seconds | |
display dialog "UPS: Power failure detected. Shut down?" buttons {"Cancel", "O.K."} default button "O.K." with icon caution | |
return button returned of result | |
end timeout | |
on error errMsg number errNum | |
if errNum = -128 then | |
return "Cancel" | |
else | |
return "Timeout" | |
end if | |
end try | |
EOF | |
) | |
logger "UPS Script: Dialog returned: '$response'" | |
# Handle result | |
case "$response" in | |
"O.K.") | |
logger "UPS Script: User confirmed shutdown." | |
shutdown_now | |
;; | |
"Cancel") | |
logger "UPS Script: Shutdown canceled by user." | |
exit 0 | |
;; | |
"Timeout") | |
logger "UPS Script: No user response. Proceeding with shutdown." | |
shutdown_now | |
;; | |
*) | |
logger "UPS Script: Unexpected response. Canceling shutdown for safety." | |
exit 0 | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment