60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import { App, Astal, Gtk, Gdk } from "astal/gtk3"
|
|
import { Variable, bind } from "astal"
|
|
import Hyprland from "gi://AstalHyprland"
|
|
|
|
const time = Variable("").poll(1000, "date")
|
|
|
|
function Workspaces() {
|
|
const hypr = Hyprland.get_default()
|
|
|
|
return <box className="Workspaces">
|
|
{bind(hypr, "workspaces").as(wss => wss
|
|
.filter(ws => !(ws.id >= -99 && ws.id <= -2)) // filter out special workspaces
|
|
.sort((a, b) => a.id - b.id)
|
|
.map(ws => (
|
|
<button
|
|
className={bind(hypr, "focusedWorkspace").as(fw =>
|
|
ws === fw ? "focused" : "")}
|
|
onClicked={() => ws.focus()}>
|
|
{ws.id}
|
|
</button>
|
|
))
|
|
)}
|
|
</box>
|
|
}
|
|
|
|
export default function Bar(gdkmonitor: Gdk.Monitor) {
|
|
const { TOP, LEFT, RIGHT } = Astal.WindowAnchor
|
|
|
|
return <window
|
|
className="Bar"
|
|
gdkmonitor={gdkmonitor}
|
|
exclusivity={Astal.Exclusivity.EXCLUSIVE}
|
|
anchor={TOP | LEFT | RIGHT}
|
|
application={App}>
|
|
<centerbox>
|
|
<box hexpand halign={Gtk.Align.START}>
|
|
<Workspaces />
|
|
</box>
|
|
<button
|
|
onClicked="/home/tola/dotfiles/rofi/launcher/launcher.sh"
|
|
halign={Gtk.Align.CENTER}
|
|
>
|
|
Menu
|
|
</button>
|
|
<button
|
|
onClicked="echo hello"
|
|
halign={Gtk.Align.CENTER}
|
|
>
|
|
Welcome to AGS!
|
|
</button>
|
|
<button
|
|
onClicked={() => print("hello")}
|
|
halign={Gtk.Align.CENTER}
|
|
>
|
|
<label label={time()} />
|
|
</button>
|
|
</centerbox>
|
|
</window>
|
|
}
|