Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Power panel percentage ignores second battery on dual-battery laptops
Reported by SilviuManeaDev · filed Aug 29, 2026Closed upstream on 2026-09-20 by bjarneo via an automated message, as a duplicate of #6885 (R-1856). GitHub close reason: completed.
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- Not yet mapped to any requirement or component.
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
What happened
On a dual-battery laptop (Lenovo ThinkPad, internal battery BAT0 + swappable/slice battery BAT1), the power panel's percentage, size, cycles, time, and rate stats only reflect BAT0 and silently ignore BAT1.
omarchy battery status --shell output:
percentage 78%
state discharging
rate 9.1W
size 25Wh
time 2h 17m
cycles 17
threshold 75-80%The true combined state (upower -i /org/freedesktop/UPower/devices/DisplayDevice):
state: discharging
energy: 67.54 Wh
energy-full: 73.16 Wh
percentage: 92.3182%So the panel shows 78% / 25Wh when the real combined charge is 92% / 73Wh — a large, user-visible discrepancy. Note the bar's battery icon and progress-bar fill are actually correct, because Panel.qml sources those from UPower.displayDevice (properly aggregated). Only the numeric stats are wrong, because they come from a separate script.
Root cause
/usr/share/omarchy/bin/omarchy-battery-status picks a single battery like this:
battery=$(upower -e 2>/dev/null | grep BAT | head -n 1)On a multi-battery system, upower -e lists all battery_BAT* devices, and head -n 1 arbitrarily takes the first one (BAT0) rather than the combined DisplayDevice (or a proper sum across all present batteries). Everything downstream in the script (percentage, energy-full/size, cycles, rate, thresholds) is then computed from that single battery only.
Expected
The power panel's percentage/size/cycles/time/rate should reflect the combined state of all present batteries, consistent with what the bar's icon/progress-bar already show via UPower.displayDevice.
Suggested fix direction
omarchy-battery-status should query upower -i $(upower -e | grep '/battery_DisplayDevice') (or equivalent aggregation across all battery_BAT* devices) instead of head -n 1 on the first battery, at least for percentage/energy/state. Cycle count and per-battery threshold could still reasonably be reported per-battery or summed, but the primary percentage must not silently drop a battery.
Steps to reproduce
- On a laptop with two batteries present under
/sys/class/power_supply/(e.g.BAT0andBAT1), runupower -e | grep BAT— confirm both are listed. - Run
omarchy battery status --shelland compare toupower -i /org/freedesktop/UPower/devices/DisplayDevice. - Observe the panel percentage/size/stats matches only the first-listed battery, not the combined total.
System details
- Omarchy version: 4.0.1-1
- Kernel: 7.1.9-arch1-2
- Machine: Lenovo 20UROITORT (ThinkPad)
- CPU: Intel Core i7-8650U
- GPU: Intel UHD Graphics 620 (Kaby Lake-R)
- UPower: 1.91.3 (client and daemon)
- Batteries: BAT0 (LGC 01AV420, 24.51Wh design) + BAT1 (LGC 01AV491, 47.5Wh design)
View raw text
## What happened On a dual-battery laptop (Lenovo ThinkPad, internal battery `BAT0` + swappable/slice battery `BAT1`), the power panel's percentage, size, cycles, time, and rate stats only reflect `BAT0` and silently ignore `BAT1`. `omarchy battery status --shell` output: ``` percentage 78% state discharging rate 9.1W size 25Wh time 2h 17m cycles 17 threshold 75-80% ``` The true combined state (`upower -i /org/freedesktop/UPower/devices/DisplayDevice`): ``` state: discharging energy: 67.54 Wh energy-full: 73.16 Wh percentage: 92.3182% ``` So the panel shows **78% / 25Wh** when the real combined charge is **92% / 73Wh** — a large, user-visible discrepancy. Note the bar's battery *icon* and *progress-bar fill* are actually correct, because `Panel.qml` sources those from `UPower.displayDevice` (properly aggregated). Only the numeric stats are wrong, because they come from a separate script. ## Root cause `/usr/share/omarchy/bin/omarchy-battery-status` picks a single battery like this: ```bash battery=$(upower -e 2>/dev/null | grep BAT | head -n 1) ``` On a multi-battery system, `upower -e` lists all `battery_BAT*` devices, and `head -n 1` arbitrarily takes the first one (`BAT0`) rather than the combined `DisplayDevice` (or a proper sum across all present batteries). Everything downstream in the script (percentage, energy-full/size, cycles, rate, thresholds) is then computed from that single battery only. ## Expected The power panel's percentage/size/cycles/time/rate should reflect the combined state of all present batteries, consistent with what the bar's icon/progress-bar already show via `UPower.displayDevice`. ## Suggested fix direction `omarchy-battery-status` should query `upower -i $(upower -e | grep '/battery_DisplayDevice')` (or equivalent aggregation across all `battery_BAT*` devices) instead of `head -n 1` on the first battery, at least for percentage/energy/state. Cycle count and per-battery threshold could still reasonably be reported per-battery or summed, but the primary percentage must not silently drop a battery. ## Steps to reproduce 1. On a laptop with two batteries present under `/sys/class/power_supply/` (e.g. `BAT0` and `BAT1`), run `upower -e | grep BAT` — confirm both are listed. 2. Run `omarchy battery status --shell` and compare to `upower -i /org/freedesktop/UPower/devices/DisplayDevice`. 3. Observe the panel percentage/size/stats matches only the first-listed battery, not the combined total. ## System details - Omarchy version: 4.0.1-1 - Kernel: 7.1.9-arch1-2 - Machine: Lenovo 20UROITORT (ThinkPad) - CPU: Intel Core i7-8650U - GPU: Intel UHD Graphics 620 (Kaby Lake-R) - UPower: 1.91.3 (client and daemon) - Batteries: BAT0 (LGC 01AV420, 24.51Wh design) + BAT1 (LGC 01AV491, 47.5Wh design)
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
Not linked to any known issue, other report or change yet.
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
No decision has been recorded yet.