diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-08 20:25:54 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-06-08 20:25:54 +1000 |
| commit | c214b3c5d6cf48ed719e9c13a4f5bda4dc7ad107 (patch) | |
| tree | dd8078ebde032078ccab26f02350c0d7ae50bfb3 | |
| parent | colours: fix switching (diff) | |
| download | caelestia-shell-c214b3c5d6cf48ed719e9c13a4f5bda4dc7ad107.tar.gz caelestia-shell-c214b3c5d6cf48ed719e9c13a4f5bda4dc7ad107.tar.bz2 caelestia-shell-c214b3c5d6cf48ed719e9c13a4f5bda4dc7ad107.zip | |
feat: add ipc commands for stuff
| -rw-r--r-- | README.md | 29 | ||||
| -rw-r--r-- | modules/Shortcuts.qml | 19 | ||||
| -rw-r--r-- | services/Notifs.qml | 10 | ||||
| -rw-r--r-- | services/Players.qml | 38 | ||||
| -rw-r--r-- | services/Wallpapers.qml | 18 |
5 files changed, 110 insertions, 4 deletions
@@ -1,7 +1,7 @@ <h1 align=center>caelestia-shell</h1> <div align=center> - +    @@ -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 <prop> +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 { |