85 lines
1.9 KiB
Lua
85 lines
1.9 KiB
Lua
-- YAWL, Battery widget module
|
|
local battery = {}
|
|
local mt = {}
|
|
|
|
-- Requires
|
|
local wibox = require("wibox")
|
|
local base = require("yawl.base")
|
|
local utils = require("yawl.utils")
|
|
local beautiful = require("beautiful")
|
|
local watch = require("awful.widget.watch")
|
|
|
|
-- Entrypoint
|
|
function mt.__call()
|
|
|
|
-- base txt widget
|
|
local t = base.txt()
|
|
local w = base.bg()
|
|
w:set_widget(t)
|
|
-- change default bg to battery full
|
|
w:set_bg(beautiful.yawl_battery_full)
|
|
|
|
-- icon widget
|
|
local i = base.icon("")
|
|
|
|
-- merge of the two
|
|
local widget = wibox.widget {
|
|
i,
|
|
w,
|
|
layout = wibox.layout.fixed.horizontal,
|
|
}
|
|
|
|
-- watch func
|
|
watch(
|
|
'acpi', 10,
|
|
function(_, stdout, stderr, exitreason, exitcode)
|
|
-- get lines for acpi
|
|
local lines = utils.split(stdout, "[^\r\n]+")
|
|
-- use first line (BAT0), get elements
|
|
-- 1 : Battery
|
|
-- 2 : :0
|
|
-- 3 : State (Full, Discharching, Charging)
|
|
-- 4 : Level (X%)
|
|
local parts = utils.split(lines[1], "%S+")
|
|
|
|
-- format data in dedicated vars
|
|
local level = string.gsub(parts[4], "%%,?", "")
|
|
local state = string.gsub(parts[3], ",", "")
|
|
|
|
-- set background based on level
|
|
if tonumber(level) >= 70 then
|
|
i:set_text(" ")
|
|
w:set_bg(beautiful.yawl_battery_full)
|
|
elseif tonumber(level) >= 30 then
|
|
i:set_text(" ")
|
|
w:set_bg(beautiful.yawl_battery_mid)
|
|
else
|
|
i:set_text(" ")
|
|
w:set_bg(beautiful.yawl_battery_low)
|
|
end
|
|
|
|
|
|
-- set state based on charging, full or discharching
|
|
local st = ""
|
|
if state == "Full" then
|
|
st = ""
|
|
elseif state == "Discharging" then
|
|
st = ""
|
|
elseif state == "Charging" then
|
|
st = ""
|
|
else
|
|
st = ""
|
|
end
|
|
|
|
t:set_text(" " .. st .. " " .. level .. "% ")
|
|
|
|
end,
|
|
w
|
|
)
|
|
|
|
return widget
|
|
|
|
end
|
|
|
|
-- Return widget
|
|
return setmetatable(battery, mt)
|