From 02fd2e97f2c8a53bf2344e6fa8b14769cb15ee38 Mon Sep 17 00:00:00 2001 From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> Date: Thu, 16 Jan 2025 16:35:37 +1100 Subject: refactor: move ts to src Also move popupwindow to own file --- src/modules/bar.tsx | 500 ++++++++++++++++++++++++++++++++++++++++++ src/modules/launcher.tsx | 391 +++++++++++++++++++++++++++++++++ src/modules/notifications.tsx | 57 +++++ src/modules/notifpopups.tsx | 49 +++++ src/modules/osds.tsx | 326 +++++++++++++++++++++++++++ src/services/apps.ts | 3 + src/services/math.ts | 151 +++++++++++++ src/services/monitors.ts | 127 +++++++++++ src/services/players.ts | 154 +++++++++++++ src/services/updates.ts | 148 +++++++++++++ src/utils/icons.ts | 86 ++++++++ src/utils/mpris.ts | 16 ++ src/utils/strings.ts | 1 + src/utils/system.ts | 21 ++ src/utils/widgets.ts | 45 ++++ src/widgets/notification.tsx | 132 +++++++++++ src/widgets/popupwindow.ts | 39 ++++ 17 files changed, 2246 insertions(+) create mode 100644 src/modules/bar.tsx create mode 100644 src/modules/launcher.tsx create mode 100644 src/modules/notifications.tsx create mode 100644 src/modules/notifpopups.tsx create mode 100644 src/modules/osds.tsx create mode 100644 src/services/apps.ts create mode 100644 src/services/math.ts create mode 100644 src/services/monitors.ts create mode 100644 src/services/players.ts create mode 100644 src/services/updates.ts create mode 100644 src/utils/icons.ts create mode 100644 src/utils/mpris.ts create mode 100644 src/utils/strings.ts create mode 100644 src/utils/system.ts create mode 100644 src/utils/widgets.ts create mode 100644 src/widgets/notification.tsx create mode 100644 src/widgets/popupwindow.ts (limited to 'src') diff --git a/src/modules/bar.tsx b/src/modules/bar.tsx new file mode 100644 index 0000000..b56d94a --- /dev/null +++ b/src/modules/bar.tsx @@ -0,0 +1,500 @@ +import { execAsync, GLib, register, Variable } from "astal"; +import { bind, kebabify } from "astal/binding"; +import { App, Astal, astalify, Gdk, Gtk, type ConstructProps } from "astal/gtk3"; +import AstalBluetooth from "gi://AstalBluetooth"; +import AstalHyprland from "gi://AstalHyprland"; +import AstalNetwork from "gi://AstalNetwork"; +import AstalNotifd from "gi://AstalNotifd"; +import AstalTray from "gi://AstalTray"; +import AstalWp01 from "gi://AstalWp"; +import { bar as config } from "../../config"; +import type { Monitor } from "../services/monitors"; +import Players from "../services/players"; +import Updates from "../services/updates"; +import { getAppCategoryIcon } from "../utils/icons"; +import { ellipsize } from "../utils/strings"; +import { osIcon } from "../utils/system"; +import { setupCustomTooltip } from "../utils/widgets"; + +const hyprland = AstalHyprland.get_default(); + +const hookFocusedClientProp = ( + self: any, // Ugh why is there no base Widget type + prop: keyof AstalHyprland.Client, + callback: (c: AstalHyprland.Client | null) => void +) => { + let id: number | null = null; + let lastClient: AstalHyprland.Client | null = null; + self.hook(hyprland, "notify::focused-client", () => { + if (id) lastClient?.disconnect(id); + lastClient = hyprland.focusedClient; // Can be null + id = lastClient?.connect(`notify::${kebabify(prop)}`, () => callback(lastClient)); + callback(lastClient); + }); + self.connect("destroy", () => id && lastClient?.disconnect(id)); + callback(lastClient); +}; + +const OSIcon = () =>