Update firstboot-setup.sh

switched to zenity
This commit is contained in:
humocs-man
2026-03-13 10:04:21 +01:00
committed by GitHub
parent 6ee8c5c3ad
commit e19ff33db3
@@ -1,42 +1,25 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
DIALOG=dialog
HEIGHT=20
WIDTH=74
LOG="$HOME/.local/state/firstboot-setup.log" LOG="$HOME/.local/state/firstboot-setup.log"
if [[ -z "${TERM:-}" ]]; then
exec cosmic-terminal -- "$HOME/.config/firstboot/firstboot-user.sh"
fi
exec > >(tee -a "$LOG") 2>&1 exec > >(tee -a "$LOG") 2>&1
abort() { abort() {
$DIALOG --title "Setup abbrechen?" --yesno \ zenity --question \
"Der Einrichtungs‑Assistent wird dann --title="Setup abbrechen?" \
nicht erneut angezeigt. --text="Der Einrichtungs‑Assistent wird dann nicht erneut angezeigt.
Alle Anwendungen können jederzeit Alle Anwendungen können jederzeit über den COSMIC‑Shop installiert oder entfernt werden.
über den COSMIC‑Shop installiert
oder entfernt werden.
Möchtest du den Setup‑Assistenten Möchtest du den Setup‑Assistenten wirklich abbrechen?"
wirklich abbrechen?" \
$HEIGHT $WIDTH
if [[ $? -eq 0 ]]; then if [[ $? -eq 0 ]]; then
rm -f "$HOME/.config/firstboot/run" rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service systemctl --user disable firstboot-setup.service
clear
exit 0 exit 0
fi fi
fi
# User hat sich gegen Abbruch entschieden → zurück
return 0 return 0
} }
@@ -70,167 +53,170 @@ install_brew_and_setup_path() {
# ---------------------------- # ----------------------------
# Welcome # Welcome
# ---------------------------- # ----------------------------
$DIALOG --title "Willkommen bei COSMIC" --msgbox \ zenity --info \
"Dieser Assistent erleichtert dir den Einstieg, --title="Willkommen bei COSMIC" \
indem er eine Auswahl gängiger Anwendungen anbietet. --text="Dieser Assistent erleichtert dir den Einstieg, indem er eine Auswahl gängiger Anwendungen anbietet.
Wichtig: Wichtig:
• Alle hier angebotenen Anwendungen können • Alle hier angebotenen Anwendungen können jederzeit auch über den COSMIC‑Shop installiert oder entfernt werden.
jederzeit auch über den COSMIC‑Shop installiert • Der Wizard ist optional und kann komplett übersprungen werden.
oder entfernt werden. • Er deckt nur eine Auswahl verbreiteter Anwendungen ab – nicht alles.
• Der Wizard ist optional und kann komplett
übersprungen werden.
• Er deckt nur eine Auswahl verbreiteter
Anwendungen ab – nicht alles.
Nach Abschluss wird dieser Assistent Nach Abschluss wird dieser Assistent nicht erneut angezeigt." \
nicht erneut angezeigt." \ || abort
$HEIGHT $WIDTH || abort
# ---------------------------- # ----------------------------
# Selections # Auswahlfunktionen
# ---------------------------- # ----------------------------
BROWSERS=()
OFFICE=() choose_list() {
GRAPHICS=() local title="$1"
MEDIA=() local text="$2"
AV=() shift 2
GAMES=()
MAIL=() local result
DEV=() result=$(zenity --list \
SYSTEM=() --title="$title" \
--text="$text" \
--checklist \
--column="Auswahl" \
--column="ID" \
--column="Beschreibung" \
FALSE "$@" \
--separator="|" \
) || abort
echo "$result"
}
# ---------------------------- # ----------------------------
# Browser # Browser
# ---------------------------- # ----------------------------
BROWSERS=($($DIALOG --title "Browser" --checklist \ BROWSERS=$(choose_list \
"Webbrowser werden für viele Aufgaben benötigt "Browser" \
(z. B. Dokumentation, Web‑Apps, Login‑Flows)." \ "Webbrowser werden für viele Aufgaben benötigt." \
$HEIGHT $WIDTH 5 \ firefox "Mozilla Firefox (empfohlen)" \
"firefox" "Mozilla Firefox (empfohlen)" ON \ chromium "Chromium (Open‑Source Basis)" \
"chromium" "Chromium (Open‑Source Basis)" OFF \ brave "Brave (datenschutzorientiert)" \
"brave" "Brave (datenschutzorientiert)" OFF \ )
2>&1 >/dev/tty)) || abort
# ---------------------------- # ----------------------------
# Office # Office
# ---------------------------- # ----------------------------
OFFICE=($($DIALOG --title "Office & Dokumente" --checklist \ OFFICE=$(choose_list \
"Anwendungen für Dokumente, PDFs und Büroarbeit:" \ "Office & Dokumente" \
$HEIGHT $WIDTH 7 \ "Anwendungen für Dokumente, PDFs und Büroarbeit:" \
"libreoffice" "LibreOffice (Office‑Suite)" ON \ libreoffice "LibreOffice (Office‑Suite)" \
"onlyoffice" "OnlyOffice (MS‑Office‑ähnlich)" OFF \ onlyoffice "OnlyOffice (MS‑Office‑ähnlich)" \
"collabora" "Collabora Office (LibreOffice‑basiert)" OFF \ collabora "Collabora Office" \
"papers" "Papers (PDF‑Viewer)" ON \ papers "Papers (PDF‑Viewer)" \
"simplescan" "Simple Scan (Scanner‑Anwendung)" OFF \ simplescan "Simple Scan" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Graphics # Graphics
# ---------------------------- # ----------------------------
GRAPHICS=($($DIALOG --title "Grafik & Kreativ" --checklist \ GRAPHICS=$(choose_list \
"Bildbearbeitung, Illustration und Vektorgrafik:" \ "Grafik & Kreativ" \
$HEIGHT $WIDTH 5 \ "Bildbearbeitung, Illustration und Vektorgrafik:" \
"gimp" "GIMP (Bildbearbeitung)" OFF \ gimp "GIMP" \
"krita" "Krita (Zeichnen & Illustration)" OFF \ krita "Krita" \
"inkscape" "Inkscape (Vektorgrafiken & SVG)" OFF \ inkscape "Inkscape" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Media # Media
# ---------------------------- # ----------------------------
MEDIA=($($DIALOG --title "Medien & Unterhaltung" --checklist \ MEDIA=$(choose_list \
"Wiedergabe von Audio und Video:" \ "Medien & Unterhaltung" \
$HEIGHT $WIDTH 4 \ "Wiedergabe von Audio und Video:" \
"vlc" "VLC Media Player" ON \ vlc "VLC Media Player" \
"spotify" "Spotify Client" OFF \ spotify "Spotify Client" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Audio / Video Editing # Audio/Video Editing
# ---------------------------- # ----------------------------
AV=($($DIALOG --title "Audio & Video‑Bearbeitung" --checklist \ AV=$(choose_list \
"Erstellung und Bearbeitung von Audio‑ und Videoinhalten:" \ "Audio & Video‑Bearbeitung" \
$HEIGHT $WIDTH 6 \ "Erstellung und Bearbeitung von Audio‑ und Videoinhalten:" \
"shotcut" "Shotcut (einfacher Video‑Editor)" OFF \ shotcut "Shotcut" \
"kdenlive" "Kdenlive (leistungsfähiger Video‑Editor)" OFF \ kdenlive "Kdenlive" \
"audacity" "Audacity (Audio‑Bearbeitung)" OFF \ audacity "Audacity" \
"ardour" "Ardour (professionelle Audio‑Produktion)" OFF \ ardour "Ardour" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Games # Games
# ---------------------------- # ----------------------------
GAMES=($($DIALOG --title "Spiele" --checklist \ GAMES=$(choose_list \
"Plattformen für PC‑Spiele. "Spiele" \
"Plattformen für PC‑Spiele:" \
Hinweis: steam "Steam" \
• Für Steam und Lutris ist ein Benutzerkonto erforderlich. lutris "Lutris" \
• Es werden keine Spiele automatisch installiert." \ )
$HEIGHT $WIDTH 4 \
"steam" "Steam (Valve‑Plattform)" OFF \
"lutris" "Lutris (Multi‑Plattform‑Launcher)" OFF \
2>&1 >/dev/tty)) || abort
# ---------------------------- # ----------------------------
# Mail # Mail
# ---------------------------- # ----------------------------
MAIL=($($DIALOG --title "E‑Mail" --checklist \ MAIL=$(choose_list \
"Desktop‑E‑Mail‑Programme für IMAP/POP‑Konten:" \ "E‑Mail" \
$HEIGHT $WIDTH 5 \ "Desktop‑E‑Mail‑Programme:" \
"thunderbird" "Thunderbird (vollständiger Standard‑Client)" ON \ thunderbird "Thunderbird" \
"geary" "Geary (einfacher, moderner Mail‑Client)" OFF \ geary "Geary" \
"evolution" "Evolution (Business‑ & Exchange‑Client)" OFF \ evolution "Evolution" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Development # Development
# ---------------------------- # ----------------------------
DEV=($($DIALOG --title "Entwicklung" --checklist \ DEV=$(choose_list \
"Werkzeuge für Software‑Entwicklung:" \ "Entwicklung" \
$HEIGHT $WIDTH 4 \ "Werkzeuge für Software‑Entwicklung:" \
"vscode" "Visual Studio Code" OFF \ vscode "Visual Studio Code" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# System Tools # System Tools
# ---------------------------- # ----------------------------
SYSTEM=($($DIALOG --title "System‑Werkzeuge" --checklist \ SYSTEM=$(choose_list \
"Hilfsprogramme für System‑Konfiguration:" \ "System‑Werkzeuge" \
$HEIGHT $WIDTH 4 \ "Hilfsprogramme für System‑Konfiguration:" \
"flatseal" "Flatseal (Flatpak‑Rechte verwalten)" OFF \ flatseal "Flatseal" \
2>&1 >/dev/tty)) || abort )
# ---------------------------- # ----------------------------
# Homebrew # Homebrew
# ---------------------------- # ----------------------------
USE_BREW=$($DIALOG --title "Homebrew (optional)" --yesno \ zenity --question \
"Homebrew ist ein zusätzlicher Paketmanager --title="Homebrew (optional)" \
für Entwickler‑ und CLI‑Werkzeuge. --text="Homebrew ist ein zusätzlicher Paketmanager für Entwickler‑ und CLI‑Werkzeuge.
• Installation im Benutzerverzeichnis • Installation im Benutzerverzeichnis
• Keine Änderung am Basissystem • Keine Änderung am Basissystem
• Komplett optional" \ • Komplett optional"
$HEIGHT $WIDTH && echo yes || echo no)
USE_BREW=$([[ $? -eq 0 ]] && echo yes || echo no)
# ---------------------------- # ----------------------------
# Summary # Summary
# ---------------------------- # ----------------------------
SUMMARY="Browser: ${BROWSERS[*]:-keine} SUMMARY="Browser: ${BROWSERS:-keine}
Office: ${OFFICE[*]:-keine} Office: ${OFFICE:-keine}
Grafik: ${GRAPHICS[*]:-keine} Grafik: ${GRAPHICS:-keine}
Medien: ${MEDIA[*]:-keine} Medien: ${MEDIA:-keine}
Audio/Video: ${AV[*]:-keine} Audio/Video: ${AV:-keine}
Spiele: ${GAMES[*]:-keine} Spiele: ${GAMES:-keine}
E‑Mail: ${MAIL[*]:-keine} E‑Mail: ${MAIL:-keine}
Entwicklung: ${DEV[*]:-keine} Entwicklung: ${DEV:-keine}
System: ${SYSTEM[*]:-keine} System: ${SYSTEM:-keine}
Homebrew: $USE_BREW" Homebrew: $USE_BREW"
$DIALOG --title "Zusammenfassung" --yesno \ zenity --question \
"Bitte bestätige die Installation:\n\n$SUMMARY" \ --title="Zusammenfassung" \
$HEIGHT $WIDTH || abort --text="Bitte bestätige die Installation:\n\n$SUMMARY" \
|| abort
# ---------------------------- # ----------------------------
# Installation # Installation
@@ -239,7 +225,7 @@ ensure_flathub
( (
echo "10"; echo "# Installiere Browser..." echo "10"; echo "# Installiere Browser..."
for b in "${BROWSERS[@]}"; do for b in ${BROWSERS//|/ }; do
case "$b" in case "$b" in
firefox) flatpak install -y flathub org.mozilla.firefox ;; firefox) flatpak install -y flathub org.mozilla.firefox ;;
chromium) flatpak install -y flathub org.chromium.Chromium ;; chromium) flatpak install -y flathub org.chromium.Chromium ;;
@@ -248,70 +234,68 @@ ensure_flathub
done done
echo "25"; echo "# Installiere Office..." echo "25"; echo "# Installiere Office..."
[[ " ${OFFICE[*]} " == *" libreoffice "* ]] && flatpak install -y flathub org.libreoffice.LibreOffice [[ "$OFFICE" == *libreoffice* ]] && flatpak install -y flathub org.libreoffice.LibreOffice
[[ " ${OFFICE[*]} " == *" onlyoffice "* ]] && flatpak install -y flathub org.onlyoffice.desktopeditors [[ "$OFFICE" == *onlyoffice* ]] && flatpak install -y flathub org.onlyoffice.desktopeditors
[[ " ${OFFICE[*]} " == *" collabora "* ]] && flatpak install -y flathub com.collabora.CollaboraOffice [[ "$OFFICE" == *collabora* ]] && flatpak install -y flathub com.collabora.CollaboraOffice
[[ " ${OFFICE[*]} " == *" papers "* ]] && flatpak install -y flathub org.gnome.Papers [[ "$OFFICE" == *papers* ]] && flatpak install -y flathub org.gnome.Papers
[[ " ${OFFICE[*]} " == *" simplescan "* ]] && flatpak install -y flathub org.gnome.SimpleScan [[ "$OFFICE" == *simplescan* ]] && flatpak install -y flathub org.gnome.SimpleScan
echo "40"; echo "# Installiere Grafik‑Tools..." echo "40"; echo "# Installiere Grafik‑Tools..."
[[ " ${GRAPHICS[*]} " == *" gimp "* ]] && flatpak install -y flathub org.gimp.GIMP [[ "$GRAPHICS" == *gimp* ]] && flatpak install -y flathub org.gimp.GIMP
[[ " ${GRAPHICS[*]} " == *" krita "* ]] && flatpak install -y flathub org.kde.krita [[ "$GRAPHICS" == *krita* ]] && flatpak install -y flathub org.kde.krita
[[ " ${GRAPHICS[*]} " == *" inkscape "* ]] && flatpak install -y flathub org.inkscape.Inkscape [[ "$GRAPHICS" == *inkscape* ]] && flatpak install -y flathub org.inkscape.Inkscape
echo "55"; echo "# Installiere Medien..." echo "55"; echo "# Installiere Medien..."
[[ " ${MEDIA[*]} " == *" vlc "* ]] && flatpak install -y flathub org.videolan.VLC [[ "$MEDIA" == *vlc* ]] && flatpak install -y flathub org.videolan.VLC
[[ " ${MEDIA[*]} " == *" spotify "* ]] && flatpak install -y flathub com.spotify.Client [[ "$MEDIA" == *spotify* ]] && flatpak install -y flathub com.spotify.Client
echo "70"; echo "# Installiere Audio/Video‑Tools..." echo "70"; echo "# Installiere Audio/Video‑Tools..."
[[ " ${AV[*]} " == *" shotcut "* ]] && flatpak install -y flathub org.shotcut.Shotcut [[ "$AV" == *shotcut* ]] && flatpak install -y flathub org.shotcut.Shotcut
[[ " ${AV[*]} " == *" kdenlive "* ]] && flatpak install -y flathub org.kde.kdenlive [[ "$AV" == *kdenlive* ]] && flatpak install -y flathub org.kde.kdenlive
[[ " ${AV[*]} " == *" audacity "* ]] && flatpak install -y flathub org.audacityteam.Audacity [[ "$AV" == *audacity* ]] && flatpak install -y flathub org.audacityteam.Audacity
[[ " ${AV[*]} " == *" ardour "* ]] && flatpak install -y flathub org.ardour.Ardour [[ "$AV" == *ardour* ]] && flatpak install -y flathub org.ardour.Ardour
echo "85"; echo "# Installiere Spiele‑Plattformen..." echo "85"; echo "# Installiere Spiele‑Plattformen..."
[[ " ${GAMES[*]} " == *" steam "* ]] && flatpak install -y flathub com.valvesoftware.Steam [[ "$GAMES" == *steam* ]] && flatpak install -y flathub com.valvesoftware.Steam
[[ " ${GAMES[*]} " == *" lutris "* ]] && flatpak install -y flathub net.lutris.Lutris [[ "$GAMES" == *lutris* ]] && flatpak install -y flathub net.lutris.Lutris
echo "90"; echo "# Installiere E‑Mail‑Clients..." echo "90"; echo "# Installiere E‑Mail‑Clients..."
[[ " ${MAIL[*]} " == *" thunderbird "* ]] && flatpak install -y flathub org.mozilla.Thunderbird [[ "$MAIL" == *thunderbird* ]] && flatpak install -y flathub org.mozilla.Thunderbird
[[ " ${MAIL[*]} " == *" geary "* ]] && flatpak install -y flathub org.gnome.Geary [[ "$MAIL" == *geary* ]] && flatpak install -y flathub org.gnome.Geary
[[ " ${MAIL[*]} " == *" evolution "* ]] && flatpak install -y flathub org.gnome.Evolution [[ "$MAIL" == *evolution* ]] && flatpak install -y flathub org.gnome.Evolution
echo "95"; echo "# Installiere Entwicklung..." echo "95"; echo "# Installiere Entwicklung..."
[[ " ${DEV[*]} " == *" vscode "* ]] && flatpak install -y flathub com.visualstudio.code [[ "$DEV" == *vscode* ]] && flatpak install -y flathub com.visualstudio.code
echo "97"; echo "# Installiere System‑Tools..." echo "97"; echo "# Installiere System‑Tools..."
[[ " ${SYSTEM[*]} " == *" flatseal "* ]] && flatpak install -y flathub com.github.tchx84.Flatseal [[ "$SYSTEM" == *flatseal* ]] && flatpak install -y flathub com.github.tchx84.Flatseal
echo "98"; echo "# Homebrew..." echo "98"; echo "# Homebrew..."
[[ "$USE_BREW" == yes ]] && install_brew_and_setup_path [[ "$USE_BREW" == yes ]] && install_brew_and_setup_path
echo "100"; echo "# Fertig." echo "100"; echo "# Fertig."
) | $DIALOG --title "Installation läuft" --gauge \ ) | zenity --progress \
"Bitte warten..." \ --title="Installation läuft" \
$HEIGHT $WIDTH 0 --text="Bitte warten..." \
--percentage=0 \
--auto-close
# ---------------------------- # ----------------------------
# Mark wizard as done # Mark wizard as done
# ---------------------------- # ----------------------------
rm -f "$HOME/.config/firstboot/run" rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-user.service systemctl --user disable firstboot-setup.service
zenity --info \
--title="Fertig" \
--text="Die Einrichtung ist abgeschlossen.
$DIALOG --title "Fertig" --msgbox \ Weitere Anwendungen kannst du jederzeit über den COSMIC‑Shop installieren.
"Die Einrichtung ist abgeschlossen.
Weitere Anwendungen kannst du jederzeit
über den COSMIC‑Shop installieren.
Updates: Updates:
• Installierte Anwendungen werden über den COSMIC‑Shop aktualisiert. • Installierte Anwendungen werden über den COSMIC‑Shop aktualisiert.
• Homebrew‑Pakete können mit folgendem Befehl aktualisiert werden: • Homebrew‑Pakete können mit folgendem Befehl aktualisiert werden:
>>>>> brew update && brew upgrade <<<<< brew update && brew upgrade
Der Setup‑Wizard wird nicht erneut gestartet." \ Der Setup‑Wizard wird nicht erneut gestartet."
$HEIGHT $WIDTH
clear