This commit is contained in:
2026-08-31 16:27:10 +02:00
parent 31272327ae
commit 10272ff8e2
8 changed files with 165 additions and 108 deletions
+4 -4
View File
@@ -1,4 +1,4 @@
# Omarchy Citizen 0.6.3 – Plug-&-Play-Installation
# Omarchy Citizen 0.6.4 – Plug-&-Play-Installation
## Ziel
@@ -275,9 +275,9 @@ Damit brauchst du im ersten Supportkontakt normalerweise keine Terminalbefehle
vom Nutzer anzufordern.
## Hotfix 0.6.3 – Setup-Button
## Hotfix 0.6.4 – Setup-Button
Version 0.6.3 ändert die Ausführung der Panel-Aktionen grundlegend.
Version 0.6.4 ä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**.
@@ -290,7 +290,7 @@ im Support-Paket.
Nach der Installation wird der Omarchy-Shellprozess einmal neu gestartet, damit
die neue QML-Version sicher aktiv ist.
## 0.6.3 – unvollständiger Wine-Prefix
## 0.6.4 – unvollständiger Wine-Prefix
Ein Ordner wie `~/Games/star-citizen` gilt jetzt erst dann als fertiger Wine-Prefix,
wenn mindestens `drive_c`, `system.reg` und `user.reg` existieren.
+34 -14
View File
@@ -12,7 +12,7 @@ Panel {
property var anchorItem: null
property var hostWidget: null
property string pluginVersion: "0.6.3"
property string pluginVersion: "0.6.4"
property string health: "checking"
property string depsState: "checking"
property string depsMissing: ""
@@ -97,7 +97,7 @@ Panel {
values[lines[i].slice(0, p)] = lines[i].slice(p + 1)
}
pluginVersion = values.plugin_version || "0.6.3"
pluginVersion = values.plugin_version || "0.6.4"
health = values.health || "setup"
depsState = values.deps || "missing"
depsMissing = values.deps_missing || ""
@@ -122,6 +122,7 @@ Panel {
function stateIcon(state) {
if (state === "ready" || state === "current") return "✓"
if (state === "available") return "↑"
if (state === "warning") return "!"
if (state === "partial" || state === "unknown") return "…"
if (state === "checking") return "·"
return "!"
@@ -129,11 +130,28 @@ Panel {
function stateColor(state) {
if (state === "ready" || state === "current") return success
if (state === "available") return warning
if (state === "available" || state === "warning") return warning
if (state === "partial" || state === "unknown" || state === "checking") return accent
return danger
}
function pluginUpdateText() {
if (root.pluginUpdate === "available") return "Update verfügbar"
if (root.pluginUpdate === "current") return "aktuell"
if (root.pluginUpdate === "blocked-dirty") return "lokale Änderungen · Update pausiert"
if (root.pluginUpdate === "blocked-diverged") return "Git-Stand abweichend · Update pausiert"
if (root.pluginUpdate === "blocked-remote") return "Updatequelle geändert · Update pausiert"
if (root.pluginUpdate === "zip") return "ZIP-Installation"
return root.pluginUpdate
}
function pluginUpdateState() {
if (root.pluginUpdate === "available") return "available"
if (root.pluginUpdate === "current") return "current"
if (String(root.pluginUpdate).indexOf("blocked-") === 0) return "warning"
return "unknown"
}
function healthColor() {
if (health === "ready") return success
if (health === "recover-prefix" || health === "repair") return warning
@@ -219,17 +237,22 @@ Panel {
}
onStarted: {
root.actionStatus = root.actionKind === "primary"
? "Setup/Start wird vorbereitet…"
: "Aktion wird ausgeführt…"
if (root.actionKind === "primary" && root.health === "recover-prefix")
root.actionStatus = "Reparatur-Fenster wird geöffnet…"
else if (root.actionKind === "primary")
root.actionStatus = "Setup/Start wird vorbereitet…"
else
root.actionStatus = "Aktion wird ausgeführt…"
}
onExited: function(exitCode) {
if (exitCode === 0) {
root.actionError = ""
root.actionStatus = root.actionKind === "primary" && root.health !== "ready"
? "Setup-Fenster wurde geöffnet. Folge dort einfach den angezeigten Schritten."
: "Aktion wurde gestartet."
root.actionStatus = root.actionKind === "primary" && root.health === "recover-prefix"
? "Reparatur-Fenster wurde geöffnet. Dort läuft die sichere Wiederherstellung."
: (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)
@@ -594,11 +617,8 @@ Panel {
StatusLine {
label: "Plugin-Stand"
state: root.pluginUpdate === "available" ? "available" :
(root.pluginUpdate === "current" ? "current" : "unknown")
value: root.pluginUpdate === "available"
? "Update verfügbar"
: (root.pluginUpdate === "current" ? "aktuell" : root.pluginUpdate)
state: root.pluginUpdateState()
value: root.pluginUpdateText()
}
Grid {
+14 -4
View File
@@ -1,4 +1,4 @@
# Omarchy Citizen 0.6.3
# Omarchy Citizen 0.6.4
A plug-and-play Star Citizen control panel for Omarchy.
@@ -70,7 +70,7 @@ 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.3 hotfix
## 0.6.4 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
@@ -78,7 +78,7 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS
- 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.3 UI / setup hotfix
## 0.6.4 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
@@ -86,7 +86,7 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS
- 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
## 0.6.3 incomplete-prefix recovery
## 0.6.4 incomplete-prefix recovery
- a configured folder is no longer considered a valid Wine prefix merely because it exists
- valid prefixes require `drive_c`, `system.reg`, and `user.reg`
@@ -95,3 +95,13 @@ See [`backend/README.md`](backend/README.md) and [`GIT_DISTRIBUTION.md`](GIT_DIS
- stale LUG target config files are backed up before a clean reinstall
- existing `Data.p4k` is never moved by Omarchy Citizen; migration is delegated to the LUG Helper
- support bundles now include the newest `/tmp/lughelper-install-*.log` and a prefix-health report
## 0.6.4 visible recovery hotfix
- incomplete-prefix recovery no longer spawns a hidden second background process
- `SETUP SICHER REPARIEREN` opens a visible terminal directly
- the incomplete prefix is automatically renamed to a timestamped backup; it is never deleted
- LUG reinstall output remains visible and is logged at the same time
- if recovery fails, the terminal stays open with the error code and support instructions
- guided setup, repair assistant, support bundle creation and NGL file selection no longer use nested `nohup` wrappers
- updater status `blocked-dirty` is displayed as the user-friendly `lokale Änderungen · Update pausiert`
Binary file not shown.
+1 -1
View File
@@ -16,7 +16,7 @@ import (
)
const (
appVersion = "0.6.3"
appVersion = "0.6.4"
pluginID = "local.omarchy-citizen"
)
+109 -82
View File
@@ -2,7 +2,7 @@
set -u
PLUGIN_ID="local.omarchy-citizen"
PLUGIN_VERSION="0.6.3"
PLUGIN_VERSION="0.6.4"
CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/starcitizen-lug"
DATA_DIR="${XDG_DATA_HOME:-$HOME/.local/share}"
@@ -198,6 +198,21 @@ run_helper_sync() {
fi
}
run_helper_visible() {
local helper
helper="$(find_helper)" || {
echo "Der Star Citizen LUG Helper wurde nicht gefunden." >&2
return 1
}
log_line "lug-helper visible args=$*"
if [[ "$helper" == *.sh ]]; then
bash "$helper" "$@"
else
"$helper" "$@"
fi
}
run_helper_gui() {
local helper
helper="$(find_helper)" || {
@@ -518,103 +533,113 @@ stop_prefix_wineserver() {
fi
}
recover_incomplete_prefix_interactive() {
recover_incomplete_prefix_terminal() {
set -Ee
exec > >(tee -a "$LOG_FILE") 2>&1
local prefix stamp backup datap4k=""
recovery_failed() {
local rc=$?
trap - ERR
echo
echo "=================================================="
echo " REPARATUR KONNTE NICHT ABGESCHLOSSEN WERDEN"
echo "=================================================="
echo
echo "Fehlercode: $rc"
echo
echo "Dein vorheriger Ordner wurde nicht gelöscht."
echo "Im SC-Panel kannst du jetzt „Support-Paket erstellen“ wählen."
echo
log_line "recover-prefix-terminal failed rc=$rc"
notify "Omarchy Citizen" "Setup-Reparatur fehlgeschlagen. Bitte erstelle ein Support-Paket."
if [[ -t 0 ]]; then
read -r -p "Drücke Enter, um dieses Fenster zu schließen … " _ || true
else
sleep 10
fi
exit "$rc"
}
trap recovery_failed ERR
prefix="$(find_incomplete_prefix 2>/dev/null)" || {
log_line "recover-prefix requested but no incomplete prefix found"
guided_setup_interactive
return
echo "Es wurde kein unvollständiger Wine-Prefix mehr gefunden."
echo "Starte stattdessen die normale Einrichtung."
log_line "recover-prefix-terminal no incomplete prefix found"
trap - ERR
return 0
}
datap4k="$prefix/drive_c/Program Files/Roberts Space Industries/StarCitizen/LIVE/Data.p4k"
# If real game data is present, never move it ourselves. Let the LUG Helper's
# built-in reinstall/migration path handle it.
echo
echo "=================================================="
echo " Omarchy Citizen – Setup sicher reparieren"
echo "=================================================="
echo
echo "Unvollständiger Wine-Prefix:"
echo " $prefix"
echo
# Never move real game data ourselves.
if [[ -f "$datap4k" ]]; then
log_line "incomplete prefix contains Data.p4k; delegating migration to LUG Helper"
run_helper_sync --install || true
return
echo "Vorhandene Star-Citizen-Spieldaten wurden erkannt."
echo "Omarchy Citizen verschiebt diese Daten nicht selbst."
echo "Die Reparatur wird an den LUG Helper übergeben."
echo
log_line "recover-prefix-terminal Data.p4k present; delegate to LUG"
run_helper_visible --install
trap - ERR
return 0
fi
stamp="$(date '+%Y%m%d-%H%M%S')"
backup="${prefix}-incomplete-${stamp}"
if command -v zenity >/dev/null 2>&1; then
if ! zenity --question \
--width=600 \
--title="Omarchy Citizen – unvollständiges Setup reparieren" \
--ok-label="Automatisch reparieren" \
--cancel-label="Abbrechen" \
--text="Omarchy Citizen hat einen halbfertigen Star-Citizen-Wine-Prefix erkannt:
echo "Der halbfertige Ordner wird NICHT gelöscht."
echo "Er wird gesichert als:"
echo " $backup"
echo
echo "Danach wird der offizielle LUG-Installer sauber neu gestartet."
echo
$prefix
log_line "recover-prefix-terminal prefix=$prefix backup=$backup"
Es fehlen drive_c und/oder die Wine-Registrydateien. Fertige Star-Citizen-Spieldaten (Data.p4k) wurden nicht gefunden.
Der Ordner wird NICHT gelöscht, sondern sicher umbenannt nach:
$backup
Danach startet der offizielle LUG-Installer sauber neu." 2>/dev/null; then
return 0
fi
else
printf '\nUnvollständiges Star-Citizen-Setup gefunden:\n%s\n\n' "$prefix"
printf 'Es wird gesichert als:\n%s\n\n' "$backup"
read -r -p "Automatisch reparieren? [j/N]: " answer
case "${answer,,}" in
j|ja|y|yes) ;;
*) return 0 ;;
esac
fi
log_line "recovering incomplete prefix=$prefix backup=$backup"
stop_prefix_wineserver "$prefix"
if ! mv -- "$prefix" "$backup"; then
notify_error "Der unvollständige Star-Citizen-Ordner konnte nicht gesichert werden.
Bitte erstelle ein Support-Paket."
return 1
fi
mv -- "$prefix" "$backup"
backup_lug_target_configs "$stamp"
notify "Omarchy Citizen" "Unvollständiges Setup wurde gesichert. Der LUG-Installer startet jetzt neu."
run_helper_sync --install || {
log_line "fresh LUG install after incomplete-prefix recovery failed"
if command -v zenity >/dev/null 2>&1; then
if zenity --question \
--width=560 \
--title="Star-Citizen-Setup fehlgeschlagen" \
--ok-label="Support-Paket erstellen" \
--cancel-label="Später" \
--text="Auch der saubere Neuversuch konnte den Wine-Prefix nicht vollständig erstellen.
echo "✓ Backup erstellt."
echo
echo "Starte frische LUG-Einrichtung …"
echo
Deine vorherige Installation wurde nicht gelöscht; sie liegt als Backup vor.
Soll Omarchy Citizen jetzt direkt ein Support-Paket erstellen?" 2>/dev/null; then
"$SELF" support-build
fi
fi
return 1
}
run_helper_visible --install
echo
echo "Prüfe den neu angelegten Wine-Prefix …"
if read_prefix >/dev/null 2>&1; then
notify "Omarchy Citizen" "Wine-Prefix wurde erfolgreich erstellt."
log_line "incomplete-prefix recovery succeeded"
else
log_line "LUG install returned but prefix still incomplete"
notify_error "Der LUG-Installer wurde beendet, aber der Wine-Prefix ist weiterhin unvollständig.
Bitte erstelle ein Support-Paket."
return 1
echo "✓ Wine-Prefix ist vollständig initialisiert."
log_line "recover-prefix-terminal succeeded"
trap - ERR
notify "Omarchy Citizen" "Wine-Prefix wurde erfolgreich neu erstellt."
echo
echo "Reparatur abgeschlossen. Du kannst dieses Fenster schließen."
return 0
fi
echo
echo "Der LUG-Installer wurde beendet, aber drive_c/system.reg/user.reg"
echo "sind weiterhin nicht vollständig vorhanden."
echo
log_line "recover-prefix-terminal LUG returned but prefix still incomplete"
return 1
}
recover_incomplete_prefix() {
nohup bash "$SELF" recover-prefix-interactive >>"$LOG_FILE" 2>&1 &
launch_terminal_action recover-prefix-terminal
}
guided_setup_interactive() {
@@ -626,8 +651,8 @@ guided_setup_interactive() {
fi
if find_incomplete_prefix >/dev/null 2>&1; then
log_line "guided setup found incomplete prefix; switching to recovery"
recover_incomplete_prefix_interactive
log_line "guided setup found incomplete prefix; opening visible recovery terminal"
launch_terminal_action recover-prefix-terminal
return $?
fi
@@ -657,7 +682,7 @@ guided_setup() {
launch_terminal_action install-stack-terminal
return
fi
nohup bash "$SELF" guided-setup-interactive >>"$LOG_FILE" 2>&1 &
guided_setup_interactive
}
install_stack_terminal() {
@@ -722,9 +747,11 @@ install_stack_terminal() {
if find_incomplete_prefix >/dev/null 2>&1; then
echo
echo "Eine frühere, unvollständige Wine-Prefix-Erstellung wurde erkannt."
echo "Die Reparatur wird jetzt grafisch fortgesetzt."
echo "Öffne die sichere Reparatur in einem eigenen Fenster."
echo
recover_incomplete_prefix_interactive
trap - ERR
launch_terminal_action recover-prefix-terminal
return 0
elif ! read_prefix >/dev/null 2>&1; then
run_helper_sync --install || true
fi
@@ -824,7 +851,7 @@ repair_assistant_interactive() {
return
;;
recover-prefix)
recover_incomplete_prefix_interactive
launch_terminal_action recover-prefix-terminal
return
;;
install)
@@ -896,7 +923,7 @@ repair_assistant_interactive() {
}
repair_assistant() {
nohup bash "$SELF" repair-interactive >>"$LOG_FILE" 2>&1 &
repair_assistant_interactive
}
sanitize_to() {
@@ -1131,7 +1158,7 @@ Schicke dieses Archiv zusammen mit der Support-ID an den Plugin-Support." \
}
support_start() {
nohup bash "$SELF" support-build >>"$LOG_FILE" 2>&1 &
support_build
}
open_debug_log() {
@@ -1260,7 +1287,7 @@ Fortfahren?" 2>/dev/null; then
}
ngl_install() {
nohup bash "$SELF" ngl-install-interactive >>"$LOG_FILE" 2>&1 &
ngl_install_interactive
}
case "$ACTION" in
@@ -1268,7 +1295,7 @@ case "$ACTION" in
primary) primary_action ;;
setup) guided_setup ;;
recover-prefix) recover_incomplete_prefix ;;
recover-prefix-interactive) recover_incomplete_prefix_interactive ;;
recover-prefix-terminal) recover_incomplete_prefix_terminal ;;
guided-setup-interactive) guided_setup_interactive ;;
repair) repair_assistant ;;
repair-interactive) repair_assistant_interactive ;;
+1 -1
View File
@@ -44,7 +44,7 @@ omarchy plugin enable "$PLUGIN_ID"
omarchy restart shell >/dev/null 2>&1 || true
echo
echo "Omarchy Citizen 0.6.3 wurde installiert:"
echo "Omarchy Citizen 0.6.4 wurde installiert:"
echo " $DEST"
echo
echo "Links-Klick auf 'SC' in der Omarchy-Leiste öffnet das Star-Citizen-Panel."
+2 -2
View File
@@ -2,10 +2,10 @@
"schemaVersion": 1,
"id": "local.omarchy-citizen",
"name": "Omarchy Citizen",
"version": "0.6.3",
"version": "0.6.4",
"author": "Community prototype",
"license": "MIT",
"description": "Plug-and-play Star Citizen controls for Omarchy. 0.6.3 detects and safely recovers incomplete Wine prefixes and improves LUG install diagnostics.",
"description": "Plug-and-play Star Citizen controls for Omarchy. 0.6.4 removes nested background UI actions and performs incomplete-prefix recovery in a visible, logged terminal.",
"kinds": [
"bar-widget"
],