From ce3d4e8f01c8c92a4f86da5921639c28a9fadb13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Thu, 21 Jul 2022 16:12:11 +0200 Subject: [PATCH 1/2] Adjust font sizing --- awesome/theme.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/awesome/theme.lua b/awesome/theme.lua index af8906f..103274b 100644 --- a/awesome/theme.lua +++ b/awesome/theme.lua @@ -25,7 +25,7 @@ local theme = {} theme.name = "pastel" -- Font -theme.font = "Ubuntu 13" +theme.font = "Ubuntu 12" theme.title_font = "Ubuntu 12" -- Background From ede5f3ba772f11f217cbc66784142330cefb8e1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Av=C3=A9?= Date: Thu, 21 Jul 2022 17:11:07 +0200 Subject: [PATCH 2/2] Add battery and volume widget --- awesome/components/pastel/top-panel.lua | 15 +- awesome/components/volume-adjust.lua | 95 -------- awesome/keys.lua | 10 +- awesome/pastel.lua | 1 - awesome/rc.lua | 3 +- awesome/theme.lua | 4 +- awesome/widgets/battery-widget/README.md | 75 ++++++ awesome/widgets/battery-widget/bat-wid-1.png | Bin 0 -> 700 bytes awesome/widgets/battery-widget/bat-wid-2.png | Bin 0 -> 18854 bytes awesome/widgets/battery-widget/bat-wid-22.png | Bin 0 -> 10225 bytes awesome/widgets/battery-widget/bat-wid-3.png | Bin 0 -> 14886 bytes awesome/widgets/battery-widget/battery.lua | 200 +++++++++++++++ awesome/widgets/battery-widget/spaceman.jpg | Bin 0 -> 16738 bytes awesome/widgets/volume-widget/README.md | 119 +++++++++ .../icons/audio-volume-high-symbolic.svg | 88 +++++++ .../icons/audio-volume-low-symbolic.svg | 88 +++++++ .../icons/audio-volume-medium-symbolic.svg | 88 +++++++ .../icons/audio-volume-muted-symbolic.svg | 88 +++++++ .../volume-widget/screenshots/variations.png | Bin 0 -> 9153 bytes .../screenshots/volume-sink-sources.png | Bin 0 -> 74043 bytes awesome/widgets/volume-widget/utils.lua | 105 ++++++++ awesome/widgets/volume-widget/volume-2.svg | 1 + awesome/widgets/volume-widget/volume.lua | 228 ++++++++++++++++++ .../volume-widget/widgets/arc-widget.lua | 46 ++++ .../widgets/horizontal-bar-widget.lua | 58 +++++ .../widgets/icon-and-text-widget.lua | 59 +++++ .../volume-widget/widgets/icon-widget.lua | 46 ++++ .../widgets/vertical-bar-widget.lua | 64 +++++ 28 files changed, 1372 insertions(+), 109 deletions(-) delete mode 100644 awesome/components/volume-adjust.lua create mode 100644 awesome/widgets/battery-widget/README.md create mode 100644 awesome/widgets/battery-widget/bat-wid-1.png create mode 100644 awesome/widgets/battery-widget/bat-wid-2.png create mode 100644 awesome/widgets/battery-widget/bat-wid-22.png create mode 100644 awesome/widgets/battery-widget/bat-wid-3.png create mode 100644 awesome/widgets/battery-widget/battery.lua create mode 100644 awesome/widgets/battery-widget/spaceman.jpg create mode 100644 awesome/widgets/volume-widget/README.md create mode 100644 awesome/widgets/volume-widget/icons/audio-volume-high-symbolic.svg create mode 100644 awesome/widgets/volume-widget/icons/audio-volume-low-symbolic.svg create mode 100644 awesome/widgets/volume-widget/icons/audio-volume-medium-symbolic.svg create mode 100644 awesome/widgets/volume-widget/icons/audio-volume-muted-symbolic.svg create mode 100644 awesome/widgets/volume-widget/screenshots/variations.png create mode 100644 awesome/widgets/volume-widget/screenshots/volume-sink-sources.png create mode 100644 awesome/widgets/volume-widget/utils.lua create mode 100644 awesome/widgets/volume-widget/volume-2.svg create mode 100644 awesome/widgets/volume-widget/volume.lua create mode 100644 awesome/widgets/volume-widget/widgets/arc-widget.lua create mode 100644 awesome/widgets/volume-widget/widgets/horizontal-bar-widget.lua create mode 100644 awesome/widgets/volume-widget/widgets/icon-and-text-widget.lua create mode 100644 awesome/widgets/volume-widget/widgets/icon-widget.lua create mode 100644 awesome/widgets/volume-widget/widgets/vertical-bar-widget.lua diff --git a/awesome/components/pastel/top-panel.lua b/awesome/components/pastel/top-panel.lua index 17faa60..465c97c 100644 --- a/awesome/components/pastel/top-panel.lua +++ b/awesome/components/pastel/top-panel.lua @@ -16,6 +16,8 @@ local wibox = require("wibox") local theme = require("theme") local lain = require("lain") local dpi = beautiful.xresources.apply_dpi +local battery_widget = require("widgets.battery-widget.battery") +local volume_widget = require("widgets.volume-widget.volume") -- import widgets local task_list = require("widgets.task-list") @@ -67,9 +69,17 @@ top_panel.create = function(s) { layout = wibox.layout.fixed.horizontal, wibox.layout.margin(wibox.widget.systray(), dpi(5), dpi(5), dpi(5), dpi(5)), + wibox.widget.textbox(' '), + volume_widget({widget_type='arc'}), + wibox.widget.textbox(' '), + battery_widget({font=theme.font, display_notification=true}), wibox.widget.textbox(' | '), updates_indicator, wibox.widget.textbox(' | '), + awful.widget.watch('bash -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"', 5), + wibox.widget.textbox(' | '), + wibox.layout.margin(require("widgets.layout-box"), dpi(5), dpi(5), dpi(5), dpi(5)), + wibox.widget.textbox(' | '), lain.widget.mem({ settings = function() widget:set_markup(lain.util.markup.font(theme.font, mem_now.used .. " MB")) @@ -85,10 +95,7 @@ top_panel.create = function(s) awful.widget.watch('bash -c "/usr/bin/cat /proc/cpuinfo | grep MHz | cut -b 12- | sort -r | head -n 1 | xargs printf \'%f / 1000\n\' | bc -l | cut -b -4"', 1), wibox.widget.textbox('GHz | '), awful.widget.watch('bash -c "sensors | grep Package | cut -f 5 -d \' \' | cut -c 2-"', 5), - wibox.widget.textbox(' | '), - awful.widget.watch('bash -c "cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor"', 5), - wibox.widget.textbox(' | '), - wibox.layout.margin(require("widgets.layout-box"), dpi(5), dpi(5), dpi(5), dpi(5)), + wibox.widget.textbox(' '), } } diff --git a/awesome/components/volume-adjust.lua b/awesome/components/volume-adjust.lua deleted file mode 100644 index e456e5c..0000000 --- a/awesome/components/volume-adjust.lua +++ /dev/null @@ -1,95 +0,0 @@ --- ██╗ ██╗ ██████╗ ██╗ ██╗ ██╗███╗ ███╗███████╗ --- ██║ ██║██╔═══██╗██║ ██║ ██║████╗ ████║██╔════╝ --- ██║ ██║██║ ██║██║ ██║ ██║██╔████╔██║█████╗ --- ╚██╗ ██╔╝██║ ██║██║ ██║ ██║██║╚██╔╝██║██╔══╝ --- ╚████╔╝ ╚██████╔╝███████╗╚██████╔╝██║ ╚═╝ ██║███████╗ --- ╚═══╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ - - --- =================================================================== --- Initialization --- =================================================================== - - -local wibox = require("wibox") -local awful = require("awful") -local gears = require("gears") -local beautiful = require("beautiful") -local dpi = beautiful.xresources.apply_dpi - -local offsetx = dpi(56) -local offsety = dpi(300) -local screen = awful.screen.focused() -local icon_dir = gears.filesystem.get_configuration_dir() .. "/icons/volume/" .. beautiful.name .. "/" - - --- =================================================================== --- Appearance & Functionality --- =================================================================== - - --- create the volume_adjust component -local volume_adjust = wibox({ - screen = awful.screen.focused(), - x = screen.geometry.width - offsetx, - y = (screen.geometry.height / 2) - (offsety / 2), - width = dpi(48), - height = offsety, - shape = gears.shape.rounded_rect, - visible = false, - ontop = true -}) - -local volume_bar = wibox.widget{ - widget = wibox.widget.progressbar, - shape = gears.shape.rounded_bar, - color = "#efefef", - background_color = beautiful.bg_focus, - max_value = 100, - value = 0 -} - -volume_adjust:setup { - layout = wibox.layout.align.vertical, - { - wibox.container.margin( - volume_bar, dpi(14), dpi(20), dpi(20), dpi(20) - ), - forced_height = offsety, - direction = "east", - layout = wibox.container.rotate - }, -} - --- create a 4 second timer to hide the volume adjust --- component whenever the timer is started -local hide_volume_adjust = gears.timer { - timeout = 4, - autostart = true, - callback = function() - volume_adjust.visible = false - end -} - --- show volume-adjust when "volume_change" signal is emitted -awesome.connect_signal("volume_change", - function() - -- set new volume value - awful.spawn.easy_async_with_shell( - "amixer sget Master | grep 'Right:' | awk -F '[][]' '{print $2}'| sed 's/[^0-9]//g'", - function(stdout) - local volume_level = tonumber(stdout) - volume_bar.value = volume_level - end, - false - ) - - -- make volume_adjust component visible - if volume_adjust.visible then - hide_volume_adjust:again() - else - volume_adjust.visible = true - hide_volume_adjust:start() - end - end -) diff --git a/awesome/keys.lua b/awesome/keys.lua index 64c7b8e..c503cba 100644 --- a/awesome/keys.lua +++ b/awesome/keys.lua @@ -15,6 +15,7 @@ local awful = require("awful") local gears = require("gears") local naughty = require("naughty") local beautiful = require("beautiful") +local volume_widget = require("widgets.volume-widget.volume") local dpi = beautiful.xresources.apply_dpi -- Define mod keys @@ -188,22 +189,19 @@ keys.globalkeys = gears.table.join( -- ALSA volume control awful.key({}, "XF86AudioRaiseVolume", function() - awful.spawn("amixer -D pulse sset Master 5%+", false) - awesome.emit_signal("volume_change") + volume_widget:inc(5) end, {description = "volume up", group = "hotkeys"} ), awful.key({}, "XF86AudioLowerVolume", function() - awful.spawn("amixer -D pulse sset Master 5%-", false) - awesome.emit_signal("volume_change") + volume_widget:dec(5) end, {description = "volume down", group = "hotkeys"} ), awful.key({}, "XF86AudioMute", function() - awful.spawn("amixer -D pulse set Master 1+ toggle", false) - awesome.emit_signal("volume_change") + volume_widget:toggle() end, {description = "toggle mute", group = "hotkeys"} ), diff --git a/awesome/pastel.lua b/awesome/pastel.lua index 3fa5a61..b223082 100644 --- a/awesome/pastel.lua +++ b/awesome/pastel.lua @@ -27,7 +27,6 @@ pastel.initialize = function() -- Import components require("components.pastel.wallpaper") require("components.exit-screen") - require("components.volume-adjust") -- Import panels local top_panel = require("components.pastel.top-panel") diff --git a/awesome/rc.lua b/awesome/rc.lua index e03f192..288cc18 100644 --- a/awesome/rc.lua +++ b/awesome/rc.lua @@ -38,7 +38,8 @@ network_interfaces = { -- List of apps to run on start-up local run_on_start_up = { "numlockx on", - "bluetoothctl power on" + "bluetoothctl power on", + "nm-applet", } -- =================================================================== diff --git a/awesome/theme.lua b/awesome/theme.lua index 103274b..bbe3edf 100644 --- a/awesome/theme.lua +++ b/awesome/theme.lua @@ -1,4 +1,4 @@ --- ████████╗██╗ ██╗███████╗███╗ ███╗███████╗ +-- ████████╗██╗ ██╗███████╗███╗ ███╗███████╗theme -- ╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝ -- ██║ ███████║█████╗ ██╔████╔██║█████╗ -- ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ @@ -95,7 +95,7 @@ theme.titlebars_enabled = false -- theme.layout_floating = "~/.config/awesome/icons/layouts/floating.png" -- theme.layout_max = "~/.config/awesome/icons/layouts/maximized.png" -theme.icon_theme = "Tela-dark" +theme.icon_theme = "Papirus" -- return theme return theme diff --git a/awesome/widgets/battery-widget/README.md b/awesome/widgets/battery-widget/README.md new file mode 100644 index 0000000..b15aac6 --- /dev/null +++ b/awesome/widgets/battery-widget/README.md @@ -0,0 +1,75 @@ +# Battery widget + +Simple and easy-to-install widget for Awesome Window Manager. + +This widget consists of: + + - an icon which shows the battery level: + ![Battery Widget](./bat-wid-1.png) + - a pop-up window, which shows up when you hover over an icon: + ![Battery Widget](./bat-wid-2.png) + Alternatively you can use a tooltip (check the code): + ![Battery Widget](./bat-wid-22.png) + - a pop-up warning message which appears on bottom right corner when battery level is less that 15% (you can get the image [here](https://vk.com/images/stickers/1933/512.png)): + ![Battery Widget](./bat-wid-3.png) + +Note that widget uses the Arc icon theme, so it should be [installed](https://github.com/horst3180/arc-icon-theme#installation) first under **/usr/share/icons/Arc/** folder. + +## Customization + +It is possible to customize widget by providing a table with all or some of the following config parameters: + +| Name | Default | Description | +|---|---|---| +| `font` | Play 8 | Fond | +| `path_to_icons` | `/usr/share/icons/Arc/status/symbolic/` | Path to the folder with icons* | +| `show_current_level`| false | Show current charge level | +| `margin_right`|0| The right margin of the widget| +| `margin_left`|0| The left margin of the widget| +| `display_notification` | `false` | Display a notification on mouseover | +| `notification_position` | `top_right` | The notification position | +| `timeout` | 10 | How often in seconds the widget refreshes | +| `warning_msg_title` | _Huston, we have a problem_ | Title of the warning popup | +| `warning_msg_text` | _Battery is dying_ | Text of the warning popup | +| `warning_msg_position` | `bottom_right` | Position of the warning popup | +| `warning_msg_icon` | ~/.config/awesome/awesome-wm-widgets/battery-widget/spaceman.jpg | Icon of the warning popup | +| `enable_battery_warning` | `true` | Display low battery warning | + +*Note: the widget expects following icons to be present in the folder: + + - battery-caution-charging-symbolic.svg + - battery-empty-charging-symbolic.svg + - battery-full-charged-symbolic.svg + - battery-full-symbolic.svg + - battery-good-symbolic.svg + - battery-low-symbolic.svg + - battery-caution-symbolic.svg + - battery-empty-symbolic.svg + - battery-full-charging-symbolic.svg + - battery-good-charging-symbolic.svg + - battery-low-charging-symbolic.svg + - battery-missing-symbolic.svg + +## Installation + +This widget reads the output of acpi tool. + +- install `acpi` and check the output: + +```bash +$ sudo apt-get install acpi +$ acpi +Battery 0: Discharging, 66%, 02:34:06 remaining +``` + +```lua +local battery_widget = require("awesome-wm-widgets.battery-widget.battery") + +... +s.mytasklist, -- Middle widget + { -- Right widgets + layout = wibox.layout.fixed.horizontal, + ... + battery_widget(), + ... +``` diff --git a/awesome/widgets/battery-widget/bat-wid-1.png b/awesome/widgets/battery-widget/bat-wid-1.png new file mode 100644 index 0000000000000000000000000000000000000000..00e1618043b24e0449c2b2bd8e8381be053da1df GIT binary patch literal 700 zcmV;t0z>_YP)B<>O?fICAkZ>}H zq$St89TwvHcK_baj+9a<{r%+R=dW|E)HIkXrOF98^PijQCEGTyY(9GUz_IN=B@cq& z%hzxI#49NR|Tr=;{8$FVF~5UwKqdOg$Zpoz4}kt;d^wRGHE zpD0+65Ebo*u{HPH&<`pqJLPNX9kF{SY#e4^1B6ccD`UdKKSr) zaz3iU?z!%h!DBWD0+vV*kB&UgLs>4tczp1Fft>NhVRUwQTyvIQulIB?sQUHO@G~)U zs$rrnfIPCG|GP3itG#w(_x@U^vl>v|v%Hr}$QfV9b@yI8-{^0x$d`0u`bit4XDa@y_wcHfdEBO;Dt@8TkgBHOm7!Bh$vD% literal 0 HcmV?d00001 diff --git a/awesome/widgets/battery-widget/bat-wid-2.png b/awesome/widgets/battery-widget/bat-wid-2.png new file mode 100644 index 0000000000000000000000000000000000000000..ae20af2d525a19a8da631dd080d9bd42415a849c GIT binary patch literal 18854 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 literal 0 HcmV?d00001 diff --git a/awesome/widgets/battery-widget/battery.lua b/awesome/widgets/battery-widget/battery.lua new file mode 100644 index 0000000..452d7ef --- /dev/null +++ b/awesome/widgets/battery-widget/battery.lua @@ -0,0 +1,200 @@ +------------------------------------------------- +-- Battery Widget for Awesome Window Manager +-- Shows the battery status using the ACPI tool +-- More details could be found here: +-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/battery-widget + +-- @author Pavel Makhov +-- @copyright 2017 Pavel Makhov +------------------------------------------------- + +local awful = require("awful") +local naughty = require("naughty") +local watch = require("awful.widget.watch") +local wibox = require("wibox") +local gfs = require("gears.filesystem") +local dpi = require('beautiful').xresources.apply_dpi + +-- acpi sample outputs +-- Battery 0: Discharging, 75%, 01:51:38 remaining +-- Battery 0: Charging, 53%, 00:57:43 until charged + +local HOME = os.getenv("HOME") +local WIDGET_DIR = HOME .. '/.config/awesome/awesome-wm-widgets/battery-widget' + +local battery_widget = {} +local function worker(user_args) + local args = user_args or {} + + local font = args.font or 'Play 8' + local path_to_icons = args.path_to_icons or "/usr/share/icons/Arc/status/symbolic/" + local show_current_level = args.show_current_level or false + local margin_left = args.margin_left or 0 + local margin_right = args.margin_right or 0 + + local display_notification = args.display_notification or false + local display_notification_onClick = args.display_notification_onClick or true + local position = args.notification_position or "top_right" + local timeout = args.timeout or 10 + + local warning_msg_title = args.warning_msg_title or 'Huston, we have a problem' + local warning_msg_text = args.warning_msg_text or 'Battery is dying' + local warning_msg_position = args.warning_msg_position or 'bottom_right' + local warning_msg_icon = args.warning_msg_icon or WIDGET_DIR .. '/spaceman.jpg' + local enable_battery_warning = args.enable_battery_warning + if enable_battery_warning == nil then + enable_battery_warning = true + end + + if not gfs.dir_readable(path_to_icons) then + naughty.notify{ + title = "Battery Widget", + text = "Folder with icons doesn't exist: " .. path_to_icons, + preset = naughty.config.presets.critical + } + end + + local icon_widget = wibox.widget { + { + id = "icon", + widget = wibox.widget.imagebox, + resize = false + }, + valign = 'center', + layout = wibox.container.place, + } + local level_widget = wibox.widget { + font = font, + widget = wibox.widget.textbox + } + + battery_widget = wibox.widget { + icon_widget, + level_widget, + layout = wibox.layout.fixed.horizontal, + } + -- Popup with battery info + -- One way of creating a pop-up notification - naughty.notify + local notification + local function show_battery_status(batteryType) + awful.spawn.easy_async([[bash -c 'acpi']], + function(stdout, _, _, _) + naughty.destroy(notification) + notification = naughty.notify{ + text = stdout, + title = "Battery status", + icon = path_to_icons .. batteryType .. ".svg", + icon_size = dpi(16), + position = position, + timeout = 5, hover_timeout = 0.5, + width = 200, + screen = mouse.screen + } + end + ) + end + + -- Alternative to naughty.notify - tooltip. You can compare both and choose the preferred one + --battery_popup = awful.tooltip({objects = {battery_widget}}) + + -- To use colors from beautiful theme put + -- following lines in rc.lua before require("battery"): + -- beautiful.tooltip_fg = beautiful.fg_normal + -- beautiful.tooltip_bg = beautiful.bg_normal + + local function show_battery_warning() + naughty.notify { + icon = warning_msg_icon, + icon_size = 100, + text = warning_msg_text, + title = warning_msg_title, + timeout = 25, -- show the warning for a longer time + hover_timeout = 0.5, + position = warning_msg_position, + bg = "#F06060", + fg = "#EEE9EF", + width = 300, + screen = mouse.screen + } + end + local last_battery_check = os.time() + local batteryType = "battery-good-symbolic" + + watch("acpi -i", timeout, + function(widget, stdout) + local battery_info = {} + local capacities = {} + for s in stdout:gmatch("[^\r\n]+") do + local status, charge_str, _ = string.match(s, '.+: ([%a%s]+), (%d?%d?%d)%%,?(.*)') + if status ~= nil then + table.insert(battery_info, {status = status, charge = tonumber(charge_str)}) + else + local cap_str = string.match(s, '.+:.+last full capacity (%d+)') + table.insert(capacities, tonumber(cap_str)) + end + end + + local capacity = 0 + for _, cap in ipairs(capacities) do + capacity = capacity + cap + end + + local charge = 0 + local status + for i, batt in ipairs(battery_info) do + if capacities[i] ~= nil then + if batt.charge >= charge then + status = batt.status -- use most charged battery status + -- this is arbitrary, and maybe another metric should be used + end + + charge = charge + batt.charge * capacities[i] + end + end + charge = charge / capacity + + if show_current_level then + level_widget.text = string.format('%d%%', charge) + end + + if (charge >= 1 and charge < 15) then + batteryType = "battery-empty%s-symbolic" + if enable_battery_warning and status ~= 'Charging' and os.difftime(os.time(), last_battery_check) > 300 then + -- if 5 minutes have elapsed since the last warning + last_battery_check = os.time() + + show_battery_warning() + end + elseif (charge >= 15 and charge < 40) then batteryType = "battery-caution%s-symbolic" + elseif (charge >= 40 and charge < 60) then batteryType = "battery-low%s-symbolic" + elseif (charge >= 60 and charge < 80) then batteryType = "battery-good%s-symbolic" + elseif (charge >= 80 and charge <= 100) then batteryType = "battery-full%s-symbolic" + end + + if status == 'Charging' then + batteryType = string.format(batteryType, '-charging') + else + batteryType = string.format(batteryType, '') + end + + widget.icon:set_image(path_to_icons .. batteryType .. ".svg") + + -- Update popup text + -- battery_popup.text = string.gsub(stdout, "\n$", "") + end, + icon_widget) + + if display_notification then + battery_widget:connect_signal("mouse::enter", function() show_battery_status(batteryType) end) + battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end) + elseif display_notification_onClick then + battery_widget:connect_signal("button::press", function(_,_,_,button) + if (button == 3) then show_battery_status(batteryType) end + end) + battery_widget:connect_signal("mouse::leave", function() naughty.destroy(notification) end) + end + + return wibox.container.margin(battery_widget, margin_left, margin_right) +end + +return setmetatable(battery_widget, { __call = function(_, ...) return worker(...) end }) diff --git a/awesome/widgets/battery-widget/spaceman.jpg b/awesome/widgets/battery-widget/spaceman.jpg new file mode 100644 index 0000000000000000000000000000000000000000..73ddaf3757a16476b4a5de7bac8d5956f740a355 GIT binary patch literal 16738 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 Jcoq0s`# + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/awesome/widgets/volume-widget/icons/audio-volume-low-symbolic.svg b/awesome/widgets/volume-widget/icons/audio-volume-low-symbolic.svg new file mode 100644 index 0000000..7eb4531 --- /dev/null +++ b/awesome/widgets/volume-widget/icons/audio-volume-low-symbolic.svg @@ -0,0 +1,88 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/awesome/widgets/volume-widget/icons/audio-volume-medium-symbolic.svg b/awesome/widgets/volume-widget/icons/audio-volume-medium-symbolic.svg new file mode 100644 index 0000000..11e44fe --- /dev/null +++ b/awesome/widgets/volume-widget/icons/audio-volume-medium-symbolic.svg @@ -0,0 +1,88 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/awesome/widgets/volume-widget/icons/audio-volume-muted-symbolic.svg b/awesome/widgets/volume-widget/icons/audio-volume-muted-symbolic.svg new file mode 100644 index 0000000..e577d05 --- /dev/null +++ b/awesome/widgets/volume-widget/icons/audio-volume-muted-symbolic.svg @@ -0,0 +1,88 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/awesome/widgets/volume-widget/screenshots/variations.png b/awesome/widgets/volume-widget/screenshots/variations.png new file mode 100644 index 0000000000000000000000000000000000000000..21d7eadf5bca8668ffcf5131a26e5689ebf01e72 GIT binary patch literal 9153 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�M{*6#={)L;K#^8pn0Ek+`&J8 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�T%|7ry!ref|@F=?CUtxxHL1 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','') + end + + if in_device then + local t = split(line, ': ') + local key = t[1]:gsub('\t+', ''):lower() + local value = t[2]:gsub('^<', ''):gsub('>$', '') + device[key] = value + end + + if in_properties then + local t = split(line, '=') + local key = t[1]:gsub('\t+', ''):gsub('%.', '_'):gsub('-', '_'):gsub(':', ''):gsub("%s+$", "") + local value + if t[2] == nil then + value = t[2] + else + value = t[2]:gsub('"', ''):gsub("^%s+", ""):gsub(' Analog Stereo', '') + end + properties[key] = value + end + + if in_ports then + local t = split(line, ': ') + local key = t[1] + if key ~= nil then + key = key:gsub('\t+', '') + end + ports[key] = t[2] + end + end + + return sinks, sources +end + +return utils \ No newline at end of file diff --git a/awesome/widgets/volume-widget/volume-2.svg b/awesome/widgets/volume-widget/volume-2.svg new file mode 100644 index 0000000..10f1c67 --- /dev/null +++ b/awesome/widgets/volume-widget/volume-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/awesome/widgets/volume-widget/volume.lua b/awesome/widgets/volume-widget/volume.lua new file mode 100644 index 0000000..2561eb9 --- /dev/null +++ b/awesome/widgets/volume-widget/volume.lua @@ -0,0 +1,228 @@ +------------------------------------------------- +-- The Ultimate Volume Widget for Awesome Window Manager +-- More details could be found here: +-- https://github.com/streetturtle/widgets/tree/master/volume-widget + +-- @author Pavel Makhov +-- @copyright 2020 Pavel Makhov +------------------------------------------------- + +local awful = require("awful") +local wibox = require("wibox") +local spawn = require("awful.spawn") +local gears = require("gears") +local beautiful = require("beautiful") +local watch = require("awful.widget.watch") +local utils = require("widgets.volume-widget.utils") + + +local LIST_DEVICES_CMD = [[sh -c "pacmd list-sinks; pacmd list-sources"]] +local function GET_VOLUME_CMD(device) return 'amixer -D ' .. device .. ' sget Master' end +local function INC_VOLUME_CMD(device, step) return 'amixer -D ' .. device .. ' sset Master ' .. step .. '%+' end +local function DEC_VOLUME_CMD(device, step) return 'amixer -D ' .. device .. ' sset Master ' .. step .. '%-' end +local function TOG_VOLUME_CMD(device) return 'amixer -D ' .. device .. ' sset Master toggle' end + + +local widget_types = { + icon_and_text = require("widgets.volume-widget.widgets.icon-and-text-widget"), + icon = require("widgets.volume-widget.widgets.icon-widget"), + arc = require("widgets.volume-widget.widgets.arc-widget"), + horizontal_bar = require("widgets.volume-widget.widgets.horizontal-bar-widget"), + vertical_bar = require("widgets.volume-widget.widgets.vertical-bar-widget") +} +local volume = {} + +local rows = { layout = wibox.layout.fixed.vertical } + +local popup = awful.popup{ + bg = beautiful.bg_normal, + ontop = true, + visible = false, + shape = gears.shape.rounded_rect, + border_width = 1, + border_color = beautiful.bg_focus, + maximum_width = 400, + offset = { y = 5 }, + widget = {} +} + +local function build_main_line(device) + if device.active_port ~= nil and device.ports[device.active_port] ~= nil then + return device.properties.device_description .. ' · ' .. device.ports[device.active_port] + else + return device.properties.device_description + end +end + +local function build_rows(devices, on_checkbox_click, device_type) + local device_rows = { layout = wibox.layout.fixed.vertical } + for _, device in pairs(devices) do + + local checkbox = wibox.widget { + checked = device.is_default, + color = beautiful.bg_normal, + paddings = 2, + shape = gears.shape.circle, + forced_width = 20, + forced_height = 20, + check_color = beautiful.fg_urgent, + widget = wibox.widget.checkbox + } + + checkbox:connect_signal("button::press", function() + spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function() + on_checkbox_click() + end) + end) + + local row = wibox.widget { + { + { + { + checkbox, + valign = 'center', + layout = wibox.container.place, + }, + { + { + text = build_main_line(device), + align = 'left', + widget = wibox.widget.textbox + }, + left = 10, + layout = wibox.container.margin + }, + spacing = 8, + layout = wibox.layout.align.horizontal + }, + margins = 4, + layout = wibox.container.margin + }, + bg = beautiful.bg_normal, + widget = wibox.container.background + } + + row:connect_signal("mouse::enter", function(c) c:set_bg(beautiful.bg_focus) end) + row:connect_signal("mouse::leave", function(c) c:set_bg(beautiful.bg_normal) end) + + local old_cursor, old_wibox + row:connect_signal("mouse::enter", function() + local wb = mouse.current_wibox + old_cursor, old_wibox = wb.cursor, wb + wb.cursor = "hand1" + end) + row:connect_signal("mouse::leave", function() + if old_wibox then + old_wibox.cursor = old_cursor + old_wibox = nil + end + end) + + row:connect_signal("button::press", function() + spawn.easy_async(string.format([[sh -c 'pacmd set-default-%s "%s"']], device_type, device.name), function() + on_checkbox_click() + end) + end) + + table.insert(device_rows, row) + end + + return device_rows +end + +local function build_header_row(text) + return wibox.widget{ + { + markup = "" .. text .. "", + align = 'center', + widget = wibox.widget.textbox + }, + bg = beautiful.bg_normal, + widget = wibox.container.background + } +end + +local function rebuild_popup() + spawn.easy_async(LIST_DEVICES_CMD, function(stdout) + + local sinks, sources = utils.extract_sinks_and_sources(stdout) + + for i = 0, #rows do rows[i]=nil end + + table.insert(rows, build_header_row("SINKS")) + table.insert(rows, build_rows(sinks, function() rebuild_popup() end, "sink")) + table.insert(rows, build_header_row("SOURCES")) + table.insert(rows, build_rows(sources, function() rebuild_popup() end, "source")) + + popup:setup(rows) + end) +end + + +local function worker(user_args) + + local args = user_args or {} + + local mixer_cmd = args.mixer_cmd or 'pavucontrol' + local widget_type = args.widget_type + local refresh_rate = args.refresh_rate or 1 + local step = args.step or 5 + local device = args.device or 'pulse' + + if widget_types[widget_type] == nil then + volume.widget = widget_types['icon_and_text'].get_widget(args.icon_and_text_args) + else + volume.widget = widget_types[widget_type].get_widget(args) + end + + local function update_graphic(widget, stdout) + local mute = string.match(stdout, "%[(o%D%D?)%]") -- \[(o\D\D?)\] - [on] or [off] + if mute == 'off' then widget:mute() + elseif mute == 'on' then widget:unmute() + end + local volume_level = string.match(stdout, "(%d?%d?%d)%%") -- (\d?\d?\d)\%) + volume_level = string.format("% 3d", volume_level) + widget:set_volume_level(volume_level) + end + + function volume:inc(s) + spawn.easy_async(INC_VOLUME_CMD(device, s or step), function(stdout) update_graphic(volume.widget, stdout) end) + end + + function volume:dec(s) + spawn.easy_async(DEC_VOLUME_CMD(device, s or step), function(stdout) update_graphic(volume.widget, stdout) end) + end + + function volume:toggle() + spawn.easy_async(TOG_VOLUME_CMD(device), function(stdout) update_graphic(volume.widget, stdout) end) + end + + function volume:mixer() + if mixer_cmd then + spawn.easy_async(mixer_cmd) + end + end + + volume.widget:buttons( + awful.util.table.join( + awful.button({}, 3, function() + if popup.visible then + popup.visible = not popup.visible + else + rebuild_popup() + popup:move_next_to(mouse.current_widget_geometry) + end + end), + awful.button({}, 4, function() volume:inc() end), + awful.button({}, 5, function() volume:dec() end), + awful.button({}, 2, function() volume:mixer() end), + awful.button({}, 1, function() volume:toggle() end) + ) + ) + + watch(GET_VOLUME_CMD(device), refresh_rate, update_graphic, volume.widget) + + return volume.widget +end + +return setmetatable(volume, { __call = function(_, ...) return worker(...) end }) diff --git a/awesome/widgets/volume-widget/widgets/arc-widget.lua b/awesome/widgets/volume-widget/widgets/arc-widget.lua new file mode 100644 index 0000000..7ecef78 --- /dev/null +++ b/awesome/widgets/volume-widget/widgets/arc-widget.lua @@ -0,0 +1,46 @@ +local wibox = require("wibox") +local beautiful = require('beautiful') + +local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/widgets/volume-widget/icons/' + +local widget = {} + +function widget.get_widget(widgets_args) + local args = widgets_args or {} + + local thickness = args.thickness or 2 + local main_color = args.main_color or beautiful.fg_color + local bg_color = args.bg_color or '#ffffff11' + local mute_color = args.mute_color or beautiful.fg_urgent + local size = args.size or 18 + + return wibox.widget { + { + id = "icon", + image = ICON_DIR .. 'audio-volume-high-symbolic.svg', + resize = true, + widget = wibox.widget.imagebox, + }, + max_value = 100, + thickness = thickness, + start_angle = 4.71238898, -- 2pi*3/4 + forced_height = size, + forced_width = size, + bg = bg_color, + paddings = 2, + widget = wibox.container.arcchart, + set_volume_level = function(self, new_value) + self.value = new_value + end, + mute = function(self) + self.colors = { mute_color } + end, + unmute = function(self) + self.colors = { main_color } + end + } + +end + + +return widget diff --git a/awesome/widgets/volume-widget/widgets/horizontal-bar-widget.lua b/awesome/widgets/volume-widget/widgets/horizontal-bar-widget.lua new file mode 100644 index 0000000..1484f91 --- /dev/null +++ b/awesome/widgets/volume-widget/widgets/horizontal-bar-widget.lua @@ -0,0 +1,58 @@ +local wibox = require("wibox") +local beautiful = require('beautiful') +local gears = require("gears") + +local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/widgets/volume-widget/icons/' + +local widget = {} + +function widget.get_widget(widgets_args) + local args = widgets_args or {} + + local main_color = args.main_color or beautiful.fg_normal + local mute_color = args.mute_color or beautiful.fg_urgent + local bg_color = args.bg_color or '#ffffff11' + local width = args.width or 50 + local margins = args.margins or 10 + local shape = args.shape or 'bar' + local with_icon = args.with_icon == true and true or false + + local bar = wibox.widget { + { + { + id = "icon", + image = ICON_DIR .. 'audio-volume-high-symbolic.svg', + resize = false, + widget = wibox.widget.imagebox, + }, + valign = 'center', + visible = with_icon, + layout = wibox.container.place, + }, + { + id = 'bar', + max_value = 100, + forced_width = width, + color = main_color, + margins = { top = margins, bottom = margins }, + background_color = bg_color, + shape = gears.shape[shape], + widget = wibox.widget.progressbar, + }, + spacing = 4, + layout = wibox.layout.fixed.horizontal, + set_volume_level = function(self, new_value) + self:get_children_by_id('bar')[1]:set_value(tonumber(new_value)) + end, + mute = function(self) + self:get_children_by_id('bar')[1]:set_color(mute_color) + end, + unmute = function(self) + self:get_children_by_id('bar')[1]:set_color(main_color) + end + } + + return bar +end + +return widget diff --git a/awesome/widgets/volume-widget/widgets/icon-and-text-widget.lua b/awesome/widgets/volume-widget/widgets/icon-and-text-widget.lua new file mode 100644 index 0000000..a37af77 --- /dev/null +++ b/awesome/widgets/volume-widget/widgets/icon-and-text-widget.lua @@ -0,0 +1,59 @@ +local wibox = require("wibox") +local beautiful = require('beautiful') + +local widget = {} + +local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/widgets/volume-widget/icons/' + +function widget.get_widget(widgets_args) + local args = widgets_args or {} + + local font = args.font or beautiful.font + local icon_dir = args.icon_dir or ICON_DIR + + return wibox.widget { + { + { + id = "icon", + resize = false, + widget = wibox.widget.imagebox, + }, + valign = 'center', + layout = wibox.container.place + }, + { + id = 'txt', + font = font, + widget = wibox.widget.textbox + }, + layout = wibox.layout.fixed.horizontal, + set_volume_level = function(self, new_value) + self:get_children_by_id('txt')[1]:set_text(new_value) + local volume_icon_name + if self.is_muted then + volume_icon_name = 'audio-volume-muted-symbolic' + else + local new_value_num = tonumber(new_value) + if (new_value_num >= 0 and new_value_num < 33) then + volume_icon_name="audio-volume-low-symbolic" + elseif (new_value_num < 66) then + volume_icon_name="audio-volume-medium-symbolic" + else + volume_icon_name="audio-volume-high-symbolic" + end + end + self:get_children_by_id('icon')[1]:set_image(icon_dir .. volume_icon_name .. '.svg') + end, + mute = function(self) + self.is_muted = true + self:get_children_by_id('icon')[1]:set_image(icon_dir .. 'audio-volume-muted-symbolic.svg') + end, + unmute = function(self) + self.is_muted = false + end + } + +end + + +return widget diff --git a/awesome/widgets/volume-widget/widgets/icon-widget.lua b/awesome/widgets/volume-widget/widgets/icon-widget.lua new file mode 100644 index 0000000..ddd52f2 --- /dev/null +++ b/awesome/widgets/volume-widget/widgets/icon-widget.lua @@ -0,0 +1,46 @@ +local wibox = require("wibox") + +local widget = {} + +local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/widgets/volume-widget/icons/' + +function widget.get_widget(widgets_args) + local args = widgets_args or {} + + local icon_dir = args.icon_dir or ICON_DIR + + return wibox.widget { + { + id = "icon", + resize = false, + widget = wibox.widget.imagebox, + }, + valign = 'center', + layout = wibox.container.place, + set_volume_level = function(self, new_value) + local volume_icon_name + if self.is_muted then + volume_icon_name = 'audio-volume-muted-symbolic' + else + local new_value_num = tonumber(new_value) + if (new_value_num >= 0 and new_value_num < 33) then + volume_icon_name="audio-volume-low-symbolic" + elseif (new_value_num < 66) then + volume_icon_name="audio-volume-medium-symbolic" + else + volume_icon_name="audio-volume-high-symbolic" + end + end + self:get_children_by_id('icon')[1]:set_image(icon_dir .. volume_icon_name .. '.svg') + end, + mute = function(self) + self.is_muted = true + self:get_children_by_id('icon')[1]:set_image(icon_dir .. 'audio-volume-muted-symbolic.svg') + end, + unmute = function(self) + self.is_muted = false + end + } +end + +return widget diff --git a/awesome/widgets/volume-widget/widgets/vertical-bar-widget.lua b/awesome/widgets/volume-widget/widgets/vertical-bar-widget.lua new file mode 100644 index 0000000..acc60f2 --- /dev/null +++ b/awesome/widgets/volume-widget/widgets/vertical-bar-widget.lua @@ -0,0 +1,64 @@ +local wibox = require("wibox") +local beautiful = require('beautiful') +local gears = require("gears") + +local ICON_DIR = os.getenv("HOME") .. '/.config/awesome/widgets/volume-widget/icons/' + +local widget = {} + +function widget.get_widget(widgets_args) + local args = widgets_args or {} + + local main_color = args.main_color or beautiful.fg_normal + local mute_color = args.mute_color or beautiful.fg_urgent + local bg_color = args.bg_color or '#ffffff11' + local width = args.width or 10 + local margins = args.height or 2 + local shape = args.shape or 'bar' + local with_icon = args.with_icon == true and true or false + + local bar = wibox.widget { + { + { + id = "icon", + image = ICON_DIR .. 'audio-volume-high-symbolic.svg', + resize = false, + widget = wibox.widget.imagebox, + }, + valign = 'center', + visible = with_icon, + layout = wibox.container.place, + }, + { + { + id = 'bar', + max_value = 100, + forced_width = width, + forced_height = 5, + margins = { top = margins, bottom = margins }, + color = main_color, + background_color = bg_color, + shape = gears.shape[shape], + widget = wibox.widget.progressbar, + }, + forced_width = width, + direction = 'east', + layout = wibox.container.rotate, + }, + spacing = 4, + layout = wibox.layout.fixed.horizontal, + set_volume_level = function(self, new_value) + self:get_children_by_id('bar')[1]:set_value(tonumber(new_value)) + end, + mute = function(self) + self:get_children_by_id('bar')[1]:set_color(mute_color) + end, + unmute = function(self) + self:get_children_by_id('bar')[1]:set_color(main_color) + end + } + + return bar +end + +return widget