summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-28 15:13:40 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-08-28 15:13:40 +1000
commitf2b79757e26823cc1db1cf077dc03f1781562861 (patch)
tree6b16aa6ec5e954f6eb9d7f181cf31096298d3fc1 /services
parentnix/hm: restart shell on config changes (#482) (diff)
downloadcaelestia-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.qml42
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
+ }
}