summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--volumebar-widget/README.md61
-rw-r--r--volumebar-widget/custom.pngbin0 -> 9126 bytes
-rw-r--r--volumebar-widget/volumebar.lua90
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
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..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