my complicated awesomewm config (SUNSETTED)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

109 lines
3.7 KiB

local awful = require("awful")
local gears = require("gears")
local wibox = require("wibox")
local awmtk = require("awmtk")
return function(args)
local style = awmtk.style(awmtk.defaults, args.style or {},"volume_")
local device = args.device or "default"
local icons = args.icons or {
high = style.volume_icon_high,
medium = style.volume_icon_medium,
low = style.volume_icon_low,
muted = style.volume_icon_muted,
}
local controls = args.controls or {
"Master",
"Headphone"
}
local function get_icon(percent)
if percent >= 66 then
return icons.high
elseif percent >= 33 then
return icons.medium
elseif percent > 0 then
return icons.low
else
return icons.muted
end
end
local commands = args.commands or {
get_master = "amixer -D "..device.." sget Master",
set = "amixer -q -D "..device.." sset ",
get = "amixer -D "..device.." sget "
}
local list = {
layout = wibox.layout.fixed.vertical
}
for k,v in pairs(controls) do
local widget = wibox.widget({
{
widget = wibox.widget.textbox,
markup = v,
ellipsize = "end",
font = style.volume_font
},
{
widget = wibox.widget.slider,
id = "widget_slider",
handle_width = style.volume_handle_width or 6,
bar_height = style.volumer_bar_width or 5,
bar_color = style.volume_bar_color or "#55CC60",
bar_shape = style.bar_shape,
handler_shape = style.handle_shape,
value = 100,
},
layout = wibox.layout.fixed.vertical,
spacing = style.volume_container_spacing_horizontal,
forced_width = style.volume_slider_width or 180,
forced_height = style.volume_slider_height or 40
})
local slider = widget:get_children_by_id("widget_slider")[1]
awful.spawn.easy_async_with_shell(commands.get..v,function(out)
local volume_percent = out:match("%[(%d+)%%%]") or ""
volume_percent = tonumber(volume_percent)
if not volume_percent then
return
end
slider.value = volume_percent
end)
slider:connect_signal("widget::redraw_needed",function()
awful.spawn(commands.set..v.." "..slider.value.."%")
end)
table.insert(list,widget)
end
local tweaker_popup = awful.popup(style.container(list,{
visible = false,
ontop = true
}))
local icon = style.icon({
widget = wibox.widget.imagebox,
image = icons.muted,
id = "widget_icon"
},{},{
function()
if mouse.current_widget_geometry and (not tweaker_popup.visible) then
tweaker_popup:move_next_to(mouse.current_widget_geometry)
tweaker_popup.visible = true
else
tweaker_popup.visible = false
end
end
})
gears.timer {
autostart = true,
timeout = 0.5,
call_now = true,
callback = function()
awful.spawn.easy_async_with_shell(commands.get_master, function(out)
local volume_percent = out:match("%[(%d+)%%%]") or ""
volume_percent = tonumber(volume_percent)
if not volume_percent then
return
end
icon:get_children_by_id("widget_icon")[1].image = get_icon(volume_percent)
end)
end
}
return icon
end