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

348 lines
11 KiB
Bash
Raw Normal View History

2026-03-12 20:54:23 +01:00
#!/usr/bin/env bash
set -euo pipefail
2026-03-12 21:09:19 +01:00
LOG="$HOME/.local/state/firstboot-setup.log"
mkdir -p "$(dirname "$LOG")"
2026-03-12 20:54:23 +01:00
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
# ------------------------------------------------------------
2026-03-12 20:54:23 +01:00
abort() {
echo "Abbruch durch Benutzer."
2026-03-13 10:04:21 +01:00
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
2026-03-12 20:54:23 +01:00
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
exit 0
2026-03-12 20:54:23 +01:00
}
# ------------------------------------------------------------
# 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
# ------------------------------------------------------------
2026-03-12 20:54:23 +01:00
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)"
2026-03-12 20:54:23 +01:00
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"
# ------------------------------------------------------------
2026-03-13 10:04:21 +01:00
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
2026-03-13 10:04:21 +01:00
local result
result=$(zenity --list \
--title="$title" \
--text="$text" \
--checklist \
--column="Auswahl" \
--column="Anwendung" \
2026-03-13 10:04:21 +01:00
--column="Beschreibung" \
--separator="|" \
"${rows[@]}" \
2026-03-13 10:04:21 +01:00
) || abort
echo "${result:-}"
2026-03-13 10:04:21 +01:00
}
2026-03-12 20:54:23 +01:00
# ------------------------------------------------------------
# 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
# ------------------------------------------------------------
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
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" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
DEV=$(choose_list \
"Entwicklung" \
"<big><b>Entwicklung</b></big>\nWerkzeuge für SoftwareEntwicklung." \
vscode "Beliebter CodeEditor mit vielen Erweiterungen" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
2026-03-13 10:04:21 +01:00
SYSTEM=$(choose_list \
"SystemWerkzeuge" \
"<big><b>SystemWerkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
flatseal "Verwaltung von FlatpakBerechtigungen" \
2026-03-13 10:04:21 +01:00
)
2026-03-12 20:54:23 +01:00
# ------------------------------------------------------------
2026-03-12 20:54:23 +01:00
# Homebrew
# ------------------------------------------------------------
2026-03-13 10:04:21 +01:00
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
2026-03-13 10:04:21 +01:00
USE_BREW=$([[ $? -eq 0 ]] && echo yes || echo no)
2026-03-12 20:54:23 +01:00
# ------------------------------------------------------------
# AutoUpdate
# ------------------------------------------------------------
2026-03-13 10:20:03 +01:00
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
2026-03-13 10:20:03 +01:00
AUTO_UPDATE=$([[ $? -eq 0 ]] && echo yes || echo no)
# ------------------------------------------------------------
# Zusammenfassung
# ------------------------------------------------------------
2026-03-13 10:04:21 +01:00
SUMMARY="Browser: ${BROWSERS:-keine}
Office: ${OFFICE:-keine}
Grafik: ${GRAPHICS:-keine}
Medien: ${MEDIA:-keine}
Audio/Video: ${AV:-keine}
Spiele: ${GAMES:-keine}
EMail: ${MAIL:-keine}
2026-03-13 10:04:21 +01:00
Entwicklung: ${DEV:-keine}
System: ${SYSTEM:-keine}
2026-03-12 20:54:23 +01:00
2026-03-13 10:20:03 +01:00
Homebrew: $USE_BREW
Automatische Updates: $AUTO_UPDATE"
2026-03-13 10:04:21 +01:00
zenity --question \
--title="Zusammenfassung" \
--text="<big><b>Bitte bestätige die Installation</b></big>\n\n$SUMMARY" \
2026-03-13 10:04:21 +01:00
|| abort
2026-03-12 20:54:23 +01:00
# ------------------------------------------------------------
2026-03-12 20:54:23 +01:00
# Installation
# ------------------------------------------------------------
2026-03-12 20:54:23 +01:00
ensure_flathub
(
echo "10"; echo "# Installiere Anwendungen…"
2026-03-13 10:04:21 +01:00
for b in ${BROWSERS//|/ }; do
2026-03-12 20:54:23 +01:00
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
2026-03-12 20:54:23 +01:00
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
2026-03-12 20:54:23 +01:00
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
2026-03-13 10:20:03 +01:00
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
2026-03-12 20:54:23 +01:00
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
2026-03-12 20:54:23 +01:00
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
2026-03-12 20:54:23 +01:00
for d in ${DEV//|/ }; do
[[ "$d" == vscode ]] && flatpak install -y flathub com.visualstudio.code
done
2026-03-12 20:54:23 +01:00
for s in ${SYSTEM//|/ }; do
[[ "$s" == flatseal ]] && flatpak install -y flathub com.github.tchx84.Flatseal
done
2026-03-12 20:54:23 +01:00
[[ "$USE_BREW" == yes ]] && install_brew_and_setup_path
echo "100"; echo "# Fertig."
2026-03-13 10:04:21 +01:00
) | zenity --progress \
--title="Installation läuft" \
--text="Bitte warten…" \
2026-03-13 10:04:21 +01:00
--percentage=0 \
--auto-close
2026-03-12 20:54:23 +01:00
# ------------------------------------------------------------
# AutoUpdate aktivieren
# ------------------------------------------------------------
[[ "$AUTO_UPDATE" == yes ]] && systemctl --user enable --now bootc-update.timer || true
2026-03-13 10:20:03 +01:00
# ------------------------------------------------------------
# Wizard done
# ------------------------------------------------------------
trap - EXIT
2026-03-12 21:09:19 +01:00
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
2026-03-12 21:09:19 +01:00
2026-03-13 10:04:21 +01:00
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."