diff options
author | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-09-17 15:29:36 -0400 |
---|---|---|
committer | Pavel Makhov <pmakhov@theoctavegroup.com> | 2019-09-17 15:29:36 -0400 |
commit | 6fd76c254b296da86619b43db619ccebcd521853 (patch) | |
tree | a005c8045bbee2998642c55fd5edadb258ea87de /volumebar-widget | |
parent | 372ae3c9e7cab4b64b8dcaf31d9d2d921a723585 (diff) | |
parent | 2e211937a116102c3647b85070718102192ddc54 (diff) |
Merge branch '74-externalize-config'
Note: breaking change, now widgets should be created with parentheses, i.e. battery(), instead of battery. Read more in README of the widget.
Diffstat (limited to 'volumebar-widget')
-rw-r--r-- | volumebar-widget/README.md | 76 | ||||
-rw-r--r-- | volumebar-widget/custom.png | bin | 0 -> 9126 bytes | |||
-rw-r--r-- | volumebar-widget/volumebar.lua | 95 |
3 files changed, 122 insertions, 49 deletions
diff --git a/volumebar-widget/README.md b/volumebar-widget/README.md index d6b9117..35169b7 100644 --- a/volumebar-widget/README.md +++ b/volumebar-widget/README.md @@ -9,21 +9,75 @@ Supports - scroll down - decrease volume, - left click - mute/unmute. - ## Installation - - Clone repo, include widget and use it in **rc.lua**: +## Customization +It is possible to customize widget by providing a table with all or some of the following config parameters: + +| Name | Default | Description | +|---|---|---| +| `main_color` | `beautiful.fg_normal` | Color of the bar | +| `mute_color` | `beautiful.fg_urgent` | Color of the bar when mute | +| `width` | 50 | The bar width | +| `shape` | `bar` | [gears.shape](https://awesomewm.org/doc/api/libraries/gears.shape.html), could be `octogon`, `hexagon`, `powerline`, etc | +| `margin` | `10` | Top and bottom margin (if your wibar is 22 px high, bar will be 2 px (22 - 2*10)) | +| `get_volume_cmd` | `amixer -D pulse sget Master` | Get current volume level | +| `inc_volume_cmd` | `amixer -D pulse sset Master 5%+` | Increase volume level | +| `dec_volume_cmd` | `amixer -D pulse sset Master 5%-` | Descrease volume level | +| `tog_volume_cmd` | `amixer -D pulse sset Master toggle` | Mute / unmute | + +### Example: + ```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', + 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..18e0f40 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,66 @@ 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.fg_normal + local mute_color = args.mute_color or beautiful.fg_urgent + local width = args.width or 50 + local shape = args.shape or 'bar' + local margins = args.margins or 10 + + local get_volume_cmd = args.get_volume_cmd or GET_VOLUME_CMD + local inc_volume_cmd = args.inc_volume_cmd or INC_VOLUME_CMD + local dec_volume_cmd = args.dec_volume_cmd or DEC_VOLUME_CMD + local tog_volume_cmd = args.tog_volume_cmd or TOG_VOLUME_CMD + + 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 |