From 692693d71edee279414202cb28e71a84680d7ef4 Mon Sep 17 00:00:00 2001 From: humocs-man <251756307+humocs-man@users.noreply.github.com> Date: Sat, 14 Mar 2026 11:08:57 +0100 Subject: [PATCH] Refactor firstboot-setup.sh for better user experience Refactor firstboot-setup.sh to improve user prompts and cleanup logic. --- .../skel/.config/firstboot/firstboot-setup.sh | 153 +++++++++--------- 1 file changed, 72 insertions(+), 81 deletions(-) diff --git a/files/etc/skel/.config/firstboot/firstboot-setup.sh b/files/etc/skel/.config/firstboot/firstboot-setup.sh index 8506df3..dccd5ca 100644 --- a/files/etc/skel/.config/firstboot/firstboot-setup.sh +++ b/files/etc/skel/.config/firstboot/firstboot-setup.sh @@ -14,35 +14,25 @@ if [[ -z "${WAYLAND_DISPLAY:-}" && -z "${DISPLAY:-}" ]]; then fi # ------------------------------------------------------------ -# Globaler Abbruch – beendet den Wizard vollständig +# Abbruchdialog +# Ja -> Wizard beenden +# Nein -> zurück zur aktuellen Liste (return 2) # ------------------------------------------------------------ abort() { - echo "Abbruch durch Benutzer." - - zenity --question \ + if zenity --question \ --title="Setup abbrechen?" \ --text="Setup abbrechen?\n Der Einrichtungs‑Assistent wird dann nicht erneut angezeigt.\n Alle Anwendungen können jederzeit über den COSMIC‑Shop installiert oder entfernt werden.\n -Möchtest du den Setup‑Assistenten wirklich abbrechen?" \ - >/dev/null 2>&1 || true - - rm -f "$HOME/.config/firstboot/run" - systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true - exit 1 -} - -# ------------------------------------------------------------ -# Cleanup bei Fehlern -# ------------------------------------------------------------ -cleanup() { - local code=$? - if [[ $code -ne 0 ]]; then +Möchtest du den Setup‑Assistenten wirklich abbrechen?" + then rm -f "$HOME/.config/firstboot/run" systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true + exit 1 + else + return 2 fi } -trap cleanup EXIT # ------------------------------------------------------------ # Helper @@ -53,31 +43,10 @@ ensure_flathub() { https://dl.flathub.org/repo/flathub.flatpakrepo } -install_brew_and_setup_path() { - if ! command -v brew >/dev/null 2>&1; then - NONINTERACTIVE=1 CI=1 /bin/bash -c \ - "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - fi - - local BREW_PREFIX="/home/linuxbrew/.linuxbrew" - local BREW_BIN="$BREW_PREFIX/bin/brew" - [[ -x "$BREW_BIN" ]] || BREW_BIN="$(command -v brew)" - - eval "$("$BREW_BIN" shellenv)" - - for rc in "$HOME/.bashrc" "$HOME/.zshrc"; do - [[ -f "$rc" ]] || continue - grep -q 'brew shellenv' "$rc" || { - echo "" >> "$rc" - echo "# Homebrew" >> "$rc" - echo "eval \"\$($BREW_BIN shellenv)\"" >> "$rc" - } - done -} - # ------------------------------------------------------------ # Zenity‑Checkliste -# Erwartet Paare: id "beschreibung" +# OK -> stdout = Auswahl, return 0 +# Cancel -> abort(); Nein => return 2 # ------------------------------------------------------------ choose_list() { local title="$1" @@ -95,16 +64,24 @@ choose_list() { shift 2 done - zenity --list \ - --title="$title" \ - --text="$text" \ - --checklist \ - --column="Auswahl" \ - --column="Anwendung" \ - --column="Beschreibung" \ - --separator="|" \ - "${rows[@]}" \ - || abort + local result + if result=$(zenity --list \ + --title="$title" \ + --text="$text" \ + --width=800 \ + --height=600 \ + --checklist \ + --column="Auswahl" \ + --column="Anwendung" \ + --column="Beschreibung" \ + --separator="|" \ + "${rows[@]}"); then + printf '%s\n' "$result" + return 0 + else + abort + return 2 + fi } # ------------------------------------------------------------ @@ -121,77 +98,92 @@ Dieser Assistent hilft dir beim Einstieg in dein System.\n || abort # ------------------------------------------------------------ -# Auswahl +# Auswahl-Runner +# return 0 -> weiter +# return 2 -> gleiche Liste erneut # ------------------------------------------------------------ -BROWSERS=$(choose_list \ +run_list() { + local varname="$1" + shift + + while true; do + local result + if result=$(choose_list "$@"); then + printf -v "$varname" "%s" "$result" + break + else + local code=$? + if [[ $code -eq 2 ]]; then + continue + fi + exit 1 + fi + done +} + +# ------------------------------------------------------------ +# Listen +# ------------------------------------------------------------ +run_list BROWSERS \ "Browser" \ "Browser auswählen\nWähle einen oder mehrere Webbrowser aus." \ firefox "Ausgewogen, weit verbreitet, guter Datenschutz" \ chromium "Schlank, schnell, Open‑Source‑Basis vieler Browser" \ - brave "Starker Fokus auf Datenschutz und Werbeblockierung" \ -) + brave "Starker Fokus auf Datenschutz und Werbeblockierung" -OFFICE=$(choose_list \ +run_list OFFICE \ "Office & Dokumente" \ "Office & Dokumente\nAnwendungen für Büroarbeit und PDFs." \ libreoffice "Umfangreiche Office‑Suite für lokale Dokumente" \ onlyoffice "Moderne Oberfläche, hohe MS‑Office‑Kompatibilität" \ collabora "LibreOffice‑Technologie mit Fokus auf Zusammenarbeit" \ papers "Leichter PDF‑Viewer zum Lesen und Kommentieren" \ - simplescan "Einfaches Scannen von Dokumenten und Bildern" \ -) + simplescan "Einfaches Scannen von Dokumenten und Bildern" -GRAPHICS=$(choose_list \ +run_list GRAPHICS \ "Grafik & Kreativ" \ "Grafik & Kreativ\nWerkzeuge für Bildbearbeitung und Illustration." \ gimp "Leistungsstarke Bildbearbeitung für Fotos" \ krita "Digitale Malerei und Illustration" \ - inkscape "Vektorgrafiken für Logos und Icons" \ -) + inkscape "Vektorgrafiken für Logos und Icons" -MEDIA=$(choose_list \ +run_list MEDIA \ "Medien & Unterhaltung" \ "Medien & Unterhaltung\nAudio‑ und Video‑Wiedergabe." \ vlc "Spielt nahezu alle Audio‑ und Videoformate ab" \ showtime "Einfacher Videoplayer mit klarer Oberfläche" \ - spotify "Streaming‑Dienst für Musik und Podcasts" \ -) + spotify "Streaming‑Dienst für Musik und Podcasts" -AV=$(choose_list \ +run_list AV \ "Audio & Video‑Bearbeitung" \ "Audio & Video‑Bearbeitung\nWerkzeuge für kreative Medienproduktion." \ shotcut "Einfacher Videoeditor für schnelle Projekte" \ kdenlive "Umfangreicher Videoeditor mit vielen Effekten" \ audacity "Aufnahme und Bearbeitung von Audio" \ - ardour "Professionelle Audio‑Produktion" \ -) + ardour "Professionelle Audio‑Produktion" -GAMES=$(choose_list \ +run_list GAMES \ "Spiele" \ "Spiele‑Plattformen\nPlattformen für PC‑Spiele." \ steam "Große Spielebibliothek und Community‑Funktionen" \ - lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" \ -) + lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" -MAIL=$(choose_list \ +run_list MAIL \ "E‑Mail" \ "E‑Mail‑Programme\nDesktop‑Clients für E‑Mail und Kalender." \ thunderbird "Leistungsstarker Mail‑Client mit Erweiterungen" \ geary "Schlanker Mail‑Client mit einfacher Bedienung" \ - evolution "E‑Mail, Kalender und Kontakte in einer Anwendung" \ -) + evolution "E‑Mail, Kalender und Kontakte in einer Anwendung" -DEV=$(choose_list \ +run_list DEV \ "Entwicklung" \ "Entwicklung\nWerkzeuge für Software‑Entwicklung." \ - vscode "Beliebter Code‑Editor mit vielen Erweiterungen" \ -) + vscode "Beliebter Code‑Editor mit vielen Erweiterungen" -SYSTEM=$(choose_list \ +run_list SYSTEM \ "System‑Werkzeuge" \ "System‑Werkzeuge\nHilfsprogramme für Konfiguration und Verwaltung." \ - flatseal "Verwaltung von Flatpak‑Berechtigungen" \ -) + flatseal "Verwaltung von Flatpak‑Berechtigungen" # ------------------------------------------------------------ # Installation @@ -277,7 +269,6 @@ ensure_flathub # ------------------------------------------------------------ # Wizard done # ------------------------------------------------------------ -trap - EXIT rm -f "$HOME/.config/firstboot/run" systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true