pragma Singleton import Quickshell import Quickshell.Hyprland import Quickshell.Io import QtQuick Singleton { id: root readonly property var toplevels: Hyprland.toplevels readonly property var workspaces: Hyprland.workspaces readonly property var monitors: Hyprland.monitors readonly property HyprlandToplevel activeToplevel: Hyprland.activeToplevel readonly property HyprlandWorkspace focusedWorkspace: Hyprland.focusedWorkspace readonly property HyprlandMonitor focusedMonitor: Hyprland.focusedMonitor readonly property int activeWsId: focusedWorkspace?.id ?? 1 readonly property string kbLayout: kbMap.get(kbLayoutFull) ?? "??" property string kbLayoutFull: "?" property var kbMap: new Map() function dispatch(request: string): void { Hyprland.dispatch(request); } function monitorFor(screen: ShellScreen): HyprlandMonitor { return Hyprland.monitorFor(screen); } Connections { target: Hyprland function onRawEvent(event: HyprlandEvent): void { const n = event.name; if (n.endsWith("v2")) return; if (n === "activelayout") { root.kbLayoutFull = event.parse(2)[1]; } else if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) { Hyprland.refreshWorkspaces(); Hyprland.refreshMonitors(); } else if (["openwindow", "closewindow", "movewindow"].includes(n)) { Hyprland.refreshToplevels(); Hyprland.refreshWorkspaces(); } else if (n.includes("mon")) { Hyprland.refreshMonitors(); } else if (n.includes("workspace")) { Hyprland.refreshWorkspaces(); } else if (n.includes("window") || n.includes("group") || ["pin", "fullscreen", "changefloatingmode", "minimize"].includes(n)) { Hyprland.refreshToplevels(); } } } FileView { id: kbLayoutFile path: Quickshell.env("CAELESTIA_XKB_RULES_PATH") || "/usr/share/X11/xkb/rules/base.lst" onLoaded: { const lines = text().match(/! layout\n([\s\S]*?)\n\n/)[1].split("\n"); for (const line of lines) { if (!line.trim() || line.trim().startsWith("!")) continue; const match = line.match(/^\s*([a-z]{2,})\s+([a-zA-Z() ]+)$/); if (match) root.kbMap.set(match[2], match[1]); } } } Process { running: true command: ["hyprctl", "-j", "devices"] stdout: StdioCollector { onStreamFinished: root.kbLayoutFull = JSON.parse(text).keyboards.find(k => k.main).active_keymap } } }