From a91c8cf8f22bc6ecb0b168a04c5afe37a6580e8a Mon Sep 17 00:00:00 2001 From: Alex Blank Date: Mon, 3 Aug 2026 17:54:39 +0200 Subject: [PATCH] feat(pi-status): integrate desktop status bridge Expose the persistent Pi session controls through the desktop launcher, Noctalia, and user service. --- .config/environment.d/pi-status-bridge.conf | 2 ++ .config/hypr/hyprland.lua | 4 +-- .../90-machine.toml##class.arch_desktop | 25 ++++++++++++++++--- .../90-machine.toml##class.arch_laptop | 2 +- .config/systemd/user/pi-status-bridge.service | 13 ++++++++++ .local/bin/pi-status-ui | 4 +++ .../share/noctalia/plugins/pi-status-bridge | 1 + 7 files changed, 44 insertions(+), 7 deletions(-) create mode 100644 .config/environment.d/pi-status-bridge.conf create mode 100644 .config/systemd/user/pi-status-bridge.service create mode 100755 .local/bin/pi-status-ui create mode 120000 .local/share/noctalia/plugins/pi-status-bridge diff --git a/.config/environment.d/pi-status-bridge.conf b/.config/environment.d/pi-status-bridge.conf new file mode 100644 index 0000000..7804e88 --- /dev/null +++ b/.config/environment.d/pi-status-bridge.conf @@ -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 diff --git a/.config/hypr/hyprland.lua b/.config/hypr/hyprland.lua index 2b50e6a..dc7ff6e 100644 --- a/.config/hypr/hyprland.lua +++ b/.config/hypr/hyprland.lua @@ -62,7 +62,7 @@ hl.workspace_rule({ -- Application and session bindings. 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. 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)) @@ -139,7 +139,7 @@ local function float_rule(name, match, border_size) end 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("qalculate", { title = "^Qalculate!$" }) float_rule("psensor", { class = "^Psensor$" }) diff --git a/.config/noctalia/90-machine.toml##class.arch_desktop b/.config/noctalia/90-machine.toml##class.arch_desktop index ffd0473..b97a3ed 100644 --- a/.config/noctalia/90-machine.toml##class.arch_desktop +++ b/.config/noctalia/90-machine.toml##class.arch_desktop @@ -1,10 +1,18 @@ # 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] position = "bottom" layer = "top" +scale = 0.95 capsule_radius = 5 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 margin_ends = 0 padding = 0 @@ -15,7 +23,7 @@ shadow = false auto_hide = false smart_auto_hide = false reserve_space = true -start = ["tray", "group:g4", "group:g2", "privacy"] +start = ["tray", "group:g4", "privacy"] thickness = 39 widget_spacing = 10 @@ -31,7 +39,7 @@ padding = 6.0 enabled = true fill = "surface_variant" id = "g2" -members = ["network_rx", "network_tx", "network"] +members = ["network", "bluetooth"] opacity = 1.0 padding = 6.0 @@ -48,10 +56,19 @@ radius = 5.0 enabled = true fill = "surface_variant" id = "g4" -members = ["cpu", "temp", "ram", "gpu", "gpu_temp", "disk"] +members = ["pi-status", "cpu", "temp", "ram", "gpu", "gpu_temp", "disk"] opacity = 1.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] type = "sysmon" stat = "gpu_usage" diff --git a/.config/noctalia/90-machine.toml##class.arch_laptop b/.config/noctalia/90-machine.toml##class.arch_laptop index b24212f..522fc06 100644 --- a/.config/noctalia/90-machine.toml##class.arch_laptop +++ b/.config/noctalia/90-machine.toml##class.arch_laptop @@ -32,7 +32,7 @@ padding = 6.0 enabled = true fill = "surface_variant" id = "g2" -members = ["network-rate", "network", "bluetooth"] +members = ["network", "bluetooth"] opacity = 1.0 padding = 6.0 diff --git a/.config/systemd/user/pi-status-bridge.service b/.config/systemd/user/pi-status-bridge.service new file mode 100644 index 0000000..9b011a7 --- /dev/null +++ b/.config/systemd/user/pi-status-bridge.service @@ -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 diff --git a/.local/bin/pi-status-ui b/.local/bin/pi-status-ui new file mode 100755 index 0000000..e9b2a00 --- /dev/null +++ b/.local/bin/pi-status-ui @@ -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" "$@" diff --git a/.local/share/noctalia/plugins/pi-status-bridge b/.local/share/noctalia/plugins/pi-status-bridge new file mode 120000 index 0000000..bd500f2 --- /dev/null +++ b/.local/share/noctalia/plugins/pi-status-bridge @@ -0,0 +1 @@ +../../../../projects/pi-gui/noctalia-v5-plugin/pi-status-bridge \ No newline at end of file