From c214b3c5d6cf48ed719e9c13a4f5bda4dc7ad107 Mon Sep 17 00:00:00 2001
From: 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>
Date: Sun, 8 Jun 2025 20:25:54 +1000
Subject: feat: add ipc commands for stuff
---
README.md | 29 ++++++++++++++++++++++++++---
modules/Shortcuts.qml | 19 +++++++++++++++++++
services/Notifs.qml | 10 ++++++++++
services/Players.qml | 38 ++++++++++++++++++++++++++++++++++++++
services/Wallpapers.qml | 18 +++++++++++++++++-
5 files changed, 110 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index c7901ef..f8a9f82 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
caelestia-shell
-
+



@@ -35,9 +35,32 @@ For a preconfigured setup, install [`caelestia-hypr`](https://github.com/caelest
[this file](https://github.com/caelestia-dots/hypr/blob/main/hyprland/keybinds.conf#L1-L29) for an example on how to use global
shortcuts.
-There is only one IPC command as of now which can be used to get details about the currently active MPRIS player.
+All IPC commands can be accessed via `caelestia shell ...`. For example
```sh
-caelestia shell mpris getActive
+caelestia shell mpris getActive trackTitle
+```
+
+The list of IPC commands can be shown via `caelestia shell help`:
+```
+> caelestia shell help
+target mpris
+ function stop(): void
+ function play(): void
+ function next(): void
+ function getActive(prop: string): string
+ function list(): string
+ function playPause(): void
+ function pause(): void
+ function previous(): void
+target drawers
+ function list(): string
+ function toggle(drawer: string): void
+target wallpaper
+ function list(): string
+ function get(): string
+ function set(path: string): void
+target notifs
+ function clear(): void
```
## Credits
diff --git a/modules/Shortcuts.qml b/modules/Shortcuts.qml
index f6cc9e3..bed620c 100644
--- a/modules/Shortcuts.qml
+++ b/modules/Shortcuts.qml
@@ -1,6 +1,7 @@
import "root:/widgets"
import "root:/services"
import Quickshell
+import Quickshell.Io
Scope {
id: root
@@ -34,4 +35,22 @@ Scope {
description: "Interrupt launcher keybind"
onPressed: root.launcherInterrupted = true
}
+
+ IpcHandler {
+ target: "drawers"
+
+ function toggle(drawer: string): void {
+ if (list().split("\n").includes(drawer)) {
+ const visibilities = Visibilities.getForActive();
+ visibilities[drawer] = !visibilities[drawer];
+ } else {
+ console.warn(`[IPC] Drawer "${drawer}" does not exist`);
+ }
+ }
+
+ function list(): string {
+ const visibilities = Visibilities.getForActive();
+ return Object.keys(visibilities).filter(k => typeof visibilities[k] === "boolean").join("\n");
+ }
+ }
}
diff --git a/services/Notifs.qml b/services/Notifs.qml
index de53d89..4acd56f 100644
--- a/services/Notifs.qml
+++ b/services/Notifs.qml
@@ -4,6 +4,7 @@ pragma ComponentBehavior: Bound
import "root:/widgets"
import "root:/config"
import Quickshell
+import Quickshell.Io
import Quickshell.Services.Notifications
import QtQuick
@@ -42,6 +43,15 @@ Singleton {
}
}
+ IpcHandler {
+ target: "notifs"
+
+ function clear(): void {
+ for (const notif of root.list)
+ notif.popup = false;
+ }
+ }
+
component Notif: QtObject {
id: notif
diff --git a/services/Players.qml b/services/Players.qml
index cbaf550..e9a3de4 100644
--- a/services/Players.qml
+++ b/services/Players.qml
@@ -55,5 +55,43 @@ Singleton {
const active = root.active;
return active ? active[prop] ?? "Invalid property" : "No active player";
}
+
+ function list(): string {
+ return root.list.map(p => p.identity).join("\n");
+ }
+
+ function play(): void {
+ const active = root.active;
+ if (active?.canPlay)
+ active.play();
+ }
+
+ function pause(): void {
+ const active = root.active;
+ if (active?.canPause)
+ active.pause();
+ }
+
+ function playPause(): void {
+ const active = root.active;
+ if (active?.canTogglePlaying)
+ active.togglePlaying();
+ }
+
+ function previous(): void {
+ const active = root.active;
+ if (active?.canGoPrevious)
+ active.previous();
+ }
+
+ function next(): void {
+ const active = root.active;
+ if (active?.canGoNext)
+ active.next();
+ }
+
+ function stop(): void {
+ root.active?.stop();
+ }
}
}
diff --git a/services/Wallpapers.qml b/services/Wallpapers.qml
index 0b2efa0..4d7b179 100644
--- a/services/Wallpapers.qml
+++ b/services/Wallpapers.qml
@@ -51,6 +51,22 @@ Singleton {
reloadableId: "wallpapers"
+ IpcHandler {
+ target: "wallpaper"
+
+ function get(): string {
+ return root.actualCurrent;
+ }
+
+ function set(path: string): void {
+ root.setWallpaper(path);
+ }
+
+ function list(): string {
+ return root.list.map(w => w.path).join("\n");
+ }
+ }
+
FileView {
path: root.currentNamePath
watchChanges: true
@@ -76,7 +92,7 @@ Singleton {
property string path
- command: ["caelestia", "wallpaper", "-f", path]
+ command: ["caelestia", "wallpaper", "-Q", "-f", path]
}
Process {
--
cgit v1.2.3-freya