Refactor firstboot-setup.sh for better user experience

Refactor firstboot-setup.sh to improve user prompts and cleanup logic.
This commit is contained in:
humocs-man
2026-03-14 11:08:57 +01:00
committed by GitHub
parent b0cd3b6671
commit 692693d71e
@@ -14,35 +14,25 @@ if [[ -z "${WAYLAND_DISPLAY:-}" && -z "${DISPLAY:-}" ]]; then
fi fi
# ------------------------------------------------------------ # ------------------------------------------------------------
# Globaler Abbruch beendet den Wizard vollständig # Abbruchdialog
# Ja -> Wizard beenden
# Nein -> zurück zur aktuellen Liste (return 2)
# ------------------------------------------------------------ # ------------------------------------------------------------
abort() { abort() {
echo "Abbruch durch Benutzer." if zenity --question \
zenity --question \
--title="Setup abbrechen?" \ --title="Setup abbrechen?" \
--text="<big><b>Setup abbrechen?</b></big>\n --text="<big><b>Setup abbrechen?</b></big>\n
Der EinrichtungsAssistent wird dann nicht erneut angezeigt.\n Der EinrichtungsAssistent wird dann nicht erneut angezeigt.\n
Alle Anwendungen können jederzeit über den COSMICShop installiert oder entfernt werden.\n Alle Anwendungen können jederzeit über den COSMICShop installiert oder entfernt werden.\n
Möchtest du den SetupAssistenten wirklich abbrechen?" \ Möchtest du den SetupAssistenten wirklich abbrechen?"
>/dev/null 2>&1 || true then
rm -f "$HOME/.config/firstboot/run" rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
exit 1 exit 1
} else
return 2
# ------------------------------------------------------------
# Cleanup bei Fehlern
# ------------------------------------------------------------
cleanup() {
local code=$?
if [[ $code -ne 0 ]]; then
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
fi fi
} }
trap cleanup EXIT
# ------------------------------------------------------------ # ------------------------------------------------------------
# Helper # Helper
@@ -53,31 +43,10 @@ ensure_flathub() {
https://dl.flathub.org/repo/flathub.flatpakrepo 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
}
# ------------------------------------------------------------ # ------------------------------------------------------------
# ZenityCheckliste # ZenityCheckliste
# Erwartet Paare: id "beschreibung" # OK -> stdout = Auswahl, return 0
# Cancel -> abort(); Nein => return 2
# ------------------------------------------------------------ # ------------------------------------------------------------
choose_list() { choose_list() {
local title="$1" local title="$1"
@@ -95,16 +64,24 @@ choose_list() {
shift 2 shift 2
done done
zenity --list \ local result
if result=$(zenity --list \
--title="$title" \ --title="$title" \
--text="$text" \ --text="$text" \
--width=800 \
--height=600 \
--checklist \ --checklist \
--column="Auswahl" \ --column="Auswahl" \
--column="Anwendung" \ --column="Anwendung" \
--column="Beschreibung" \ --column="Beschreibung" \
--separator="|" \ --separator="|" \
"${rows[@]}" \ "${rows[@]}"); then
|| abort 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 || 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" \
"<big><b>Browser auswählen</b></big>\nWähle einen oder mehrere Webbrowser aus." \ "<big><b>Browser auswählen</b></big>\nWähle einen oder mehrere Webbrowser aus." \
firefox "Ausgewogen, weit verbreitet, guter Datenschutz" \ firefox "Ausgewogen, weit verbreitet, guter Datenschutz" \
chromium "Schlank, schnell, OpenSourceBasis vieler Browser" \ chromium "Schlank, schnell, OpenSourceBasis 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" \
"<big><b>Office &amp; Dokumente</b></big>\nAnwendungen für Büroarbeit und PDFs." \ "<big><b>Office &amp; Dokumente</b></big>\nAnwendungen für Büroarbeit und PDFs." \
libreoffice "Umfangreiche OfficeSuite für lokale Dokumente" \ libreoffice "Umfangreiche OfficeSuite für lokale Dokumente" \
onlyoffice "Moderne Oberfläche, hohe MSOfficeKompatibilität" \ onlyoffice "Moderne Oberfläche, hohe MSOfficeKompatibilität" \
collabora "LibreOfficeTechnologie mit Fokus auf Zusammenarbeit" \ collabora "LibreOfficeTechnologie mit Fokus auf Zusammenarbeit" \
papers "Leichter PDFViewer zum Lesen und Kommentieren" \ papers "Leichter PDFViewer 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" \
"<big><b>Grafik &amp; Kreativ</b></big>\nWerkzeuge für Bildbearbeitung und Illustration." \ "<big><b>Grafik &amp; Kreativ</b></big>\nWerkzeuge für Bildbearbeitung und Illustration." \
gimp "Leistungsstarke Bildbearbeitung für Fotos" \ gimp "Leistungsstarke Bildbearbeitung für Fotos" \
krita "Digitale Malerei und Illustration" \ 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" \
"<big><b>Medien &amp; Unterhaltung</b></big>\nAudio und VideoWiedergabe." \ "<big><b>Medien &amp; Unterhaltung</b></big>\nAudio und VideoWiedergabe." \
vlc "Spielt nahezu alle Audio und Videoformate ab" \ vlc "Spielt nahezu alle Audio und Videoformate ab" \
showtime "Einfacher Videoplayer mit klarer Oberfläche" \ showtime "Einfacher Videoplayer mit klarer Oberfläche" \
spotify "StreamingDienst für Musik und Podcasts" \ spotify "StreamingDienst für Musik und Podcasts"
)
AV=$(choose_list \ run_list AV \
"Audio & VideoBearbeitung" \ "Audio & VideoBearbeitung" \
"<big><b>Audio &amp; VideoBearbeitung</b></big>\nWerkzeuge für kreative Medienproduktion." \ "<big><b>Audio &amp; VideoBearbeitung</b></big>\nWerkzeuge für kreative Medienproduktion." \
shotcut "Einfacher Videoeditor für schnelle Projekte" \ shotcut "Einfacher Videoeditor für schnelle Projekte" \
kdenlive "Umfangreicher Videoeditor mit vielen Effekten" \ kdenlive "Umfangreicher Videoeditor mit vielen Effekten" \
audacity "Aufnahme und Bearbeitung von Audio" \ audacity "Aufnahme und Bearbeitung von Audio" \
ardour "Professionelle AudioProduktion" \ ardour "Professionelle AudioProduktion"
)
GAMES=$(choose_list \ run_list GAMES \
"Spiele" \ "Spiele" \
"<big><b>SpielePlattformen</b></big>\nPlattformen für PCSpiele." \ "<big><b>SpielePlattformen</b></big>\nPlattformen für PCSpiele." \
steam "Große Spielebibliothek und CommunityFunktionen" \ steam "Große Spielebibliothek und CommunityFunktionen" \
lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" \ lutris "Zentrale Verwaltung von Spielen aus vielen Quellen"
)
MAIL=$(choose_list \ run_list MAIL \
"EMail" \ "EMail" \
"<big><b>EMailProgramme</b></big>\nDesktopClients für EMail und Kalender." \ "<big><b>EMailProgramme</b></big>\nDesktopClients für EMail und Kalender." \
thunderbird "Leistungsstarker MailClient mit Erweiterungen" \ thunderbird "Leistungsstarker MailClient mit Erweiterungen" \
geary "Schlanker MailClient mit einfacher Bedienung" \ geary "Schlanker MailClient mit einfacher Bedienung" \
evolution "EMail, Kalender und Kontakte in einer Anwendung" \ evolution "EMail, Kalender und Kontakte in einer Anwendung"
)
DEV=$(choose_list \ run_list DEV \
"Entwicklung" \ "Entwicklung" \
"<big><b>Entwicklung</b></big>\nWerkzeuge für SoftwareEntwicklung." \ "<big><b>Entwicklung</b></big>\nWerkzeuge für SoftwareEntwicklung." \
vscode "Beliebter CodeEditor mit vielen Erweiterungen" \ vscode "Beliebter CodeEditor mit vielen Erweiterungen"
)
SYSTEM=$(choose_list \ run_list SYSTEM \
"SystemWerkzeuge" \ "SystemWerkzeuge" \
"<big><b>SystemWerkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \ "<big><b>SystemWerkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
flatseal "Verwaltung von FlatpakBerechtigungen" \ flatseal "Verwaltung von FlatpakBerechtigungen"
)
# ------------------------------------------------------------ # ------------------------------------------------------------
# Installation # Installation
@@ -277,7 +269,6 @@ ensure_flathub
# ------------------------------------------------------------ # ------------------------------------------------------------
# Wizard done # Wizard done
# ------------------------------------------------------------ # ------------------------------------------------------------
trap - EXIT
rm -f "$HOME/.config/firstboot/run" rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true