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

327 lines
10 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
# ------------------------------------------------------------
# Abbruchdialog
# Ja -> Wizard beenden
# Nein -> zurück zur aktuellen Liste (return 2)
# ------------------------------------------------------------
abort() {
if 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?"
then
rm -f "$HOME/.config/firstboot/run"
systemctl --user disable firstboot-setup.service >/dev/null 2>&1 || true
exit 1
else
return 2
fi
}
# ------------------------------------------------------------
# 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
}
# ------------------------------------------------------------
# ZenityCheckliste
# OK -> stdout = Auswahl, return 0
# Cancel -> abort(); Nein => return 2
# ------------------------------------------------------------
choose_list() {
local title="$1"
local text="$2"
shift 2
if (( $# % 2 != 0 )); then
echo "choose_list: Ungerade Anzahl Argumente." >&2
exit 1
fi
local -a rows=()
while (( $# )); do
rows+=(FALSE "$1" "$2")
shift 2
done
local result
if result=$(zenity --list \
--title="$title" \
--text="$text" \
--width=800 \
--height=600 \
--checklist \
--column="Auswahl" \
--column="Anwendung" \
--column="Beschreibung" \
--separator="|" \
"${rows[@]}"); then
printf '%s\n' "$result"
return 0
else
abort
return 2
fi
}
# ------------------------------------------------------------
# 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-Runner
# return 0 -> weiter
# return 2 -> gleiche Liste erneut
# ------------------------------------------------------------
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" \
"<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"
run_list OFFICE \
"Office & 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"
run_list GRAPHICS \
"Grafik & 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"
run_list MEDIA \
"Medien & 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"
run_list AV \
"Audio & 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"
run_list GAMES \
"Spiele" \
"<big><b>SpielePlattformen</b></big>\nPlattformen für PCSpiele." \
steam "Große Spielebibliothek und CommunityFunktionen" \
lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" \
sober "Spiele Roblox auf Linux"
run_list MAIL \
"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"
run_list KI \
"Anwendungen für lokale KI" \
"<big><b>KI-Anwenungen</b></big>\nProgramme für lokale KI-Anwendungen" \
alpaca "All-In-One-Anwendung für lokale Chat- und RAG-Nutzung" \
gpt4all "All-In-One-Anwendung von NomicAI"
run_list DEV \
"Entwicklung" \
"<big><b>Entwicklung</b></big>\nWerkzeuge für SoftwareEntwicklung." \
vscode "Beliebter CodeEditor mit vielen Erweiterungen"
run_list SYSTEM \
"SystemWerkzeuge" \
"<big><b>SystemWerkzeuge</b></big>\nHilfsprogramme für Konfiguration und Verwaltung." \
flatseal "Verwaltung von FlatpakBerechtigungen"
if zenity --question \
--title="Homebrew installieren?" \
--width=500 \
--text="<big><b>Homebrew installieren?</b></big>\n
Homebrew ist ein Paketmanager für KommandozeilenWerkzeuge.\n
Er eignet sich besonders für Entwickler und fortgeschrittene Nutzer.\n
\n
Möchtest du Homebrew installieren?"
then
echo "Installiere Homebrew (noninteractive)…"
systemctl start firstboot-brew-install@"USER".service
else
echo "Homebrew wird nicht installiert."
fi
if zenity --question \
--title="Automatische Updates aktivieren?" \
--width=500 \
--text="<big><b>Automatische SystemUpdates</b></big>\n
Das System kann regelmäßig imagebasierte Updates automatisch installieren.\n
\n
Empfohlen für die meisten Nutzer.\n
\n
Möchtest du automatische Updates aktivieren?"
then
echo "Aktiviere automatische Updates…"
systemctl enable --now bootc-update.timer
else
echo "Automatische Updates bleiben deaktiviert."
fi
# ------------------------------------------------------------
# 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 ;;
sober) flatpak install -y flathub org.vinegarhq.Sober ;;
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 m in ${KI//|/ }; do
case "$m" in
alpaca) flatpak install -y flathub com.jeffser.Alpaca ;;
gpt4all) flatpak install -y flathub io.gpt4all.gpt4all ;;
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
echo "100"; echo "# Fertig."
) | zenity --progress \
--title="Installation läuft" \
--text="Bitte warten…" \
--percentage=0 \
--auto-close
# ------------------------------------------------------------
# Wizard done
# ------------------------------------------------------------
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
Der SetupAssistent wird nicht erneut gestartet."