MacOS Power Management with Hammerspoon

Prevent your machine from sleeping using Hammerspoon, Caffeine and a Streamdeck

I’ve been using caffeine to prevent my machine from sleeping for as long as I can remember, but whilst setting up a new machine I realised that I didn’t have it installed and wondered if I could replicate the functionality using Hammerspoon.

It turns out that you can! Hammerspoon has a caffeinate module for changing power management settings. You can use the module to lock the screen, start the screensaver and a whole set of other power related actions. To control the machine sleeping automatically, we use the set method which expects three parameters: sleepType, aValue (boolean, should the type of sleep be prevented) and acAndBattery (boolean, should this be applied on battery power too).

I want it to apply on AC and on battery, so I always set the third parameter to true.

Here’s the code from my init.lua file:

hs.hotkey.bind({"cmd", "alt", "ctrl", "shift"}, "I", function()
  hs.caffeinate.set("displayIdle", true, true)
  hs.caffeinate.set("systemIdle", true, true)
  hs.caffeinate.set("system", true, true)"Preventing Sleep")

hs.hotkey.bind({"cmd", "alt", "ctrl", "shift"}, "O", function()
  hs.caffeinate.set("displayIdle", false, true)
  hs.caffeinate.set("systemIdle", false, true)
  hs.caffeinate.set("system", false, true)"Allowing Sleep")

To prevent sleeping I press cmd+alt+ctrl+shift+I and to enable it I press cmd+alt+ctrl+shift+O. I chose I and O as they’re the standard power management symbols.

Using a Streamdeck

You may have noticed that cmd+alt+ctrl+shift+I isn’t particularly easy to press. That’s because I don’t actually use that shortcut myself, but instead use a streamdeck button to run that hotkey.

Streamdeck Hotkey Example

This provides a nice visual indicator if I have disabled my machine from sleeping and means that I don’t accidentally press the key combination.

June 03, 2020