feat: add ipc commands for stuff

This commit is contained in:
2 * r + 2 * t 2025-06-08 20:25:54 +10:00
parent c1d1bf447b
commit c214b3c5d6
5 changed files with 110 additions and 4 deletions

View file

@ -1,7 +1,7 @@
<h1 align=center>caelestia-shell</h1>
<div align=center>
![GitHub last commit](https://img.shields.io/github/last-commit/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=9ccbfb)
![GitHub Repo stars](https://img.shields.io/github/stars/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=b9c8da)
![GitHub repo size](https://img.shields.io/github/repo-size/caelestia-dots/shell?style=for-the-badge&labelColor=101418&color=d3bfe6)
@ -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

View file

@ -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");
}
}
}

View file

@ -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

View file

@ -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();
}
}
}

View file

@ -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 {