import Gtk from "gi://Gtk?version=3.0" import AstalBattery from "gi://AstalBattery" import { type Binding, Variable, bind } from "astal" const battery = AstalBattery.get_default() const CHARGING = 1 const DISCHARGING = 2 const FULLY_CHARGED = 4 function fmtTime(seconds: number) { if (!seconds || seconds <= 0) return null const h = Math.floor(seconds / 3600) const m = Math.round((seconds % 3600) / 60) return h > 0 ? `${h}h ${m}m` : `${m}m` } const status = Variable.derive( [bind(battery, "state"), bind(battery, "time-to-empty"), bind(battery, "time-to-full")], (state, toEmpty, toFull) => { if (state === FULLY_CHARGED) return "fully charged" if (state === CHARGING) { const t = fmtTime(toFull) return t ? `charging ยท ${t} to full` : "charging" } if (state === DISCHARGING) { const t = fmtTime(toEmpty) return t ? `${t} left` : "on battery" } return "" }, ) export const batteryIcon: Binding | null = battery.isBattery ? bind(battery, "icon-name") : null export const batteryPercent: Binding | null = battery.isBattery ? bind(battery, "percentage").as((p) => `${Math.round(p * 100)}%`) : null export function BatterySection() { if (!battery.isBattery) return return ( ) }