Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-4743GitHub issuePublicReceived

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.

Received and recorded verbatim. Nothing has been checked yet.

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

Power panel percentage ignores second battery on dual-battery laptopsrevision 1 · captured 2026-10-04 12:03 UTC via poll

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

  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)
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.