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)