diff options
Diffstat (limited to '.config/ags/widget/bar/buttons/Workspaces.ts')
| -rw-r--r-- | .config/ags/widget/bar/buttons/Workspaces.ts | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/.config/ags/widget/bar/buttons/Workspaces.ts b/.config/ags/widget/bar/buttons/Workspaces.ts new file mode 100644 index 0000000..982ba13 --- /dev/null +++ b/.config/ags/widget/bar/buttons/Workspaces.ts @@ -0,0 +1,38 @@ +import PanelButton from "../PanelButton" +import options from "options" +import { sh, range } from "lib/utils" + +const hyprland = await Service.import("hyprland") +const { workspaces } = options.bar.workspaces + +const dispatch = (arg: string | number) => { + sh(`hyprctl dispatch workspace ${arg}`) +} + +const Workspaces = (ws: number) => Widget.Box({ + children: range(ws || 20).map(i => Widget.Label({ + attribute: i, + vpack: "center", + label: `${i}`, + setup: self => self.hook(hyprland, () => { + self.toggleClassName("active", hyprland.active.workspace.id === i) + self.toggleClassName("occupied", (hyprland.getWorkspace(i)?.windows || 0) > 0) + }), + })), + setup: box => { + if (ws === 0) { + box.hook(hyprland.active.workspace, () => box.children.map(btn => { + btn.visible = hyprland.workspaces.some(ws => ws.id === btn.attribute) + })) + } + }, +}) + +export default () => PanelButton({ + window: "overview", + class_name: "workspaces", + on_scroll_up: () => dispatch("m+1"), + on_scroll_down: () => dispatch("m-1"), + on_clicked: () => App.toggleWindow("overview"), + child: workspaces.bind().as(Workspaces), +}) |
