import { App } from "astal/gtk3" import { Variable, GLib, bind } from "astal" import { Astal, Gtk, Gdk } from "astal/gtk3" import Hyprland from "gi://AstalHyprland" import Mpris from "gi://AstalMpris" import Battery from "gi://AstalBattery" import Wp from "gi://AstalWp" import Network from "gi://AstalNetwork" import Tray from "gi://AstalTray" function SysTray() { const tray = Tray.get_default() return {bind(tray, "items").as(items => items.map(item => ( ["dbusmenu", ag])} menuModel={bind(item, "menuModel")}> )))} } function Wifi() { const network = Network.get_default() const wifi = bind(network, "wifi") return {wifi.as(wifi => wifi && ( ))} } function AudioSlider() { const speaker = Wp.get_default()?.audio.defaultSpeaker! return speaker.volume = value} value={bind(speaker, "volume")} /> } function BatteryLevel() { const bat = Battery.get_default() return } function Media() { const mpris = Mpris.get_default() return {bind(mpris, "players").as(ps => ps[0] ? ( `background-image: url('${cover}');` )} /> ) : ( } function Workspaces() { const hypr = Hyprland.get_default(); return ( {bind(hypr, "focusedWorkspace").as((fw) => { if (!fw) return null; // Determine the current chunk of 5 visible workspace buttons const currentChunkStart = Math.floor((fw.id - 1) / 5) * 5 + 1; const visibleIds = Array.from({ length: 5 }, (_, i) => currentChunkStart + i); return visibleIds.map((id) => { // Try to get the real workspace, fall back to a dummy one if it doesn't exist const ws = hypr.workspaces.find((w) => w.id === id) ?? Hyprland.Workspace.dummy(id, null); return ( ); }); })} ); } function FocusedClient() { const hypr = Hyprland.get_default() const focused = bind(hypr, "focusedClient") return {focused.as(client => ( client && } function Time({ format = "%H:%M %a %b %d" }) { const time = Variable("").poll(1000, () => GLib.DateTime.new_now_local().format(format)!) return