nix/config/sketchybar/items/menus.lua

72 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 = 'sk-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('sk-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()