diff options
-rw-r--r-- | battery-widget/battery.lua | 1 | ||||
-rw-r--r-- | batteryarc-widget/batteryarc.lua | 181 | ||||
-rw-r--r-- | brightnessarc-widget/brightnessarc.lua | 17 | ||||
-rw-r--r-- | run-shell/blur.png | bin | 329592 -> 0 bytes | |||
-rw-r--r-- | run-shell/pixelate.png | bin | 133469 -> 0 bytes | |||
-rw-r--r-- | run-shell/run-shell.lua | 89 |
6 files changed, 151 insertions, 137 deletions
diff --git a/battery-widget/battery.lua b/battery-widget/battery.lua index d59fdc6..6d9f086 100644 --- a/battery-widget/battery.lua +++ b/battery-widget/battery.lua @@ -35,6 +35,7 @@ local notification local function show_battery_status() awful.spawn.easy_async([[bash -c 'acpi']], function(stdout, _, _, _) + naughty.destroy(notification) notification = naughty.notify{ text = stdout, title = "Battery status", diff --git a/batteryarc-widget/batteryarc.lua b/batteryarc-widget/batteryarc.lua index cef1904..a15151f 100644 --- a/batteryarc-widget/batteryarc.lua +++ b/batteryarc-widget/batteryarc.lua @@ -20,7 +20,7 @@ local text = wibox.widget { id = "txt", font = "Play 6", align = 'center', -- align the text - valign = 'center', + valign = 'center', widget = wibox.widget.textbox } @@ -45,117 +45,94 @@ local batteryarc = wibox.widget { local last_battery_check = os.time() watch("acpi -i", 10, - function(widget, stdout) - local batteryType - - local battery_info = {} - local capacities = {} - - -- Change the logic of processing battery information from 'acpi -i' - for s in stdout:gmatch("[^\r\n]+") do - local status, charge_str = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*') - if charge_str ~= nil then - table.insert(battery_info, {status = status, charge = tonumber(charge_str)}) - else - local cap_str = string.match(s, '.+:.+last full capacity (%d+)') - if cap_str ~= nil then + function(widget, stdout) + local batteryType + + local battery_info = {} + local capacities = {} + for s in stdout:gmatch("[^\r\n]+") do + local status, charge_str, time = string.match(s, '.+: (%a+), (%d?%d?%d)%%,?.*') + if string.match(s, 'rate information') then + -- ignore such line + elseif 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 - - end - - -- total battery capacity - local total_capacity = 0 - for i, cap in ipairs(capacities) do - total_capacity = total_capacity + cap - end - - -- capacity charged into all batteries - local charge_cap = 0 - -- battery charge percentage 0~100 - local charge_perc = 0 - - for i, batt in ipairs(battery_info) do - -- BUG: batt.charge ranges from 0 to 100, should be divided by 100 - charge_cap = charge_cap + batt.charge/100 * capacities[i] - end - - - local status - - -- new logic to determine status - status = 'Full' - for i, batt in ipairs(battery_info) do - if batt.status == 'Charging' then - status = 'Charging' - break + + local capacity = 0 + for i, cap in ipairs(capacities) do + capacity = capacity + cap + end + + local charge = 0 + local status + for i, batt in ipairs(battery_info) do + if batt.charge >= charge then + -- use most charged battery status. This is arbitrary, and maybe another metric should be used + status = batt.status + end + + charge = charge + batt.charge * capacities[i] end - if batt.status == 'Discharging' then - status = 'Discharging' - break - end - end - - - if total_capacity > 0 then - charge_perc = charge_cap / total_capacity * 100 - end - - -- when widget.value is < 0.04, the widget shows a full circle (as widget.value=1) - -- so the charge_perc value is checked first - if charge_perc >= 5 then - widget.value = charge_perc / 100 - else - widget.value = 0.05 - end - - - if status == 'Charging' then - text_with_background.bg = beautiful.widget_green - text_with_background.fg = beautiful.widget_black - else - text_with_background.bg = beautiful.widget_transparent - text_with_background.fg = beautiful.widget_main_color - end - - text.text = string.format('%d', charge_perc) - - -- add variables to make it easy to change settings - local bat_high = 75 - local bat_low = 30 - --- if charge_perc <= bat_low then - if charge_perc <= bat_low then - batteryarc.colors = { beautiful.widget_red } - if 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() + + local charge_percentage + if capacity > 5 then + charge = charge / capacity + charge_percentage = charge / 100 + else + -- when widget.value is < 0.04, the widget shows a full circle (as widget.value=1) + charge_percentage = 0.05 end - elseif charge_perc > bat_low and charge_perc < bat_high then - batteryarc.colors = { beautiful.widget_yellow } - else - batteryarc.colors = { beautiful.widget_main_color } - end - end, - batteryarc) + + widget.value = charge / 100 + + if status == 'Charging' then + text_with_background.bg = beautiful.widget_green + text_with_background.fg = beautiful.widget_black + else + text_with_background.bg = beautiful.widget_transparent + text_with_background.fg = beautiful.widget_main_color + end + + --- if battery is fully charged (100) there is not enough place for three digits, so we don't show any text + text.text = charge == 100 + and '' + or string.format('%d', charge) + + if charge < 15 then + batteryarc.colors = { beautiful.widget_red } + if 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 + batteryarc.colors = { beautiful.widget_yellow } + else + batteryarc.colors = { beautiful.widget_main_color } + end + end, + batteryarc) -- Popup with battery info -- One way of creating a pop-up notification - naughty.notify local notification function show_battery_status() awful.spawn.easy_async([[bash -c 'acpi']], - function(stdout, _, _, _) - notification = naughty.notify { - text = stdout, - title = "Battery status", - timeout = 5, - hover_timeout = 0.5, - width = 200, - } - end) + function(stdout, _, _, _) + naughty.destroy(notification) + notification = naughty.notify { + text = stdout, + title = "Battery status", + timeout = 5, + hover_timeout = 0.5, + width = 200, + } + end) end batteryarc:connect_signal("mouse::enter", function() show_battery_status() end) @@ -175,7 +152,7 @@ function show_battery_warning() naughty.notify { icon = HOME .. "/.config/awesome/awesome-wm-widgets/batteryarc-widget/spaceman.jpg", icon_size = 100, - text = "Battery is dying", -- switch text and title + text = "Battery is dying", -- switch text and title title = "Huston, we have a problem", timeout = 25, -- show the warning for a longer time hover_timeout = 0.5, diff --git a/brightnessarc-widget/brightnessarc.lua b/brightnessarc-widget/brightnessarc.lua index 9bd2826..53ea218 100644 --- a/brightnessarc-widget/brightnessarc.lua +++ b/brightnessarc-widget/brightnessarc.lua @@ -2,19 +2,18 @@ -- Brightness Widget for Awesome Window Manager -- Shows the brightness level of the laptop display -- More details could be found here: --- https://github.com/streetturtle/awesome-wm-widgets/tree/master/brightness-widget +-- https://github.com/streetturtle/awesome-wm-widgets/tree/master/brightnessarc-widget -- @author Pavel Makhov --- @copyright 2017 Pavel Makhov +-- @copyright 2019 Pavel Makhov ------------------------------------------------- local wibox = require("wibox") local watch = require("awful.widget.watch") local spawn = require("awful.spawn") -local naughty = require("naughty") local PATH_TO_ICON = "/usr/share/icons/Arc/status/symbolic/display-brightness-symbolic.svg" -local GET_BRIGHTNESS_CMD = "light -G" -- "xbacklight -get" +local GET_BRIGHTNESS_CMD = "light -G" -- "xbacklight -get" local INC_BRIGHTNESS_CMD = "light -A 5" -- "xbacklight -inc 5" local DEC_BRIGHTNESS_CMD = "light -U 5" -- "xbacklight -dec 5" @@ -37,21 +36,19 @@ local brightnessarc = wibox.widget { widget = wibox.container.arcchart } -local brightnessarc_widget = wibox.container.mirror(brightnessarc, { horizontal = true }) - -local update_widget = function(widget, stdout, stderr, exitreason, exitcode) +local update_widget = function(widget, stdout) local brightness_level = string.match(stdout, "(%d?%d?)") brightness_level = tonumber(string.format("% 3d", brightness_level)) widget.value = brightness_level / 100; end, -brightnessarc:connect_signal("button::press", function(_,_,_,button) - if (button == 4) then spawn(INC_BRIGHTNESS_CMD, false) +brightnessarc:connect_signal("button::press", function(_, _, _, button) + if (button == 4) then spawn(INC_BRIGHTNESS_CMD, false) elseif (button == 5) then spawn(DEC_BRIGHTNESS_CMD, false) end end) watch(GET_BRIGHTNESS_CMD, 1, update_widget, brightnessarc) -return brightnessarc_widget +return brightnessarc diff --git a/run-shell/blur.png b/run-shell/blur.png Binary files differdeleted file mode 100644 index 4e8b54c..0000000 --- a/run-shell/blur.png +++ /dev/null diff --git a/run-shell/pixelate.png b/run-shell/pixelate.png Binary files differdeleted file mode 100644 index fedf320..0000000 --- a/run-shell/pixelate.png +++ /dev/null diff --git a/run-shell/run-shell.lua b/run-shell/run-shell.lua index 31d17aa..c2a2e29 100644 --- a/run-shell/run-shell.lua +++ b/run-shell/run-shell.lua @@ -7,21 +7,19 @@ -- @copyright 2019 Pavel Makhov ------------------------------------------------- -local capi = { - screen = screen, - client = client, -} local awful = require("awful") local gfs = require("gears.filesystem") local wibox = require("wibox") local gears = require("gears") local completion = require("awful.completion") +local naughty = require("naughty") local run_shell = awful.widget.prompt() local widget = {} function widget.new() + local widget_instance = { _cached_wiboxes = {} } @@ -32,41 +30,82 @@ function widget.new() ontop = true, height = 1060, width = 1920, - opacity = 0.6, - bg = '#000002' + opacity = 0.9, + bg = 'radial:960,540,20:960,540,700:0,#00000022:0.2,#33333388:1,#000000ff' + } + + local suspend_button = wibox.widget { + image = '/usr/share/icons/Arc/actions/symbolic/system-shutdown-symbolic.svg', + widget = wibox.widget.imagebox, + resize = false, + set_hover = function(self, opacity) + naughty.notify{text = tostring(self.opacity)} + self.opacity = opacity + self.image = '/usr/share/icons/Arc/actions/symbolic/system-shutdown-symbolic.svg' + end } + suspend_button:connect_signal("mouse::enter", function() + suspend_button:set_hover(1) + end) + + suspend_button:connect_signal("mouse::leave", function() + suspend_button:set_hover(0.2) + end) + w:setup { { { { { - markup = '<span font="awesomewm-font 14" color="#ffffff">a</span>', - widget = wibox.widget.textbox, + { + markup = '<span font="awesomewm-font 14" color="#ffffff">a</span>', + widget = wibox.widget.textbox, + }, + id = 'icon', + left = 10, + layout = wibox.container.margin + }, + { + run_shell, + left = 10, + layout = wibox.container.margin, }, - id = 'icon', - left = 10, - layout = wibox.container.margin + id = 'left', + layout = wibox.layout.fixed.horizontal + }, + bg = '#333333', + shape = function(cr, width, height) + gears.shape.rounded_rect(cr, width, height, 3) + end, + shape_border_color = '#74aeab', + shape_border_width = 1, + forced_width = 200, + forced_height = 50, + widget = wibox.container.background + }, + valign = 'center', + layout = wibox.container.place + }, + { + { + suspend_button, + { + image = '/usr/share/icons/Arc/actions/symbolic/application-exit-symbolic.svg', + resize = false, + widget = wibox.widget.imagebox, }, { - run_shell, - left = 10, - layout = wibox.container.margin, + image = '/usr/share/icons/Arc/actions/symbolic/application-exit-symbolic.svg', + resize = false, + widget = wibox.widget.imagebox }, - id = 'left', layout = wibox.layout.fixed.horizontal }, - widget = wibox.container.background, - bg = '#333333', - shape = function(cr, width, height) - gears.shape.rounded_rect(cr, width, height, 3) - end, - shape_border_color = '#74aeab', - shape_border_width = 1, - forced_width = 200, - forced_height = 50 + valign = 'bottom', + layout = wibox.container.place, }, - layout = wibox.container.place + layout = wibox.layout.stack } return w |