import Hyprland from "gi://AstalHyprland" import { bind, Variable } from "astal" import { Gtk } from "astal/gtk4" function WorkspaceButton(ws: Hyprland.Workspace) { const hypr = Hyprland.get_default() const classNames = Variable.derive( [bind(hypr, "focusedWorkspace"), bind(hypr, "clients")], (fws, _) => { const classes = [] const active = fws.id == ws.id active && classes.push("active") const occupied = hypr.get_workspace(ws.id)?.get_clients()?.length > 0; occupied && classes.push("occupied"); return classes; }) const classes = classNames() return ( ) } export default function Workspaces() { const hypr = Hyprland.get_default() return {bind(hypr, "workspaces").as((workspaces) => workspaces .filter(ws => !(ws.id >= -99 && ws.id < -2)) .sort((a, b) => a.id - b.id) .map((ws) => ( WorkspaceButton(ws) )), )} }