Files
dotfiles-violet-chaton/ags-v3/widget/modules/Battery.tsx
Tetardtek 51b725e1f7 fix(ags-v3): nice-to-have — portabilité, perf, réactivité
- Prompt.tsx: GLib.get_user_name() au lieu de hardcode "tetardtek"
- ghost-shell.desktop: $HOME au lieu de chemin absolu
- SystemStats.tsx: lecture /proc/stat + /proc/meminfo (zero fork, économie batterie)
- Battery.tsx: createDerivedBinding percentage+charging — réactif sur branchement
2026-03-26 09:13:36 +01:00

39 lines
1.1 KiB
TypeScript

import AstalBattery from "gi://AstalBattery"
import { createBinding, createDerivedBinding } from "ags"
export default function Battery() {
const bat = AstalBattery.get_default()
const percentage = createBinding(bat, "percentage")
const charging = createBinding(bat, "charging")
const text = createDerivedBinding(
[percentage, charging],
(p: number, isCharging: boolean) => {
const pct = Math.round(p * 100)
let icon = ""
if (isCharging) icon = "󰂄"
else if (pct > 90) icon = "󰁹"
else if (pct > 70) icon = "󰂁"
else if (pct > 50) icon = "󰁿"
else if (pct > 30) icon = "󰁽"
else if (pct > 10) icon = "󰁻"
else icon = "󰂃"
return `${icon} ${pct}%`
},
)
const cls = createDerivedBinding(
[percentage, charging],
(p: number, isCharging: boolean) => {
const pct = Math.round(p * 100)
if (isCharging) return "battery charging"
if (pct <= 10) return "battery low"
if (pct <= 20) return "battery warning"
return "battery"
},
)
return <label class={cls} label={text} />
}