diff options
-rw-r--r-- | volumebar-widget/README.md | 61 | ||||
-rw-r--r-- | volumebar-widget/custom.png | bin | 0 -> 9126 bytes | |||
-rw-r--r-- | volumebar-widget/volumebar.lua | 90 |
3 files changed, 103 insertions, 48 deletions
diff --git a/volumebar-widget/README.md b/volumebar-widget/README.md index d6b9117..92beee2 100644 --- a/volumebar-widget/README.md +++ b/volumebar-widget/README.md @@ -9,21 +9,62 @@ Supports - scroll down - decrease volume, - left click - mute/unmute. - ## Installation + ## Customization - Clone repo, include widget and use it in **rc.lua**: + It is possible to customize widget by providing a table with all or some of the following config parameters: ```lua -local volumebar_widget = require("awesome-wm-widgets.volumebar-widget.volumebar") -... -s.mytasklist, -- Middle widget - { -- Right widgets - layout = wibox.layout.fixed.horizontal, - ... - volumebar_widget, - ... + volumebar_widget({ + main_color = '#af13f7', + mute_color = '#ff0000', + width = 80, + shape = 'rounded_bar', -- octogon, hexagon, powerline, etc + -- bar's height = wibar's height minus 2x margins + margins = 8 +}) ``` +Above config results in following widget: + +![custom](./custom.png) + + + ## Installation + +1. Clone this repo under **~/.config/awesome/** + + ```bash + git clone https://github.com/streetturtle/awesome-wm-widgets.git ~/.config/awesome/ + ``` + +1. Require volumebar widget at the beginning of **rc.lua**: + + ```lua + local volumebar_widget = require("awesome-wm-widgets.volumebar-widget.volumebar") + ``` + +1. Add widget to the tasklist: + + ```lua + s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + ... + --[[default]] + volumebar_widget(), + --[[or customized]] + volumebar_widget({ + main_color = '#af13f7', + mute_color = '#ff0000', + width = 80, + shape = 'rounded_bar', -- octogon, hexagon, powerline, etc + -- bar's height = wibar's height minus 2x margins + margins = 8 + }), + + ... + ``` + ## Troubleshooting If the bar is not showing up, try to decrease top or bottom margin - widget uses hardcoded margins for vertical alignment, so if your wibox is too small then bar is simply hidden by the margins. diff --git a/volumebar-widget/custom.png b/volumebar-widget/custom.png Binary files differnew file mode 100644 index 0000000..d86143b --- /dev/null +++ b/volumebar-widget/custom.png diff --git a/volumebar-widget/volumebar.lua b/volumebar-widget/volumebar.lua index 9fd6a99..c1fcf71 100644 --- a/volumebar-widget/volumebar.lua +++ b/volumebar-widget/volumebar.lua @@ -9,6 +9,7 @@ ------------------------------------------------- local awful = require("awful") +local beautiful = require("beautiful") local gears = require("gears") local spawn = require("awful.spawn") local watch = require("awful.widget.watch") @@ -19,48 +20,61 @@ local INC_VOLUME_CMD = 'amixer -D pulse sset Master 5%+' local DEC_VOLUME_CMD = 'amixer -D pulse sset Master 5%-' local TOG_VOLUME_CMD = 'amixer -D pulse sset Master toggle' -local bar_color = "#74aeab" -local mute_color = "#ff0000" -local background_color = "#3a3a3a" - -local volumebar_widget = wibox.widget { - max_value = 1, - forced_width = 50, - paddings = 0, - border_width = 0.5, - color = bar_color, - background_color = background_color, - shape = gears.shape.bar, - clip = true, - margins = { - top = 10, - bottom = 10, - }, - widget = wibox.widget.progressbar -} - -local update_graphic = function(widget, stdout, _, _, _) - local mute = string.match(stdout, "%[(o%D%D?)%]") - local volume = string.match(stdout, "(%d?%d?%d)%%") - volume = tonumber(string.format("% 3d", volume)) - - widget.value = volume / 100; - widget.color = mute == "off" and mute_color - or bar_color +local widget = {} -end +local function worker(args) + + local args = args or {} + + local main_color = args.main_color or beautiful.widget_main_color + local mute_color = args.mute_color or beautiful.widget_red + local width = args.width or 50 + local shape = args.shape or 'bar' + local margins = args.margins or 10 + + local volumebar_widget = wibox.widget { + max_value = 1, + forced_width = width, + color = main_color, + background_color = '#ffffff11', + shape = gears.shape[shape], + margins = { + top = margins, + bottom = margins, + }, + widget = wibox.widget.progressbar + } + + local update_graphic = function(widget, stdout, _, _, _) + local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off] + local volume = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%) + volume = tonumber(string.format("% 3d", volume)) + + widget.value = volume / 100; + widget.color = mute == "off" + and mute_color + or main_color -volumebar_widget:connect_signal("button::press", function(_,_,_,button) - if (button == 4) then awful.spawn(INC_VOLUME_CMD) - elseif (button == 5) then awful.spawn(DEC_VOLUME_CMD) - elseif (button == 1) then awful.spawn(TOG_VOLUME_CMD) end - spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode) - update_graphic(volumebar_widget, stdout, stderr, exitreason, exitcode) + volumebar_widget:connect_signal("button::press", function(_, _, _, button) + if (button == 4) then + awful.spawn(INC_VOLUME_CMD) + elseif (button == 5) then + awful.spawn(DEC_VOLUME_CMD) + elseif (button == 1) then + awful.spawn(TOG_VOLUME_CMD) + end + + spawn.easy_async(GET_VOLUME_CMD, function(stdout, stderr, exitreason, exitcode) + update_graphic(volumebar_widget, stdout, stderr, exitreason, exitcode) + end) end) -end) -watch(GET_VOLUME_CMD, 1, update_graphic, volumebar_widget) + watch(GET_VOLUME_CMD, 1, update_graphic, volumebar_widget) + + return volumebar_widget +end + +return setmetatable(widget, { __call = function(_, ...) return worker(...) end }) -return volumebar_widget
\ No newline at end of file |