From e79fa091cfbdbd9dfe2ed19a0a5f92604047b0a9 Mon Sep 17 00:00:00 2001 From: Mora Unie Youer Date: Sun, 2 Mar 2025 17:56:12 +0300 Subject: feat: basic tray and improved workspaces buttons --- widget/Bar.tsx | 98 ------------------------------------------ widget/bar/Bar.tsx | 122 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+), 98 deletions(-) delete mode 100644 widget/Bar.tsx create mode 100644 widget/bar/Bar.tsx (limited to 'widget') diff --git a/widget/Bar.tsx b/widget/Bar.tsx deleted file mode 100644 index 02aa3ba..0000000 --- a/widget/Bar.tsx +++ /dev/null @@ -1,98 +0,0 @@ -import { App, Astal, Gtk, Gdk } from "astal/gtk4" -import { exec, GLib, Variable } from "astal" - -type NiriWorkspace = { - id: number, - idx: number, - name: string | null, - output: string, - is_active: boolean, - is_focused: boolean, - active_window_id: number | null, -}; - -function getWorkspaces(): NiriWorkspace[] { - // NOTE: this works only in non-systemd environment on NixOS - // TODO: try to use Niri socket if it is documented - return JSON.parse(exec("niri msg -j workspaces")); -} - -function getWorkspacesByOutput(output: string): NiriWorkspace[] { - return getWorkspaces().filter(workspace => workspace.output == output).sort((a, b) => a.idx - b.idx); -} - -function focusWorkspace(idx: number) { - // NOTE: this works only in non-systemd environment on NixOS - // TODO: try to use Niri socket if it is documented - exec(`niri msg action focus-workspace ${idx}`); -} - -type WorkspaceButtonArguments = { - idx: number, - isActive: boolean, - isFocused: boolean, -}; - -function WorkspaceButton(args: WorkspaceButtonArguments) { - const classes: string[] = []; - args.isActive && classes.push("active"); - args.isFocused && classes.push("focused"); - return