Files
fluffy-pancake/files/etc/skel/.config/firstboot/firstboot-setup.sh
T

348 lines
11 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
LOG="$HOME/.local/state/firstboot-setup.log"
mkdir -p "$(dirname "$LOG")"
exec > >(tee -a "$LOG") 2>&1
# ------------------------------------------------------------
# Session check
# ------------------------------------------------------------
if [[ -z "${WAYLAND_DISPLAY:-}" && -z "${DISPLAY:-}" ]]; then
echo "Keine grafische Session verfügbar breche ab."
exit 1
fi
# ------------------------------------------------------------
# Globaler Abbruch beendet den Wizard vollständig
# ------------------------------------------------------------
abort() {
echo "Abbruch durch Benutzer."
zenity --question \
--title="Setup abbrechen?" \
--text="<big><b>Setup abbrechen?</b></big>\n
Der EinrichtungsAssistent wird dann nicht erneut angezeigt.\n
Alle Anwendungen können jederzeit über den COSMICShop installiert oder entfernt werden.\n
Möchtest du den SetupAssistenten 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 0
}
# ------------------------------------------------------------
# Cleanup bei Fehlern
# ------------------------------------------------------------
cleanup() {
local code=$?
if [[ $code -ne 0 ]]; then
echo "Wizard mit Fehler beendet (Exitcode: $code)."
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
fi
}
trap cleanup EXIT
# ------------------------------------------------------------
# Helper
# ------------------------------------------------------------
ensure_flathub() {
flatpak remote-list --columns=name 2>/dev/null | grep -qx flathub || \
flatpak remote-add --if-not-exists 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
}
# ------------------------------------------------------------
# ZenityCheckliste
# Erwartet Paare: id "beschreibung"
# ------------------------------------------------------------
choose_list() {
local title="$1"
local text="$2"
shift 2
if (( $# % 2 != 0 )); then
echo "choose_list: Ungerade Anzahl Argumente (id/beschreibung Paare erwartet)." >&2
exit 1
fi
local -a rows=()
while (( $# )); do
rows+=(FALSE "$1" "$2")
shift 2
done
local result
result=$(zenity --list \
--title="$title" \
--text="$text" \
--checklist \
--column="Auswahl" \
--column="Anwendung" \
--column="Beschreibung" \
--separator="|" \
"${rows[@]}" \
) || abort
echo "${result:-}"
}
# ------------------------------------------------------------
# Welcome
# ------------------------------------------------------------
zenity --info \
--title="Willkommen bei COSMIC" \
--text="<big><b>Willkommen bei COSMIC</b></big>\n
Dieser Assistent hilft dir beim Einstieg in dein System.\n
<b>Hinweise:</b>\n
• Alle Anwendungen können später jederzeit über den COSMICShop installiert oder entfernt werden.\n
• Der Assistent ist optional und erscheint nur einmal.\n
• Die Auswahl deckt gängige Anwendungen ab, aber nicht alles." \
|| abort
# ------------------------------------------------------------
# Auswahl
# ------------------------------------------------------------
BROWSERS=$(choose_list \
"Browser" \
"<big><b>Browser auswählen</b></big>\nWähle einen oder mehrere Webbrowser aus." \
firefox "Ausgewogen, weit verbreitet, guter Datenschutz" \
chromium "Schlank, schnell, OpenSourceBasis vieler Browser" \
brave "Starker Fokus auf Datenschutz und Werbeblockierung" \
)
OFFICE=$(choose_list \
"Office &amp; Dokumente" \
"<big><b>Office &amp; Dokumente</b></big>\nAnwendungen für Büroarbeit und PDFs." \
libreoffice "Umfangreiche OfficeSuite für lokale Dokumente" \
onlyoffice "Moderne Oberfläche, hohe MSOfficeKompatibilität" \
collabora "LibreOfficeTechnologie mit Fokus auf Zusammenarbeit" \
papers "Leichter PDFViewer zum Lesen und Kommentieren" \
simplescan "Einfaches Scannen von Dokumenten und Bildern" \
)
GRAPHICS=$(choose_list \
"Grafik &amp; Kreativ" \
"<big><b>Grafik &amp; Kreativ</b></big>\nWerkzeuge für Bildbearbeitung und Illustration." \
gimp "Leistungsstarke Bildbearbeitung für Fotos" \
krita "Digitale Malerei und Illustration" \
inkscape "Vektorgrafiken für Logos und Icons" \
)
MEDIA=$(choose_list \
"Medien &amp; Unterhaltung" \
"<big><b>Medien &amp; Unterhaltung</b></big>\nAudio und VideoWiedergabe." \
vlc "Spielt nahezu alle Audio und Videoformate ab" \
showtime "Einfacher Videoplayer mit klarer Oberfläche" \
spotify "StreamingDienst für Musik und Podcasts" \
)
AV=$(choose_list \
"Audio &amp; VideoBearbeitung" \
"<big><b>Audio &amp; VideoBearbeitung</b></big>\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 AudioProduktion" \
)
GAMES=$(choose_list \
"Spiele" \
"<big><b>SpielePlattformen</b></big>\nPlattformen für PCSpiele." \
steam "Große Spielebibliothek und CommunityFunktionen" \
lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" \
)
MAIL=$(choose_list \
"EMail" \
"<big><b>EMailProgramme</b></big>\nDesktopClients für EMail und Kalender." \
thunderbird "Leistungsstarker MailClient mit Erweiterungen" \
geary "Schlanker MailClient mit einfacher Bedienung" \
evolution "EMail, Kalender und Kontakte in einer Anwendung" \
)
DEV=$(choose_list \
"Entwicklung" \
"<big><b>Entwicklung</b></big>\nWerkzeuge für SoftwareEntwicklung." \
vscode "Beliebter CodeEditor mit vielen Erweiterungen" \
)
SYSTEM=$(choose_list \
"SystemWerkzeuge" \
"<big><b>SystemWerkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
flatseal "Verwaltung von FlatpakBerechtigungen" \
)
# ------------------------------------------------------------
# Homebrew
# ------------------------------------------------------------
zenity --question \
--title="Homebrew (optional)" \
--text="<big><b>Homebrew installieren?</b></big>\n
Zusätzlicher Paketmanager für Entwickler und CLIWerkzeuge.\n
• Installation im Benutzerverzeichnis\n
• Keine Änderung am Basissystem\n
• Komplett optional" \
|| true
USE_BREW=$([[ $? -eq 0 ]] && echo yes || echo no)
# ------------------------------------------------------------
# AutoUpdate
# ------------------------------------------------------------
zenity --question \
--title="Automatische Systemaktualisierung" \
--text="<big><b>Automatische Updates aktivieren?</b></big>\n
Wöchentliche Prüfung und Installation von SystemUpdates.\n
<b>Manuell:</b>\n
<tt>bootc upgrade</tt>" \
|| true
AUTO_UPDATE=$([[ $? -eq 0 ]] && echo yes || echo no)
# ------------------------------------------------------------
# Zusammenfassung
# ------------------------------------------------------------
SUMMARY="Browser: ${BROWSERS:-keine}
Office: ${OFFICE:-keine}
Grafik: ${GRAPHICS:-keine}
Medien: ${MEDIA:-keine}
Audio/Video: ${AV:-keine}
Spiele: ${GAMES:-keine}
EMail: ${MAIL:-keine}
Entwicklung: ${DEV:-keine}
System: ${SYSTEM:-keine}
Homebrew: $USE_BREW
Automatische Updates: $AUTO_UPDATE"
zenity --question \
--title="Zusammenfassung" \
--text="<big><b>Bitte bestätige die Installation</b></big>\n\n$SUMMARY" \
|| abort
# ------------------------------------------------------------
# Installation
# ------------------------------------------------------------
ensure_flathub
(
echo "10"; echo "# Installiere Anwendungen…"
for b in ${BROWSERS//|/ }; do
case "$b" in
firefox) flatpak install -y flathub org.mozilla.firefox ;;
chromium) flatpak install -y flathub org.chromium.Chromium ;;
brave) flatpak install -y flathub com.brave.Browser ;;
esac
done
for o in ${OFFICE//|/ }; do
case "$o" in
libreoffice) flatpak install -y flathub org.libreoffice.LibreOffice ;;
onlyoffice) flatpak install -y flathub org.onlyoffice.desktopeditors ;;
collabora) flatpak install -y flathub com.collabora.CollaboraOffice ;;
papers) flatpak install -y flathub org.gnome.Papers ;;
simplescan) flatpak install -y flathub org.gnome.SimpleScan ;;
esac
done
for g in ${GRAPHICS//|/ }; do
case "$g" in
gimp) flatpak install -y flathub org.gimp.GIMP ;;
krita) flatpak install -y flathub org.kde.krita ;;
inkscape) flatpak install -y flathub org.inkscape.Inkscape ;;
esac
done
for m in ${MEDIA//|/ }; do
case "$m" in
vlc) flatpak install -y flathub org.videolan.VLC ;;
showtime) flatpak install -y flathub org.gnome.Showtime ;;
spotify) flatpak install -y flathub com.spotify.Client ;;
esac
done
for a in ${AV//|/ }; do
case "$a" in
shotcut) flatpak install -y flathub org.shotcut.Shotcut ;;
kdenlive) flatpak install -y flathub org.kde.kdenlive ;;
audacity) flatpak install -y flathub org.audacityteam.Audacity ;;
ardour) flatpak install -y flathub org.ardour.Ardour ;;
esac
done
for g in ${GAMES//|/ }; do
case "$g" in
steam) flatpak install -y flathub com.valvesoftware.Steam ;;
lutris) flatpak install -y flathub net.lutris.Lutris ;;
esac
done
for m in ${MAIL//|/ }; do
case "$m" in
thunderbird) flatpak install -y flathub org.mozilla.Thunderbird ;;
geary) flatpak install -y flathub org.gnome.Geary ;;
evolution) flatpak install -y flathub org.gnome.Evolution ;;
esac
done
for d in ${DEV//|/ }; do
[[ "$d" == vscode ]] && flatpak install -y flathub com.visualstudio.code
done
for s in ${SYSTEM//|/ }; do
[[ "$s" == flatseal ]] && flatpak install -y flathub com.github.tchx84.Flatseal
done
[[ "$USE_BREW" == yes ]] && install_brew_and_setup_path
echo "100"; echo "# Fertig."
) | zenity --progress \
--title="Installation läuft" \
--text="Bitte warten…" \
--percentage=0 \
--auto-close
# ------------------------------------------------------------
# AutoUpdate aktivieren
# ------------------------------------------------------------
[[ "$AUTO_UPDATE" == yes ]] && systemctl --user enable --now bootc-update.timer || true
# ------------------------------------------------------------
# Wizard done
# ------------------------------------------------------------
trap - EXIT
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
zenity --info \
--title="Fertig" \
--text="<big><b>Die Einrichtung ist abgeschlossen.</b></big>\n
Weitere Anwendungen kannst du jederzeit über den COSMICShop installieren.\n
<b>Homebrew aktualisieren:</b>\n
<tt>brew update &amp;&amp; brew upgrade</tt>\n
Der SetupAssistent wird nicht erneut gestartet."