diff options
-rw-r--r-- | programs/dotfiles/awesome/rc.lua | 4 | ||||
-rw-r--r-- | programs/dotfiles/awesome/volume.lua | 60 |
2 files changed, 64 insertions, 0 deletions
diff --git a/programs/dotfiles/awesome/rc.lua b/programs/dotfiles/awesome/rc.lua index 065eda3..904164a 100644 --- a/programs/dotfiles/awesome/rc.lua +++ b/programs/dotfiles/awesome/rc.lua @@ -140,6 +140,9 @@ toptextclock = wibox.widget.textclock() local calendar_widget = require("calendar") local topcalendar = calendar_widget() +local volume_widget = require("volume") +local volumebar = volume_widget() + toptextclock:connect_signal("button::press", function(_, _, _, button) if button == 1 then topcalendar.toggle() end @@ -341,6 +344,7 @@ awful.screen.connect_for_each_screen(function(s) top = 4, bottom = 4 }, + volumebar, toptextclock, wibox.container.margin(s.mylayoutbox, 4, 4, 4, 4), }, diff --git a/programs/dotfiles/awesome/volume.lua b/programs/dotfiles/awesome/volume.lua new file mode 100644 index 0000000..21c200b --- /dev/null +++ b/programs/dotfiles/awesome/volume.lua @@ -0,0 +1,60 @@ +local awful = require("awful") +local spawn = require("awful.spawn") +local watch = require("awful.widget.watch") +local beautiful = require("beautiful") +local wibox = require("wibox") +local gears = require("gears") +local naughty = require("naughty") + +local volume_widget = {} + +local get_volume_cmd = "bash -c 'wpctl get-volume @DEFAULT_AUDIO_SINK@'" + +local function worker(user_args) + local volume_bar = wibox.widget { + bar_shape = gears.shape.rounded_rect, + bar_height = 4, + bar_color = beautiful.fg_focus, + handle_color = beautiful.fg_focus, + handle_shape = gears.shape.circle, + handle_border_width = 0, + value = 0, + forced_width = 50, + widget = wibox.widget.slider, + } + + volume_widget = wibox.widget { + { + layout = wibox.layout.fixed.horizontal, + { + text = " ", + widget = wibox.widget.textbox + }, + volume_bar, + spacing = 4 + }, + widget = wibox.container.margin, + left = 8, + } + + local function percentage(value) + return math.floor(value) + end + + watch(get_volume_cmd, 1, + function(widget, stdout) + volume = stdout:match('0.%d+') + widget.value = tonumber(volume) * 100 + end, volume_bar) + + volume_bar:connect_signal("property::value", + function(self) + spawn.easy_async("bash -c 'wpctl set-volume @DEFAULT_AUDIO_SINK@ " .. self.value .. "%'", function() end) + end) + + return volume_widget +end + +return setmetatable(volume_widget, { __call = function(_, ...) + return worker(...) +end}) |