summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-15 22:55:28 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-15 22:55:28 +1000
commit9c6520b879f29bb9f99f3eef80492f688bacde67 (patch)
tree1d3137f3df51393cab7002d5c93a46d621231e4f
parentutilities/toggles: convert to row of icon buttons (diff)
downloadcaelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.tar.gz
caelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.tar.bz2
caelestia-shell-9c6520b879f29bb9f99f3eef80492f688bacde67.zip
utilities/toggles: add gamemode
Closes #617
-rw-r--r--modules/utilities/cards/Toggles.qml6
-rw-r--r--services/GameMode.qml67
-rw-r--r--services/Hypr.qml3
3 files changed, 76 insertions, 0 deletions
diff --git a/modules/utilities/cards/Toggles.qml b/modules/utilities/cards/Toggles.qml
index b74fa02..a5a3db3 100644
--- a/modules/utilities/cards/Toggles.qml
+++ b/modules/utilities/cards/Toggles.qml
@@ -72,6 +72,12 @@ StyledRect {
});
}
}
+
+ Toggle {
+ icon: "gamepad"
+ checked: GameMode.enabled
+ onClicked: GameMode.enabled = !GameMode.enabled
+ }
}
}
diff --git a/services/GameMode.qml b/services/GameMode.qml
new file mode 100644
index 0000000..d7124cc
--- /dev/null
+++ b/services/GameMode.qml
@@ -0,0 +1,67 @@
+pragma Singleton
+
+import Quickshell
+import Quickshell.Io
+import QtQuick
+
+Singleton {
+ id: root
+
+ property alias enabled: props.enabled
+
+ function setDynamicConfs(): void {
+ Quickshell.execDetached(["hyprctl", "--batch", "keyword animations:enabled 0;keyword decoration:shadow:enabled 0;keyword decoration:blur:enabled 0;keyword general:gaps_in 0;keyword general:gaps_out 0;keyword general:border_size 1;keyword decoration:rounding 0;keyword general:allow_tearing 1"]);
+ }
+
+ onEnabledChanged: {
+ if (enabled)
+ setDynamicConfs();
+ else
+ Quickshell.execDetached(["hyprctl", "reload"]);
+ }
+
+ PersistentProperties {
+ id: props
+
+ property bool enabled
+
+ reloadableId: "gameMode"
+ }
+
+ Connections {
+ target: Hypr
+
+ function onConfigReloaded(): void {
+ if (props.enabled)
+ root.setDynamicConfs();
+ }
+ }
+
+ Process {
+ running: true
+ command: ["hyprctl", "getoption", "animations:enabled", "-j"]
+ stdout: StdioCollector {
+ onStreamFinished: props.enabled = JSON.parse(text).int === 0
+ }
+ }
+
+ IpcHandler {
+ target: "gameMode"
+
+ function isEnabled(): bool {
+ return props.enabled;
+ }
+
+ function toggle(): void {
+ props.enabled = !props.enabled;
+ }
+
+ function enable(): void {
+ props.enabled = true;
+ }
+
+ function disable(): void {
+ props.enabled = false;
+ }
+ }
+}
diff --git a/services/Hypr.qml b/services/Hypr.qml
index 011e8b1..62bdf78 100644
--- a/services/Hypr.qml
+++ b/services/Hypr.qml
@@ -26,6 +26,8 @@ Singleton {
readonly property string kbLayout: kbMap.get(kbLayoutFull) ?? "??"
readonly property var kbMap: new Map()
+ signal configReloaded
+
function dispatch(request: string): void {
Hyprland.dispatch(request);
}
@@ -43,6 +45,7 @@ Singleton {
return;
if (n === "configreloaded") {
+ root.configReloaded();
setDynamicConfsProc.running = true;
} else if (n === "activelayout") {
devicesProc.running = true;