From 7855a01e5462420dd4e79ecafae59a99ddd5292c Mon Sep 17 00:00:00 2001 From: jbergner Date: Mon, 31 Aug 2026 15:44:33 +0200 Subject: [PATCH] c0.6.2 --- INSTALLATION.md | 6 +- Panel.qml | 128 +++++++++++--------- README.md | 12 +- backend/bin/omarchy-citizen-backend | Bin 2166936 -> 2166936 bytes backend/cmd/omarchy-citizen-backend/main.go | 2 +- citizenctl | 79 ++++++++---- install.sh | 2 +- manifest.json | 4 +- 8 files changed, 139 insertions(+), 94 deletions(-) diff --git a/INSTALLATION.md b/INSTALLATION.md index 393dee8..aff0959 100644 --- a/INSTALLATION.md +++ b/INSTALLATION.md @@ -1,4 +1,4 @@ -# Omarchy Citizen 0.6.1 – Plug-&-Play-Installation +# Omarchy Citizen 0.6.2 – Plug-&-Play-Installation ## Ziel @@ -275,9 +275,9 @@ Damit brauchst du im ersten Supportkontakt normalerweise keine Terminalbefehle vom Nutzer anzufordern. -## Hotfix 0.6.1 – Setup-Button +## Hotfix 0.6.2 – Setup-Button -Version 0.6.1 ändert die Ausführung der Panel-Aktionen grundlegend. +Version 0.6.2 ändert die Ausführung der Panel-Aktionen grundlegend. Beim Klick auf **EINRICHTEN & STARTKLAR MACHEN** wird die Aktion nun direkt als Quickshell-Prozess gestartet. Das Panel zeigt sofort **WIRD GESTARTET**. diff --git a/Panel.qml b/Panel.qml index d9c1edf..4512784 100644 --- a/Panel.qml +++ b/Panel.qml @@ -12,7 +12,7 @@ Panel { property var anchorItem: null property var hostWidget: null - property string pluginVersion: "0.6.1" + property string pluginVersion: "0.6.2" property string health: "checking" property string depsState: "checking" property string depsMissing: "" @@ -47,6 +47,7 @@ Panel { readonly property color warning: "#ffd276" readonly property color danger: "#ff8fa1" readonly property color muted: "#a8bbc9" + readonly property string uiFont: "sans-serif" readonly property string controlScript: decodeURIComponent( Qt.resolvedUrl("citizenctl").toString().replace(/^file:\/\//, "") @@ -95,7 +96,7 @@ Panel { values[lines[i].slice(0, p)] = lines[i].slice(p + 1) } - pluginVersion = values.plugin_version || "0.6.1" + pluginVersion = values.plugin_version || "0.6.2" health = values.health || "setup" depsState = values.deps || "missing" depsMissing = values.deps_missing || "" @@ -220,7 +221,9 @@ Panel { onExited: function(exitCode) { if (exitCode === 0) { root.actionError = "" - root.actionStatus = "Gestartet." + root.actionStatus = root.actionKind === "primary" && root.health !== "ready" + ? "Setup-Fenster wurde geöffnet. Folge dort einfach den angezeigten Schritten." + : "Aktion wurde gestartet." root.refreshStatus() if (root.actionCloseOnSuccess) @@ -302,7 +305,7 @@ Panel { anchors.centerIn: parent text: "✦" color: root.healthColor() - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.title font.bold: true } @@ -314,7 +317,7 @@ Panel { Text { text: "OMARCHY CITIZEN" color: root.barForeground - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.title font.bold: true } @@ -322,7 +325,7 @@ Panel { Text { text: root.headline() color: root.healthColor() - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall font.bold: true } @@ -333,7 +336,7 @@ Panel { width: parent.width text: root.subline() color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall wrapMode: Text.WordWrap } @@ -344,10 +347,13 @@ Panel { ? "… WIRD GESTARTET" : root.primaryText() foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true active: root.health === "ready" || actionProc.running - onClicked: root.runAction(root.health === "repair" ? "repair" : "primary") + onClicked: root.runAction( + root.health === "repair" ? "repair" : "primary", + root.health === "ready" + ) } Text { @@ -355,7 +361,7 @@ Panel { width: parent.width text: root.actionStatus color: root.accent - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -377,7 +383,7 @@ Panel { anchors.margins: Style.space(8) text: root.actionError color: root.danger - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -404,7 +410,7 @@ Panel { Text { text: "HILFE OHNE LINUX-WISSEN" color: root.accent - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall font.bold: true } @@ -421,7 +427,7 @@ Panel { width: helpGrid.cellWidth text: "↻ Problem beheben" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("repair") } @@ -430,7 +436,7 @@ Panel { width: helpGrid.cellWidth text: "▣ Support-Paket erstellen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("support") } @@ -440,7 +446,7 @@ Panel { width: parent.width text: "Das Support-Paket sammelt Diagnoseinformationen automatisch und maskiert typische persönliche Daten vor dem Export." color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -469,13 +475,13 @@ Panel { StatusChip { label: "LUG" - value: root.helperState === "ready" ? "OK" : "Setup" + value: root.helperState === "ready" ? "bereit" : "fehlt" chipColor: root.stateColor(root.helperState) } StatusChip { label: "Launcher" - value: root.launcherState === "ready" ? "OK" : "Setup" + value: root.launcherState === "ready" ? "bereit" : "Setup" chipColor: root.stateColor(root.launcherState) } @@ -492,7 +498,7 @@ Panel { (root.helperVersion !== "" ? root.helperVersion : "nicht eingerichtet") + " · Plugin: " + (root.pluginManaged === "git" ? (root.pluginAuto === "true" ? "Auto" : "Git") : "ZIP") color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -503,7 +509,7 @@ Panel { width: parent.width text: root.advancedVisible ? "▲ Erweiterte Optionen ausblenden" : "▼ Erweiterte Optionen anzeigen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.advancedVisible = !root.advancedVisible } @@ -528,7 +534,7 @@ Panel { Text { text: "ERWEITERTE OPTIONEN" color: root.accent - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall font.bold: true } @@ -565,7 +571,7 @@ Panel { Text { text: "PLUGIN-UPDATES" color: root.accent - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall font.bold: true } @@ -599,7 +605,7 @@ Panel { width: pluginUpdateGrid.cellWidth text: "Plugin-Update prüfen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("plugin-update-check") } @@ -608,7 +614,7 @@ Panel { width: pluginUpdateGrid.cellWidth text: "Plugin jetzt aktualisieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true active: root.pluginUpdate === "available" onClicked: root.runAction("plugin-update-now") @@ -618,7 +624,7 @@ Panel { width: pluginUpdateGrid.cellWidth text: root.pluginAuto === "true" ? "Auto-Updates ausschalten" : "Auto-Updates einschalten" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction(root.pluginAuto === "true" ? "plugin-auto-disable" : "plugin-auto-enable") } @@ -627,7 +633,7 @@ Panel { width: pluginUpdateGrid.cellWidth text: "Updater-Log öffnen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("updater-log") } @@ -639,7 +645,7 @@ Panel { ? "Auto-Updates verwenden Omarchys eigenen Plugin-Updater mit Validierung und Rollback. Das beim Aktivieren vorhandene Git-Remote wird als vertrauenswürdige Quelle gespeichert." : "Die aktuelle ZIP-Installation bleibt bewusst ohne unbekannte Update-Quelle. Sobald Omarchy Citizen aus einem Git-Repository installiert wird, erkennt das Backend dessen origin automatisch." color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -658,7 +664,7 @@ Panel { width: setupGrid.cellWidth text: root.checkingUpdate ? "Update wird geprüft…" : "LUG Update prüfen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.checkForUpdates() } @@ -667,7 +673,7 @@ Panel { width: setupGrid.cellWidth text: "LUG aktualisieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("update-helper") } @@ -676,7 +682,7 @@ Panel { width: setupGrid.cellWidth text: "Omarchy aktualisieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("system-update") } @@ -685,7 +691,7 @@ Panel { width: setupGrid.cellWidth text: "LUG Helper öffnen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("helper") } @@ -694,7 +700,7 @@ Panel { width: setupGrid.cellWidth text: "Wine-Runner" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("runners") } @@ -703,7 +709,7 @@ Panel { width: setupGrid.cellWidth text: "DXVK verwalten" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("dxvk") } @@ -712,7 +718,7 @@ Panel { width: setupGrid.cellWidth text: "RSI reparieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("repair-rsi") } @@ -721,7 +727,7 @@ Panel { width: setupGrid.cellWidth text: "Start-Script reparieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("repair-launch") } @@ -730,7 +736,7 @@ Panel { width: setupGrid.cellWidth text: "Start-Log öffnen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("log") } @@ -739,7 +745,7 @@ Panel { width: setupGrid.cellWidth text: "Plugin-Debuglog öffnen" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("debug-log") } @@ -750,7 +756,7 @@ Panel { Text { text: "NGL · EXPERIMENTELL" color: root.warning - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall font.bold: true } @@ -767,7 +773,7 @@ Panel { width: nglGrid.cellWidth text: "NGL Download" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("ngl-page") } @@ -776,7 +782,7 @@ Panel { width: nglGrid.cellWidth text: "NGL installieren" foreground: root.barForeground - fontFamily: root.bar ? root.bar.fontFamily : Style.font.family + fontFamily: root.uiFont bordered: true onClicked: root.runAction("ngl-install") } @@ -787,7 +793,7 @@ Panel { text: "NGL bleibt bewusst optional. Der normale RSI/LUG-Weg funktioniert unabhängig davon." color: root.warning opacity: 0.82 - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -798,7 +804,7 @@ Panel { width: parent.width text: "Ziel: spielen statt Linux administrieren. Für Support genügt normalerweise „Support-Paket erstellen“." color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption wrapMode: Text.WordWrap } @@ -807,16 +813,17 @@ Panel { } component StatusChip: Rectangle { + id: chip property string label: "" property string value: "" property color chipColor: root.accent radius: 999 - color: Qt.rgba(chipColor.r, chipColor.g, chipColor.b, 0.12) - border.color: chipColor + color: Qt.rgba(chip.chipColor.r, chip.chipColor.g, chip.chipColor.b, 0.12) + border.color: chip.chipColor border.width: 1 - implicitWidth: chipRow.implicitWidth + Style.space(14) - implicitHeight: chipRow.implicitHeight + Style.space(8) + implicitWidth: chipRow.implicitWidth + Style.space(16) + implicitHeight: chipRow.implicitHeight + Style.space(9) Row { id: chipRow @@ -824,16 +831,16 @@ Panel { spacing: Style.space(5) Text { - text: parent.label + text: chip.label color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.caption } Text { - text: parent.value - color: parent.chipColor - font.family: root.bar ? root.bar.fontFamily : Style.font.family + text: chip.value + color: chip.chipColor + font.family: root.uiFont font.pixelSize: Style.font.caption font.bold: true } @@ -841,16 +848,17 @@ Panel { } component StatusLine: Rectangle { + id: statusLine property string label: "" property string value: "" property string state: "unknown" width: parent.width - radius: 12 + radius: 11 color: root.surfaceRaised border.color: root.border border.width: 1 - implicitHeight: lineRow.implicitHeight + Style.space(10) + implicitHeight: lineRow.implicitHeight + Style.space(12) Row { id: lineRow @@ -861,25 +869,25 @@ Panel { spacing: Style.space(8) Rectangle { - width: 10 - height: 10 + width: 9 + height: 9 radius: 5 - color: root.stateColor(parent.state) + color: root.stateColor(statusLine.state) } Text { width: Style.space(118) - text: parent.label + text: statusLine.label color: root.muted - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall } Text { - width: Math.max(0, parent.width - Style.space(158)) - text: root.stateIcon(parent.state) + " " + parent.value + width: Math.max(0, lineRow.width - Style.space(158)) + text: root.stateIcon(statusLine.state) + " " + statusLine.value color: root.barForeground - font.family: root.bar ? root.bar.fontFamily : Style.font.family + font.family: root.uiFont font.pixelSize: Style.font.bodySmall elide: Text.ElideRight } diff --git a/README.md b/README.md index a566be7..fbfbb69 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Omarchy Citizen 0.6.1 +# Omarchy Citizen 0.6.2 A plug-and-play Star Citizen control panel for Omarchy. @@ -70,10 +70,18 @@ remote; unattended updates stop if that remote changes or the checkout is dirty. See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DISTRIBUTION.md). -## 0.6.1 hotfix +## 0.6.2 hotfix - primary/setup actions now run through a Quickshell `Process` instead of fire-and-forget `bar.run` - the panel shows `WIRD GESTARTET` immediately after a click - startup failures stay visible in the panel instead of silently closing it - terminal launch has a monitored fallback path and logs immediate launcher failures - installers restart the Omarchy shell after QML changes to avoid stale third-party plugin QML + +## 0.6.2 UI / setup hotfix + +- fixed `undefined` in reusable status rows and chips +- panel no longer inherits the bar's theme font; uses a neutral system sans font +- first-time setup keeps the panel open and shows a visible status message +- setup terminal is launched directly through `xdg-terminal-exec`/UWSM with separate argv +- failed package/AUR setup remains visible instead of the terminal disappearing immediately diff --git a/backend/bin/omarchy-citizen-backend b/backend/bin/omarchy-citizen-backend index acbc6f5b87176d41873ceccc0a48b5148475b37f..b13b795649ad7c9753c06bb8e6944bf9f25aca1d 100644 GIT binary patch delta 236 zcmWm5xembq00!XHeV4j#FF;#F%MutY0nPBVvn73vc$40t|ZdaE!SM|e5+PHjq^&aaj2g~`Yh!ZyA~tJ2+EpM za-~U^UXJAQQYuuGXh)@PQu!5QGqfAp%i|K^zj0e5;w%_wxfzfmrGQ delta 236 zcmWm5xembq00!XHeb;?oFHo(9&{2xGLK-Py5plN?cZ8M1D_D(93^vc>2|PmmhHw1t zk1KJ9*OP1)O4aO2kmg5rwq(Wj7imY9hwrs*2LXfmSQr8fCf zL(Z*EQZGw$MXukiO$TCmu%|lpp}^L;i%Q;9k^l{8K?iy;fDue!1`Alh26k}3|2o0- lR!O%KC(<`1>"$LOG_FILE" 2>&1 & local pid=$! - # Give immediate launcher errors a chance to surface. A successful terminal - # launcher may either stay alive or exit 0 after handing the terminal off. - sleep 0.35 + sleep 0.45 if ! kill -0 "$pid" 2>/dev/null; then local rc=0 @@ -409,37 +407,44 @@ probe_detached_start() { launch_terminal_action() { local action="$1" - local cmd + log_line "launch-terminal action=$action" - printf -v cmd 'bash %q %q' "$SELF" "$action" - log_line "launch-terminal action=$action cmd=$cmd" + # Prefer direct argv-safe terminal launching. This avoids the presentation + # wrapper joining arguments into one shell command string. + if command -v uwsm-app >/dev/null 2>&1 && command -v xdg-terminal-exec >/dev/null 2>&1; then + if probe_detached_start "uwsm-xdg-terminal" \ + setsid uwsm-app -- xdg-terminal-exec \ + --app-id=org.omarchy.terminal \ + --title="Omarchy Citizen Setup" \ + -e bash "$SELF" "$action"; then + printf 'terminal=opened\n' + return 0 + fi + fi + if command -v xdg-terminal-exec >/dev/null 2>&1; then + if probe_detached_start "xdg-terminal" \ + xdg-terminal-exec \ + --title="Omarchy Citizen Setup" \ + -e bash "$SELF" "$action"; then + printf 'terminal=opened\n' + return 0 + fi + fi + + # Final compatibility fallback for older/current Omarchy installations. if command -v omarchy-launch-floating-terminal-with-presentation >/dev/null 2>&1; then if probe_detached_start "omarchy-floating-terminal" \ omarchy-launch-floating-terminal-with-presentation bash "$SELF" "$action"; then - return 0 - fi - log_line "primary floating terminal launcher failed; trying direct terminal fallback" - fi - - if command -v uwsm-app >/dev/null 2>&1 && command -v xdg-terminal-exec >/dev/null 2>&1; then - if probe_detached_start "direct-omarchy-terminal" \ - setsid uwsm-app -- xdg-terminal-exec \ - --app-id=org.omarchy.terminal \ - --title="Omarchy Citizen" \ - -e bash -c "$cmd"; then - return 0 - fi - elif command -v xdg-terminal-exec >/dev/null 2>&1; then - if probe_detached_start "xdg-terminal" \ - xdg-terminal-exec -e bash "$SELF" "$action"; then + printf 'terminal=opened\n' return 0 fi fi + echo "Das Setup-Terminal konnte nicht geöffnet werden." >&2 notify_error "Das Setup-Terminal konnte nicht geöffnet werden. -Bitte erstelle im SC-Panel ein Support-Paket. Darin ist jetzt auch der fehlgeschlagene Startversuch protokolliert." +Bitte klicke auf „Support-Paket erstellen“. Der fehlgeschlagene Startversuch ist dort protokolliert." return 1 } @@ -481,9 +486,32 @@ guided_setup() { } install_stack_terminal() { - set -e + set -Ee exec > >(tee -a "$LOG_FILE") 2>&1 + setup_failed() { + local rc=$? + trap - ERR + echo + echo "==================================================" + echo " SETUP KONNTE NICHT ABGESCHLOSSEN WERDEN" + echo "==================================================" + echo + echo "Fehlercode: $rc" + echo "Keine Sorge: Im SC-Panel kannst du anschließend" + echo "„Support-Paket erstellen“ wählen." + echo + log_line "install-stack failed rc=$rc" + notify "Omarchy Citizen" "Setup fehlgeschlagen. Bitte erstelle im SC-Panel ein Support-Paket." + if [[ -t 0 ]]; then + read -r -p "Drücke Enter, um dieses Fenster zu schließen … " _ || true + else + sleep 8 + fi + exit "$rc" + } + trap setup_failed ERR + echo echo "==================================================" echo " Omarchy Citizen – Plug & Play Setup" @@ -523,6 +551,7 @@ install_stack_terminal() { echo echo "Plug-&-Play-Setup beendet." echo "Du kannst dieses Fenster schließen und ✦SC öffnen." + trap - ERR notify "Omarchy Citizen" "Grundsetup abgeschlossen. Öffne ✦SC und starte Star Citizen." log_line "install-stack complete" } diff --git a/install.sh b/install.sh index af5e27b..9ba9f82 100644 --- a/install.sh +++ b/install.sh @@ -44,7 +44,7 @@ omarchy plugin enable "$PLUGIN_ID" omarchy restart shell >/dev/null 2>&1 || true echo -echo "Omarchy Citizen 0.6.1 wurde installiert:" +echo "Omarchy Citizen 0.6.2 wurde installiert:" echo " $DEST" echo echo "Links-Klick auf 'SC' in der Omarchy-Leiste öffnet das Star-Citizen-Panel." diff --git a/manifest.json b/manifest.json index 54576d3..7db5b4c 100644 --- a/manifest.json +++ b/manifest.json @@ -2,10 +2,10 @@ "schemaVersion": 1, "id": "local.omarchy-citizen", "name": "Omarchy Citizen", - "version": "0.6.1", + "version": "0.6.2", "author": "Community prototype", "license": "MIT", - "description": "Plug-and-play Star Citizen controls for Omarchy with reliable in-panel action execution, guided setup/repair, debug support bundles, update backend and optional NGL.", + "description": "Plug-and-play Star Citizen controls for Omarchy. 0.6.2 fixes status rendering and makes first-time setup visibly reliable.", "kinds": [ "bar-widget" ],