mirror of
https://github.com/xsghetti/HyprCrux.git
synced 2025-07-04 06:10:40 -04:00
38 lines
1.1 KiB
JavaScript
38 lines
1.1 KiB
JavaScript
import PanelButton from "../PanelButton.js"
|
|
import options from "../../../options.js"
|
|
import { sh, range } from "../../../lib/utils.js"
|
|
|
|
const hyprland = await Service.import("hyprland")
|
|
const { workspaces } = options.bar.workspaces
|
|
|
|
const dispatch = (arg) => {
|
|
sh(`hyprctl dispatch workspace ${arg}`)
|
|
}
|
|
|
|
const Workspaces = (ws) => 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(workspaces),
|
|
})
|