New
- Battery in system indicators: kairpodsd exports the AirPods level to BlueZ (
org.bluez.BatteryProvider1), so UPower and desktop battery widgets show it (#31 by @dolfbarr, closes #6). Requires BlueZ ≥ 5.71, or experimental mode on older BlueZ (the installer enables it). Disable withexport_bluez_battery = falsein~/.config/kairpods/config.toml. - Translations: German, Spanish, French, Italian, Japanese, Dutch, Polish, Brazilian Portuguese, Russian, Turkish and Simplified Chinese (#2). To add a language, see "Translating the widget" in CONTRIBUTING.md.
- Charging case battery is shown next to the earbuds when the AirPods report it (#22).
- Connection duration in the popup header (#26).
- Panel percentage: optional battery percentage next to the panel icon (#27). The desktop widget hides the noise controls when it is too small for them.
- Model-aware noise controls: Adaptive is hidden on AirPods Max, AirPods Pro (1st gen) and Beats Fit Pro. Models without noise control (AirPods 1–3, AirPods 4) no longer show the panel (#10).
- Nix flake with a NixOS module (#23 by @Brad-Hesson).
Fixes
- With Bluetooth off or blocked, kairpodsd no longer retries in an ever-growing loop that could fill the disk with logs (#29).
- The battery badge on the panel icon now appears (it never showed before).
- The connection pulse is centered on the panel icon (#30).
- Light themes no longer turn the popup grey.
- Longer labels fit in the battery rings and popup header.
Docs
- Setting up stem-press media controls with
mpris-proxy(#28). - Notes on how the AirPods protocol was reverse engineered (#8).
Upgrade: re-run the installer, curl -fsSL https://raw.githubusercontent.com/can1357/kAirPods/master/scripts/get.sh | bash, then restart plasmashell (systemctl --user restart plasma-plasmashell) so the new widget and its translations load.