Refactor firstboot-setup.sh for better user experience
Refactor firstboot-setup.sh to improve user prompts and cleanup logic.
This commit is contained in:
@@ -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 Einrichtungs‑Assistent wird dann nicht erneut angezeigt.\n
|
Der Einrichtungs‑Assistent wird dann nicht erneut angezeigt.\n
|
||||||
Alle Anwendungen können jederzeit über den COSMIC‑Shop installiert oder entfernt werden.\n
|
Alle Anwendungen können jederzeit über den COSMIC‑Shop installiert oder entfernt werden.\n
|
||||||
Möchtest du den Setup‑Assistenten wirklich abbrechen?" \
|
Möchtest du den Setup‑Assistenten wirklich abbrechen?"
|
||||||
>/dev/null 2>&1 || true
|
then
|
||||||
|
|
||||||
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
|
|
||||||
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
|
||||||
|
else
|
||||||
|
return 2
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# Zenity‑Checkliste
|
# Zenity‑Checkliste
|
||||||
# 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
|
||||||
--title="$title" \
|
if result=$(zenity --list \
|
||||||
--text="$text" \
|
--title="$title" \
|
||||||
--checklist \
|
--text="$text" \
|
||||||
--column="Auswahl" \
|
--width=800 \
|
||||||
--column="Anwendung" \
|
--height=600 \
|
||||||
--column="Beschreibung" \
|
--checklist \
|
||||||
--separator="|" \
|
--column="Auswahl" \
|
||||||
"${rows[@]}" \
|
--column="Anwendung" \
|
||||||
|| abort
|
--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
|
|| 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, Open‑Source‑Basis vieler Browser" \
|
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" \
|
||||||
"<big><b>Office & Dokumente</b></big>\nAnwendungen für Büroarbeit und PDFs." \
|
"<big><b>Office & Dokumente</b></big>\nAnwendungen für Büroarbeit und PDFs." \
|
||||||
libreoffice "Umfangreiche Office‑Suite für lokale Dokumente" \
|
libreoffice "Umfangreiche Office‑Suite für lokale Dokumente" \
|
||||||
onlyoffice "Moderne Oberfläche, hohe MS‑Office‑Kompatibilität" \
|
onlyoffice "Moderne Oberfläche, hohe MS‑Office‑Kompatibilität" \
|
||||||
collabora "LibreOffice‑Technologie mit Fokus auf Zusammenarbeit" \
|
collabora "LibreOffice‑Technologie mit Fokus auf Zusammenarbeit" \
|
||||||
papers "Leichter PDF‑Viewer zum Lesen und Kommentieren" \
|
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" \
|
||||||
"<big><b>Grafik & Kreativ</b></big>\nWerkzeuge für Bildbearbeitung und Illustration." \
|
"<big><b>Grafik & 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 & Unterhaltung</b></big>\nAudio‑ und Video‑Wiedergabe." \
|
"<big><b>Medien & Unterhaltung</b></big>\nAudio‑ und Video‑Wiedergabe." \
|
||||||
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 "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" \
|
||||||
"<big><b>Audio & Video‑Bearbeitung</b></big>\nWerkzeuge für kreative Medienproduktion." \
|
"<big><b>Audio & Video‑Bearbeitung</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 Audio‑Produktion" \
|
ardour "Professionelle Audio‑Produktion"
|
||||||
)
|
|
||||||
|
|
||||||
GAMES=$(choose_list \
|
run_list GAMES \
|
||||||
"Spiele" \
|
"Spiele" \
|
||||||
"<big><b>Spiele‑Plattformen</b></big>\nPlattformen für PC‑Spiele." \
|
"<big><b>Spiele‑Plattformen</b></big>\nPlattformen für PC‑Spiele." \
|
||||||
steam "Große Spielebibliothek und Community‑Funktionen" \
|
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" \
|
||||||
"<big><b>E‑Mail‑Programme</b></big>\nDesktop‑Clients für E‑Mail und Kalender." \
|
"<big><b>E‑Mail‑Programme</b></big>\nDesktop‑Clients für E‑Mail und Kalender." \
|
||||||
thunderbird "Leistungsstarker Mail‑Client mit Erweiterungen" \
|
thunderbird "Leistungsstarker Mail‑Client mit Erweiterungen" \
|
||||||
geary "Schlanker Mail‑Client mit einfacher Bedienung" \
|
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" \
|
||||||
"<big><b>Entwicklung</b></big>\nWerkzeuge für Software‑Entwicklung." \
|
"<big><b>Entwicklung</b></big>\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" \
|
||||||
"<big><b>System‑Werkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
|
"<big><b>System‑Werkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
|
||||||
flatseal "Verwaltung von Flatpak‑Berechtigungen" \
|
flatseal "Verwaltung von Flatpak‑Berechtigungen"
|
||||||
)
|
|
||||||
|
|
||||||
# ------------------------------------------------------------
|
# ------------------------------------------------------------
|
||||||
# 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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user