aboutsummaryrefslogtreecommitdiff
path: root/.config/ags/widget/bar/buttons/Workspaces.ts
blob: 982ba133bb96fdad392a573caae8c952482230c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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),
})