57 lines
1.5 KiB
Lua
57 lines
1.5 KiB
Lua
--- Caffeine.lua
|
|
|
|
local obj = {}
|
|
|
|
-- 1. POPUP ON LOAD
|
|
hs.alert.show("Caffeine Loaded", 2)
|
|
|
|
-- 2. Create the menubar item
|
|
-- We use a unique ID just to keep things stable
|
|
obj.menu = hs.menubar.new(true, "CaffeineApp")
|
|
|
|
local on_message = 'Caffeine: ON'
|
|
local off_message = 'Caffeine: OFF'
|
|
local on_icon = "☕️"
|
|
local off_icon = "😴"
|
|
local hyper = {"cmd", "alt", "ctrl"}
|
|
|
|
function obj:init(mod, key, description)
|
|
|
|
local function setCaffeineDisplay(state)
|
|
if state then
|
|
hs.alert.show(on_message)
|
|
if obj.menu then
|
|
obj.menu:setTitle(on_icon)
|
|
-- This ensures the hover text says "Caffeine: ON"
|
|
obj.menu:setTooltip(on_message)
|
|
end
|
|
else
|
|
hs.alert.show(off_message)
|
|
if obj.menu then
|
|
obj.menu:setTitle(off_icon)
|
|
-- This ensures the hover text says "Caffeine: OFF"
|
|
obj.menu:setTooltip(off_message)
|
|
end
|
|
end
|
|
end
|
|
|
|
local function caffeineClicked()
|
|
-- Toggles the system sleep prevention and updates the UI
|
|
setCaffeineDisplay(hs.caffeinate.toggle("displayIdle"))
|
|
end
|
|
|
|
if obj.menu then
|
|
obj.menu:setClickCallback(caffeineClicked)
|
|
-- Set initial state based on current system status
|
|
setCaffeineDisplay(hs.caffeinate.get("displayIdle"))
|
|
end
|
|
|
|
-- Bind the hotkey (Cmd + Alt + Ctrl + C)
|
|
hs.hotkey.bind(mod, key, caffeineClicked)
|
|
end
|
|
|
|
-- Initialize the object
|
|
obj:init(hyper, 'c', "Toggle Caffeine")
|
|
|
|
return obj
|