Files
mac-dots/sketchybar/items/menus.lua
xenomxrph 8d16baf6f1 initalize
2025-07-16 15:00:51 +02:00

75 lines
1.8 KiB
Lua

local constants = require("constants")
local settings = require("config.settings")
local maxItems <const> = 15
local menuItems = {}
local isShowingMenu = false
local frontAppWatcher = sbar.add("item", {
drawing = false,
updates = true,
})
local swapWatcher = sbar.add("item", {
drawing = false,
updates = true,
})
local function createPlaceholders()
for index = 1, maxItems, 1 do
local menu = sbar.add("item", constants.items.MENU .. "." .. index, {
drawing = false,
icon = { drawing = false },
width = "dynamic",
label = {
font = {
style = index == 1 and settings.fonts.styles.bold or settings.fonts.styles.regular,
},
},
click_script = "$CONFIG_DIR/bridge/menus/bin/menus -s " .. index,
})
menuItems[index] = menu
end
sbar.add("bracket", { "/" .. constants.items.MENU .. "\\..*/" }, {
background = {
color = settings.colors.bg1,
padding_left = settings.dimens.padding.item,
padding_right = settings.dimens.padding.item,
},
})
end
local function updateMenus()
sbar.set("/" .. constants.items.MENU .. "\\..*/", { drawing = false })
sbar.exec("$CONFIG_DIR/bridge/menus/bin/menus -l", function(menus)
local index = 1
for menu in string.gmatch(menus, '[^\r\n]+') do
if index < maxItems then
menuItems[index]:set(
{
width = "dynamic",
label = menu,
drawing = isShowingMenu
}
)
else
break
end
index = index + 1
end
end)
sbar.set(constants.items.MENU .. ".padding", { drawing = isShowingMenu })
end
frontAppWatcher:subscribe(constants.events.FRONT_APP_SWITCHED, updateMenus)
swapWatcher:subscribe(constants.events.SWAP_MENU_AND_SPACES, function(env)
isShowingMenu = env.isShowingMenu == "on"
updateMenus()
end)
createPlaceholders()