summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2026-05-13 00:43:09 -0700
committerDavid Vazgenovich Shakaryan <dvshakaryan@gmail.com>2026-05-13 00:43:09 -0700
commitce0dbc0a9627368b40ab178a6792cd0395f3300f (patch)
tree1b8d1cf9149213794e42fe592a4ecf1764206057
parent767c63ec322b9c76c743f0770d8cb23b7ffa67f3 (diff)
downloadpanel-ce0dbc0a9627368b40ab178a6792cd0395f3300f.tar.gz
panel-ce0dbc0a9627368b40ab178a6792cd0395f3300f.tar.xz
add polling battery module
-rwxr-xr-xpanel.py35
1 files changed, 32 insertions, 3 deletions
diff --git a/panel.py b/panel.py
index 854d57d..14349cf 100755
--- a/panel.py
+++ b/panel.py
@@ -446,6 +446,35 @@ class ModInterval(Mod):
def set_error(self):
self.out = Fmt.labelled(self.label, Fmt.bg('#a03000', ' error '))
+class ModBatteryPoll(ModInterval):
+ def __init__(self, battery, adapter=None, **kwargs):
+ kwargs.setdefault('label', 'BAT')
+ super().__init__(**kwargs)
+ self.battery = battery
+ self.adapter = adapter
+
+ self._percent = None
+ self._charging = None
+
+ def refresh(self):
+ with open(f'/sys/class/power_supply/{self.battery}/capacity') as f:
+ percent = f.read().rstrip('\n')
+ charging = None
+ if self.adapter:
+ with open(f'/sys/class/power_supply/{self.adapter}/online') as f:
+ charging = (f.read().rstrip('\n') == '1')
+ self._update_state(percent, charging)
+
+ def _update_state(self, percent=None, charging=None):
+ if percent is not None:
+ self._percent = percent
+ if charging is not None:
+ self._charging = charging
+ buf = f'{self._percent}%%'
+ if self._charging:
+ buf += ' (charging)'
+ self.out = Fmt.labelled(self.label, buf)
+
class ModNetIf(ModInterval):
def __init__(self, ifname, regex=False, **kwargs):
kwargs.setdefault('label', ifname)
@@ -554,8 +583,8 @@ class Panel:
def spawn_panel(self):
self.panel = subprocess.Popen(
('/home/david/dev/lemonbar-xft/lemonbar',
- '-f', 'Monospace:size=10:dpi=96',
- '-f', 'Monospace:size=10:dpi=96:bold',
+ '-f', 'Monospace:size=10',
+ '-f', 'Monospace:size=10:bold',
'-b',
'-g', f'{self.width}x{self.height}',
'-u', '2',
@@ -630,5 +659,5 @@ Panel(
{'id': 'Asia/Yerevan', 'label': 'AMT'})),
max_paint_delay=0.01,
width=(re.match(r'[0-9]+', HLWMClient.exec('attr', 'monitors.0.geometry'))
- .group())
+ .group()),
).run()