diff options
author | delta <darkussdelta@gmail.com> | 2024-03-05 14:48:59 +0100 |
---|---|---|
committer | delta <darkussdelta@gmail.com> | 2024-03-05 14:48:59 +0100 |
commit | 510ef8e178929cf5e0c7fd5a5120fecf5f1b79f2 (patch) | |
tree | 3582e5cd7d000335ca94f2a009f3aed57bd86919 /.config/awesome/services/battery.lua | |
parent | 95ba8030f722a616cff06c122dcfb2f63e25cf45 (diff) |
idk anymore
Diffstat (limited to '.config/awesome/services/battery.lua')
-rw-r--r-- | .config/awesome/services/battery.lua | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/.config/awesome/services/battery.lua b/.config/awesome/services/battery.lua new file mode 100644 index 0000000..98bacc9 --- /dev/null +++ b/.config/awesome/services/battery.lua @@ -0,0 +1,81 @@ +local UPower = require("lgi").UPowerGlib +local gobject = require "gears.object" +local gtimer = require "gears.timer" +local phosphor = require "assets.phosphor" +local qmath = require "quarrel.math" +local qvars = require "quarrel.vars" + +local upower = assert(UPower.Client.new_full()) +local inner + +for _, device in ipairs(upower:get_devices()) do + if UPower.Device.kind_to_string(device.kind) == "battery" and device.model == "Primary" then + inner = device + break + end +end + +local _level, _state + +---@class Battery: gears.object +---@field _private { level: number, state: string} +local battery = gobject { + class = { + set_level = function(self, level) + _level = level + self:emit_signal("level", level) + end, + get_level = function() + return _level + end, + + set_state = function(self, state) + _state = state + self:emit_signal("state", state) + end, + get_state = function() + return _state + end, + }, + enable_properties = true, +} + +local function icon_handler() + local icon_data = battery.state == "charging" and { "charging", "green" } + or qmath.step_value(battery.level, { + { 0, { "empty", "red" } }, + { 20, { "low", "red" } }, + { 40, { "medium", "yellow" } }, + { 60, { "high", "green" } }, + { 80, { "full", "green" } }, + { 100 }, + }) + + battery:emit_signal("icon", phosphor["battery_vertical_" .. icon_data[1] .. "_fill"], qvars.colors[icon_data[2]]) +end + +local function level_handler() + battery.level = qmath.percentage(inner.energy, inner.energy_full) +end + +local function state_handler() + battery.state = UPower.Device.state_to_string(inner.state) +end + +function inner.on_notify.state() + state_handler() + icon_handler() +end + +function inner.on_notify.energy() + level_handler() + icon_handler() +end + +gtimer.delayed_call(function() + state_handler() + level_handler() + icon_handler() +end) + +return battery |