import { App, Astal, Gdk, Gtk } from "astal/gtk4" import { bind, Binding } from "astal" import PowerProfiles from "gi://AstalPowerProfiles"; import Battery from "gi://AstalBattery"; import DateTime from "@lib/widgets/datetime"; import Workspace from "./workspace"; import TrayView from "./tray"; type Substitution = { charging?: string, idle?: string } const getBatteryIcon = (percentage: number, charging: Binding) => { const levels = Array.from({ length: 10 }, (_, i) => (i + 1) * 10); const level = levels.find((level) => percentage <= level)!; const substitutions: Record = { 100: { charging: "battery-level-100-charged-symbolic" } }; return charging.as(c => c ? substitutions[level]?.charging || `battery-level-${level}-charging-symbolic` : substitutions[level]?.idle || `battery-level-${level}-symbolic` ); }; const BatteryInfo = ({ battery }: { battery: Battery.Device }) => { const percentage = bind(battery, "percentage").as(p => Math.floor(p * 100)); const charging = bind(battery, "charging"); const power = PowerProfiles.get_default(); return ( {percentage.as(p => )} ); }; export default function Bar(monitor_id: number) { const { BOTTOM, LEFT, RIGHT } = Astal.WindowAnchor const CENTER = Gtk.Align.CENTER; const battery = Battery.get_default(); const openQuickSettings = (_self: Gtk.Button, state: Gdk.ButtonEvent) => { if (state.get_button() === Gdk.BUTTON_PRIMARY) App.get_window("quick_settings")?.show() } return {[ Workspace(), , BatteryInfo({ battery }),