This repository has been archived on 2024-09-01. You can view files and clone it, but cannot push or open issues or pull requests.
al-skel/awesome-home/.config/awesome/archlabs-extras/volume_bar.lua
2019-08-25 10:48:40 -07:00

73 lines
2.1 KiB
Lua

local awful = require("awful")
local gears = require("gears")
local wibox = require("wibox")
local beautiful = require("beautiful")
local xresources = require("beautiful.xresources")
local dpi = xresources.apply_dpi
-- Set colors
local active_color = beautiful.volume_bar_active_color or "#5AA3CC"
local muted_color = beautiful.volume_bar_muted_color or "#666666"
local active_background_color = beautiful.volume_bar_active_background_color or "#222222"
local muted_background_color = beautiful.volume_bar_muted_background_color or "#222222"
local volume_bar = wibox.widget{
max_value = 100,
value = 50,
forced_height = dpi(10),
margins = {
top = dpi(8),
bottom = dpi(8),
},
forced_width = dpi(200),
shape = gears.shape.rounded_bar,
bar_shape = gears.shape.rounded_bar,
color = active_color,
background_color = active_background_color,
border_width = 0,
border_color = beautiful.border_color,
widget = wibox.widget.progressbar,
}
local function update_widget()
awful.spawn.easy_async({"sh", "-c", "pactl list sinks"},
function(stdout)
local volume = stdout:match('(%d+)%% /')
local muted = stdout:match('Mute:(%s+)[yes]')
local fill_color
local bg_color
if muted ~= nil then
fill_color = muted_color
bg_color = muted_background_color
else
fill_color = active_color
bg_color = active_background_color
end
volume_bar.value = tonumber(volume)
volume_bar.color = fill_color
volume_bar.background_color = bg_color
end
)
end
update_widget()
-- Sleeps until pactl detects an event (volume up/down/toggle mute)
local volume_script = [[
bash -c '
pactl subscribe 2> /dev/null | grep --line-buffered "sink #0"
']]
-- Kill old pactl subscribe process
awful.spawn.easy_async_with_shell("ps x | grep \"pactl subscribe\" | grep -v grep | awk '{print $1}' | xargs kill", function ()
-- Update volume with each line printed
awful.spawn.with_line_callback(volume_script, {
stdout = function(line)
update_widget()
end
})
end)
return volume_bar