summaryrefslogtreecommitdiff
path: root/volumebar-widget
diff options
context:
space:
mode:
authorPavel Makhov <pmakhov@theoctavegroup.com>2019-09-17 15:29:36 -0400
committerPavel Makhov <pmakhov@theoctavegroup.com>2019-09-17 15:29:36 -0400
commit6fd76c254b296da86619b43db619ccebcd521853 (patch)
treea005c8045bbee2998642c55fd5edadb258ea87de /volumebar-widget
parent372ae3c9e7cab4b64b8dcaf31d9d2d921a723585 (diff)
parent2e211937a116102c3647b85070718102192ddc54 (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.md76
-rw-r--r--volumebar-widget/custom.pngbin0 -> 9126 bytes
-rw-r--r--volumebar-widget/volumebar.lua95
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
new file mode 100644
index 0000000..d86143b
--- /dev/null
+++ b/volumebar-widget/custom.png
Binary files differ
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