diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-08-28 15:13:40 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-08-28 15:13:40 +1000 |
| commit | f2b79757e26823cc1db1cf077dc03f1781562861 (patch) | |
| tree | 6b16aa6ec5e954f6eb9d7f181cf31096298d3fc1 /services | |
| parent | nix/hm: restart shell on config changes (#482) (diff) | |
| download | caelestia-shell-f2b79757e26823cc1db1cf077dc03f1781562861.tar.gz caelestia-shell-f2b79757e26823cc1db1cf077dc03f1781562861.tar.bz2 caelestia-shell-f2b79757e26823cc1db1cf077dc03f1781562861.zip | |
lock: add caps/num lock indicator
Closes #485
Diffstat (limited to 'services')
| -rw-r--r-- | services/Hypr.qml | 42 |
1 files changed, 36 insertions, 6 deletions
diff --git a/services/Hypr.qml b/services/Hypr.qml index d4782dc..c90ccf03 100644 --- a/services/Hypr.qml +++ b/services/Hypr.qml @@ -1,5 +1,6 @@ pragma Singleton +import qs.components.misc import Quickshell import Quickshell.Hyprland import Quickshell.Io @@ -15,11 +16,14 @@ Singleton { readonly property HyprlandToplevel activeToplevel: Hyprland.activeToplevel?.wayland?.activated ? Hyprland.activeToplevel : null readonly property HyprlandWorkspace focusedWorkspace: Hyprland.focusedWorkspace readonly property HyprlandMonitor focusedMonitor: Hyprland.focusedMonitor - readonly property int activeWsId: focusedWorkspace?.id ?? 1 + + property var keyboard + readonly property bool capsLock: keyboard?.capsLock ?? false + readonly property bool numLock: keyboard?.numLock ?? false + readonly property string kbLayoutFull: keyboard?.active_keymap ?? "?" readonly property string kbLayout: kbMap.get(kbLayoutFull) ?? "??" - property string kbLayoutFull: "?" - property var kbMap: new Map() + readonly property var kbMap: new Map() function dispatch(request: string): void { Hyprland.dispatch(request); @@ -37,8 +41,10 @@ Singleton { if (n.endsWith("v2")) return; - if (n === "activelayout") { - root.kbLayoutFull = event.parse(2)[1]; + if (n === "configreloaded") { + setDynamicConfsProc.running = true; + } else if (n === "activelayout") { + devicesProc.running = true; } else if (["workspace", "moveworkspace", "activespecial", "focusedmon"].includes(n)) { Hyprland.refreshWorkspaces(); Hyprland.refreshMonitors(); @@ -73,10 +79,34 @@ Singleton { } Process { + id: devicesProc + running: true command: ["hyprctl", "-j", "devices"] stdout: StdioCollector { - onStreamFinished: root.kbLayoutFull = JSON.parse(text).keyboards.find(k => k.main).active_keymap + onStreamFinished: root.keyboard = JSON.parse(text).keyboards.find(k => k.main) + } + } + + Process { + id: setDynamicConfsProc + + running: true + command: ["hyprctl", "--batch", "keyword bindln ,Caps_Lock,global,caelestia:reloadDevices;keyword bindln ,Num_Lock,global,caelestia:reloadDevices"] + } + + IpcHandler { + target: "hypr" + + function reloadDevices(): void { + devicesProc.running = true; } } + + CustomShortcut { + name: "reloadDevices" + description: "Reload devices" + onPressed: devicesProc.running = true + onReleased: devicesProc.running = true + } } |