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.
T2 Macs: battery charge limiting is unreachable — applesmc binds no device, and the t2bce stack has no SMC transport
Reported by ratandeepbansal · filed Sep 4, 2026 · open at source
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?
- AreaOutside the audited area· Decided by agents · verified
- 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?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
What happened
On Apple T2 Macs (MacBookPro16,1, 2019 16"), no battery charge-limit feature can work,
because Linux has no SMC access at all on this hardware — and nothing in Omarchy
currently surfaces that, so the machine looks like an ordinary laptop that just
happens to be missing the sysfs knob.
Charge limiting is a firmware function: software cannot refuse power arriving from
the charger, only the SMC can hold the pack at a target level. On pre-T2 Intel Macs the
SMC was reachable on the legacy 0x300 I/O port and applesmc could write the BCLM
key. On T2 Macs the SMC moved behind the T2 coprocessor, and no in-tree or
out-of-tree driver implements that transport. applesmc therefore probes, finds no
legacy device, and binds nothing.
This is a hardware-support gap rather than an Omarchy bug, but it has two concrete
consequences for Omarchy that are worth tracking:
- Charge-limit support (previously requested in #3036 / #1289) can never apply to this
class of machine, and any future implementation will need to degrade cleanly rather
than assume charge_control_end_threshold exists.
2. There's currently no way for a T2 user to discover why it doesn't work. A
hardware-capability note (or a line in the power panel / omarchy-battery-* output)
would save people a long dig through sysfs.
Evidence
$ cat /sys/class/dmi/id/product_name
MacBookPro16,1
$ uname -r
7.1.8-arch1-Watanare-T2-3-t2
$ ls /sys/class/power_supply/BAT0/
alarm capacity charge_full charge_full_design charge_now current_avg
current_now cycle_count device extensions hwmon4 manufacturer model_name
power present status subsystem technology temp type uevent
voltage_min_design voltage_now wakeup68
# no charge_control_start_threshold / charge_control_end_threshold / charge_behaviour
$ find /sys -maxdepth 5 -iname '*charge_control*'
# (no output)
$ readlink -f /sys/class/power_supply/BAT0/device
/sys/devices/LNXSYSTM:00/.../ACPI0001:00/ACPI0002:00
# plain ACPI battery — read-only, no control method in Apple's DSDT
$ lsmod | grep applesmc
applesmc 45056 0 # refcount 0
$ ls /sys/bus/platform/drivers/applesmc
ls: cannot access '/sys/bus/platform/drivers/applesmc': No such file or directory
# module loaded, zero devices bound: the legacy SMC I/O port is absent on T2
$ lsmod | grep t2bce
t2bce_audio t2bce_vhci t2bce_core t2bce_dma
# the T2 stack implements audio + VHCI only; no SMC key transport, no chardevWhy the usual workaround doesn't apply
The standard advice for Intel Macs is to boot macOS once, write BCLM=80 with a tool
like zackelia/bclm, and let the SMC enforce it
persistently under any OS. That only helps dual-boot users — on a
wiped, Linux-only T2 Mac there is no macOS partition left to boot, and no way back
in short of reinstalling macOS.
What would help
Broadly, better T2 MacBook support. Specifically for this area:
- Treat charge limiting as an explicitly hardware-gated feature: detect the absence of
charge_control_end_threshold and say why on Apple T2 hardware, rather than
silently offering nothing.
- If a battery-high / unplug-reminder hook ever lands alongside the existing
battery-low.d hooks, it would be the only usable substitute on this hardware.
System
- Omarchy
4.0.0.alpha MacBookPro16,1(Apple T2)- Kernel
7.1.8-arch1-Watanare-T2-3-t2 - Battery
bq40z651(SMP), 112 cycles,charge_full7079000 /charge_full_design8790000
View raw text
### What happened On Apple T2 Macs (`MacBookPro16,1`, 2019 16"), no battery charge-limit feature can work, because Linux has **no SMC access at all** on this hardware — and nothing in Omarchy currently surfaces that, so the machine looks like an ordinary laptop that just happens to be missing the sysfs knob. Charge limiting is a firmware function: software cannot refuse power arriving from the charger, only the SMC can hold the pack at a target level. On pre-T2 Intel Macs the SMC was reachable on the legacy `0x300` I/O port and `applesmc` could write the `BCLM` key. On T2 Macs the SMC moved behind the T2 coprocessor, and no in-tree or out-of-tree driver implements that transport. `applesmc` therefore probes, finds no legacy device, and binds nothing. This is a hardware-support gap rather than an Omarchy bug, but it has two concrete consequences for Omarchy that are worth tracking: 1. Charge-limit support (previously requested in #3036 / #1289) can never apply to this class of machine, and any future implementation will need to degrade cleanly rather than assume `charge_control_end_threshold` exists. 2. There's currently no way for a T2 user to discover *why* it doesn't work. A hardware-capability note (or a line in the power panel / `omarchy-battery-*` output) would save people a long dig through sysfs. ### Evidence ```console $ cat /sys/class/dmi/id/product_name MacBookPro16,1 $ uname -r 7.1.8-arch1-Watanare-T2-3-t2 $ ls /sys/class/power_supply/BAT0/ alarm capacity charge_full charge_full_design charge_now current_avg current_now cycle_count device extensions hwmon4 manufacturer model_name power present status subsystem technology temp type uevent voltage_min_design voltage_now wakeup68 # no charge_control_start_threshold / charge_control_end_threshold / charge_behaviour $ find /sys -maxdepth 5 -iname '*charge_control*' # (no output) $ readlink -f /sys/class/power_supply/BAT0/device /sys/devices/LNXSYSTM:00/.../ACPI0001:00/ACPI0002:00 # plain ACPI battery — read-only, no control method in Apple's DSDT $ lsmod | grep applesmc applesmc 45056 0 # refcount 0 $ ls /sys/bus/platform/drivers/applesmc ls: cannot access '/sys/bus/platform/drivers/applesmc': No such file or directory # module loaded, zero devices bound: the legacy SMC I/O port is absent on T2 $ lsmod | grep t2bce t2bce_audio t2bce_vhci t2bce_core t2bce_dma # the T2 stack implements audio + VHCI only; no SMC key transport, no chardev ``` ### Why the usual workaround doesn't apply The standard advice for Intel Macs is to boot macOS once, write `BCLM=80` with a tool like [zackelia/bclm](https://github.com/zackelia/bclm), and let the SMC enforce it persistently under any OS. That only helps dual-boot users — on a wiped, Linux-only T2 Mac there is no macOS partition left to boot, and no way back in short of reinstalling macOS. ### What would help Broadly, better T2 MacBook support. Specifically for this area: - Treat charge limiting as an explicitly hardware-gated feature: detect the absence of `charge_control_end_threshold` and say *why* on Apple T2 hardware, rather than silently offering nothing. - If a `battery-high` / unplug-reminder hook ever lands alongside the existing `battery-low.d` hooks, it would be the only usable substitute on this hardware. ### System - Omarchy `4.0.0.alpha` - `MacBookPro16,1` (Apple T2) - Kernel `7.1.8-arch1-Watanare-T2-3-t2` - Battery `bq40z651` (SMP), 112 cycles, `charge_full` 7079000 / `charge_full_design` 8790000
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.
- Out of scopeDecided by agents · verified · 2026-10-09 10:45 UTC