summaryrefslogtreecommitdiff
path: root/services/GameMode.qml
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 /services/GameMode.qml
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
Diffstat (limited to 'services/GameMode.qml')
-rw-r--r--services/GameMode.qml67
1 files changed, 67 insertions, 0 deletions
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;
+ }
+ }
+}