nix/darwin/sketchybar/config/items/volume.lua
2025-04-07 02:23:57 -05:00

79 lines
1.7 KiB
Lua

local colors = require("colors")
local icons = require("icons")
local volume_slider = sbar.add("slider", 100, {
position = "right",
updates = true,
label = { drawing = false },
icon = { drawing = false },
slider = {
highlight_color = colors.blue,
width = 0,
background = {
height = 6,
corner_radius = 3,
color = colors.bg2,
},
knob= {
string = "􀀁",
drawing = false,
},
},
})
local volume_icon = sbar.add("item", {
position = "right",
icon = {
string = icons.volume._100,
width = 0,
align = "left",
color = colors.grey,
font = {
style = "Regular",
size = 14.0,
},
},
label = {
width = 25,
align = "left",
font = {
style = "Regular",
size = 14.0,
},
},
})
volume_slider:subscribe("mouse.clicked", function(env)
sbar.exec("osascript -e 'set volume output volume " .. env["PERCENTAGE"] .. "'")
end)
volume_slider:subscribe("volume_change", function(env)
local volume = tonumber(env.INFO)
local icon = icons.volume._0
if volume > 60 then
icon = icons.volume._100
elseif volume > 30 then
icon = icons.volume._66
elseif volume > 10 then
icon = icons.volume._33
elseif volume > 0 then
icon = icons.volume._10
end
volume_icon:set({ label = icon })
volume_slider:set({ slider = { percentage = volume } })
end)
local function animate_slider_width(width)
sbar.animate("tanh", 30.0, function()
volume_slider:set({ slider = { width = width }})
end)
end
volume_icon:subscribe("mouse.clicked", function()
if tonumber(volume_slider:query().slider.width) > 0 then
animate_slider_width(0)
else
animate_slider_width(100)
end
end)