nix/config/old_sketchybar/items/volume.lua

75 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)