feat(pi-status): integrate desktop status bridge

Expose the persistent Pi session controls through the desktop launcher, Noctalia, and user service.
This commit is contained in:
2026-08-03 17:54:39 +02:00
parent b220b21509
commit a91c8cf8f2
7 changed files with 44 additions and 7 deletions
@@ -0,0 +1,2 @@
# Used by the Noctalia Pi Status Bridge adapter and the Hyprland launcher.
PI_STATUS_UI_BINARY=/home/alex/.local/bin/pi-status-ui
+2 -2
View File
@@ -62,7 +62,7 @@ hl.workspace_rule({
-- Application and session bindings. -- Application and session bindings.
local noctalia_ipc = "noctalia msg " local noctalia_ipc = "noctalia msg "
local pi_status_ui_toggle = 'ui="${PI_STATUS_UI_BINARY:-$HOME/projects/pi-status-bridge/ui/src-tauri/target/release/pi-status-ui}"; if test -x "$ui"; then setsid -f env TMPDIR=/tmp "$ui" --toggle >/tmp/pi-status-ui.log 2>&1; fi' local pi_status_ui_toggle = 'ui="${PI_STATUS_UI_BINARY:-$HOME/.local/bin/pi-status-ui}"; if test -x "$ui"; then setsid -f env TMPDIR=/tmp "$ui" --toggle >/tmp/pi-status-ui.log 2>&1; fi'
-- Tap and release Super on its own to open Noctalia's control-center home. -- Tap and release Super on its own to open Noctalia's control-center home.
hl.bind(main_mod .. " + SUPER_L", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle control-center"), { release = true }) hl.bind(main_mod .. " + SUPER_L", hl.dsp.exec_cmd(noctalia_ipc .. "panel-toggle control-center"), { release = true })
hl.bind(main_mod .. " + RETURN", hl.dsp.exec_cmd(terminal)) hl.bind(main_mod .. " + RETURN", hl.dsp.exec_cmd(terminal))
@@ -139,7 +139,7 @@ local function float_rule(name, match, border_size)
end end
hl.window_rule({ name = "thunderbird-workspace", match = { class = "^Thunderbird$" }, workspace = "9" }) hl.window_rule({ name = "thunderbird-workspace", match = { class = "^Thunderbird$" }, workspace = "9" })
float_rule("pi-status-ui", { class = "^pi-status-ui$" }, 1) float_rule("pi-status-ui", { class = "^(pi-status-ui|Pi-status-ui)$" }, 1)
float_rule("alsamixer", { title = "^alsamixer$" }, 1) float_rule("alsamixer", { title = "^alsamixer$" }, 1)
float_rule("qalculate", { title = "^Qalculate!$" }) float_rule("qalculate", { title = "^Qalculate!$" })
float_rule("psensor", { class = "^Psensor$" }) float_rule("psensor", { class = "^Psensor$" })
@@ -1,10 +1,18 @@
# Desktop-specific shell layout and hardware telemetry. # Desktop-specific shell layout and hardware telemetry.
# Pi Status Bridge is installed locally from ~/projects/pi-gui.
[plugins]
enabled = ["alex/system-status", "alex/pi-status-bridge"]
[widget.pi-status]
type = "alex/pi-status-bridge:bridge"
[bar.main] [bar.main]
position = "bottom" position = "bottom"
layer = "top" layer = "top"
scale = 0.95
capsule_radius = 5 capsule_radius = 5
center = ["group:g3", "notifications"] center = ["group:g3", "notifications"]
end = ["bluetooth", "input_volume", "volume", "control-center", "group:g1", "session"] end = ["group:g2", "group:g6", "group:g1", "session"]
font_weight = 400 font_weight = 400
margin_ends = 0 margin_ends = 0
padding = 0 padding = 0
@@ -15,7 +23,7 @@ shadow = false
auto_hide = false auto_hide = false
smart_auto_hide = false smart_auto_hide = false
reserve_space = true reserve_space = true
start = ["tray", "group:g4", "group:g2", "privacy"] start = ["tray", "group:g4", "privacy"]
thickness = 39 thickness = 39
widget_spacing = 10 widget_spacing = 10
@@ -31,7 +39,7 @@ padding = 6.0
enabled = true enabled = true
fill = "surface_variant" fill = "surface_variant"
id = "g2" id = "g2"
members = ["network_rx", "network_tx", "network"] members = ["network", "bluetooth"]
opacity = 1.0 opacity = 1.0
padding = 6.0 padding = 6.0
@@ -48,10 +56,19 @@ radius = 5.0
enabled = true enabled = true
fill = "surface_variant" fill = "surface_variant"
id = "g4" id = "g4"
members = ["cpu", "temp", "ram", "gpu", "gpu_temp", "disk"] members = ["pi-status", "cpu", "temp", "ram", "gpu", "gpu_temp", "disk"]
opacity = 1.0 opacity = 1.0
padding = 6.0 padding = 6.0
[[bar.main.capsule_group]]
enabled = true
fill = "surface_variant"
id = "g6"
members = ["input_volume", "volume"]
opacity = 1.0
padding = 6.0
radius = 5.0
[widget.gpu] [widget.gpu]
type = "sysmon" type = "sysmon"
stat = "gpu_usage" stat = "gpu_usage"
@@ -32,7 +32,7 @@ padding = 6.0
enabled = true enabled = true
fill = "surface_variant" fill = "surface_variant"
id = "g2" id = "g2"
members = ["network-rate", "network", "bluetooth"] members = ["network", "bluetooth"]
opacity = 1.0 opacity = 1.0
padding = 6.0 padding = 6.0
@@ -0,0 +1,13 @@
[Unit]
Description=Pi Status Bridge home agent
After=graphical-session.target
[Service]
Type=simple
Environment=PATH=/home/alex/.local/bin:/usr/local/bin:/usr/bin:/bin
ExecStart=/home/alex/.local/bin/pi-status-bridge --session-root %h/.local/state/pi-status-bridge/sessions
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
# The opaque release window runs natively on Wayland; disable WebKit DMABUF,
# which is unreliable with this NVIDIA desktop's compositor path.
exec env WEBKIT_DISABLE_DMABUF_RENDERER=1 "$HOME/projects/pi-gui/ui/src-tauri/target/release/pi-status-ui" "$@"
+1
View File
@@ -0,0 +1 @@
../../../../projects/pi-gui/noctalia-v5-plugin/pi-status-bridge