From d0fbb19623e4fb6097e1ff3ee49c6a76a0928d0e Mon Sep 17 00:00:00 2001 From: srdusr Date: Thu, 13 Jun 2024 13:11:05 +0200 Subject: Add ags --- .config/ags/widget/bar/buttons/Workspaces.ts | 38 ++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .config/ags/widget/bar/buttons/Workspaces.ts (limited to '.config/ags/widget/bar/buttons/Workspaces.ts') 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), +}) -- cgit v1.2.3