diff --git a/files/etc/skel/.config/firstboot/firstboot-setup.sh b/files/etc/skel/.config/firstboot/firstboot-setup.sh deleted file mode 100644 index 802be2d..0000000 --- a/files/etc/skel/.config/firstboot/firstboot-setup.sh +++ /dev/null @@ -1,391 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -LOG="$HOME/.local/state/firstboot-setup.log" -mkdir -p "$(dirname "$LOG")" -exec > >(tee -a "$LOG") 2>&1 - -# ------------------------------------------------------------ -# WICHTIG: Dynamisches Warten auf Flatpak-Bereitschaft -# ------------------------------------------------------------ -echo "=== Initialisiere User-Session und Flatpak ===" >&2 - -MAX_WAIT=60 -WAITED=0 - -while [[ $WAITED -lt $MAX_WAIT ]]; do - if systemctl --user is-active >/dev/null 2>&1; then - if flatpak --version >/dev/null 2>&1; then - echo "✓ Flatpak ist nach $WAITED Sekunden bereit." >&2 - break - fi - - echo "$(date +%T.%N) - Flatpak nicht verfügbar, starte Dienst..." >&2 - systemctl --user start org.freedesktop.Flatpak.service 2>&1 || true - sleep 3 - fi - - ((WAITED++)) || true - sleep 1 - - if [[ $((MAX_WAIT - WAITED)) -le 5 ]]; then - echo "⚠️ Wartezeit läuft kurz ($WAITED/$MAX_WAIT)..." >&2 - fi -done - -if [[ $WAITED -ge $MAX_WAIT ]]; then - echo "❌ FATAL: Flatpak konnte nicht innerhalb von $MAX_WAIT Sekunden initialisiert werden!" >&2 - exit 1 -fi - -# ------------------------------------------------------------ -# XDG-Umgebung sicherstellen -# ------------------------------------------------------------ -export HOME="$HOME" -export USER=$(whoami) -export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" -export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}" - -mkdir -p "$XDG_DATA_HOME" -mkdir -p "$(dirname "$LOG")" - -echo "✓ XDG-Umgebung konfiguriert: XDG_DATA_HOME=$XDG_DATA_HOME" >&2 - - -# ------------------------------------------------------------ -# Helper-Funktionen mit besserer Fehlerbehandlung -# ------------------------------------------------------------ -ensure_flathub() { - if ! flatpak remote-list --columns=name 2>/dev/null | grep -qx flathub; then - echo "Aktiviere Flathub..." >&2 - flatpak remote-add --if-not-exists flathub \ - https://dl.flathub.org/repo/flathub.flatapkrepo || { - echo "❌ FATAL: Konnte Flathub nicht aktivieren!" >&2 - exit 1 - } - fi - - # Warte kurz, bis das Repository geladen ist (wichtig!) - sleep 5 -} - -flatpak_user_install() { - local remote="$1" - local app="$2" - - export XDG_DATA_HOME="${XDG_DATA_HOME:-$HOME/.local/share}" - - if flatpak info --user "$app" >/dev/null 2>&1; then - echo "Flatpak (user) bereits installiert: $app" - return 0 - fi - - echo "Installiere Flatpak (user): $app" >&2 - - # Füge Fehlerbehandlung hinzu - if ! flatpak install --user -y "$remote" "$app"; then - echo "❌ FATAL: Flatpak-Installation fehlgeschlagen: $app" >&2 - - # Versuche, das Problem zu diagnostizieren - echo "Diagnose..." >&2 - flatpak search "$app" || true - exit 1 - fi - - echo "✓ Installation erfolgreich: $app" >&2 -} - -# ------------------------------------------------------------ -# Rest des Skripts (wie zuvor) ... - - -# ------------------------------------------------------------ -# Zenity‑Checkliste -# 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 - - # WICHTIG: Alle Zeilen zusammenführen → eine einzige Zeile - echo "$result" | tr -d '\n' - return 0 - else - abort - return 2 - fi -} - -# ------------------------------------------------------------ -# Welcome -# ------------------------------------------------------------ -zenity --info \ - --title="Willkommen bei COSMIC" \ - --text="Willkommen bei COSMIC\n -Dieser Assistent hilft dir beim Einstieg in dein System.\n -Hinweise:\n -• Alle Anwendungen können später jederzeit über den COSMIC‑Shop 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=$? - [[ $code -eq 2 ]] && continue - exit 1 - fi - done -} - -# ------------------------------------------------------------ -# Listen -# ------------------------------------------------------------ -run_list BROWSERS_LIST \ - "Browser" \ - "Browser auswählen\nWähle einen oder mehrere Webbrowser aus." \ - firefox "Ausgewogen, weit verbreitet, guter Datenschutz" \ - chromium "Schlank, schnell, Open‑Source‑Basis vieler Browser" \ - brave "Starker Fokus auf Datenschutz und Werbeblockierung" - -run_list OFFICE_LIST \ - "Office & Dokumente" \ - "Office & Dokumente\nAnwendungen für Büroarbeit und PDFs." \ - libreoffice "Umfangreiche Office‑Suite für lokale Dokumente" \ - onlyoffice "Moderne Oberfläche, hohe MS‑Office‑Kompatibilität" \ - collabora "LibreOffice‑Technologie mit Fokus auf Zusammenarbeit" \ - papers "Leichter PDF‑Viewer zum Lesen und Kommentieren" \ - simplescan "Einfaches Scannen von Dokumenten und Bildern" - -run_list GRAPHICS_LIST \ - "Grafik & Kreativ" \ - "Grafik & Kreativ\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_LIST \ - "Medien & Unterhaltung" \ - "Medien & Unterhaltung\nAudio‑ und Video‑Wiedergabe." \ - vlc "Spielt nahezu alle Audio‑ und Videoformate ab" \ - showtime "Einfacher Videoplayer mit klarer Oberfläche" \ - spotify "Streaming‑Dienst für Musik und Podcasts" - -run_list AV_LIST \ - "Audio & Video‑Bearbeitung" \ - "Audio & Video‑Bearbeitung\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 Audio‑Produktion" - -run_list GAMES_LIST \ - "Spiele" \ - "Spiele‑Plattformen\nPlattformen für PC‑Spiele." \ - steam "Große Spielebibliothek und Community‑Funktionen" \ - lutris "Zentrale Verwaltung von Spielen aus vielen Quellen" \ - sober "Spiele Roblox auf Linux" - -run_list MAIL_LIST \ - "E‑Mail" \ - "E‑Mail‑Programme\nDesktop‑Clients für E‑Mail und Kalender." \ - thunderbird "Leistungsstarker Mail‑Client mit Erweiterungen" \ - geary "Schlanker Mail‑Client mit einfacher Bedienung" \ - evolution "E‑Mail, Kalender und Kontakte in einer Anwendung" - -run_list KI_LIST \ - "Anwendungen für lokale KI" \ - "KI-Anwenungen\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_LIST \ - "Entwicklung" \ - "Entwicklung\nWerkzeuge für Software‑Entwicklung." \ - vscode "Beliebter Code‑Editor mit vielen Erweiterungen" - -run_list SYSTEM_LIST \ - "System‑Werkzeuge" \ - "System‑Werkzeuge\nHilfsprogramme für Konfiguration und Verwaltung." \ - flatseal "Verwaltung von Flatpak‑Berechtigungen" - -if zenity --question \ - --title="Homebrew installieren?" \ - --width=500 \ - --text="Homebrew installieren?\n -Homebrew ist ein Paketmanager für Kommandozeilen‑Werkzeuge.\n -Er eignet sich besonders für Entwickler und fortgeschrittene Nutzer.\n -\n -Möchtest du Homebrew installieren?" -then - echo "Installiere Homebrew (non‑interactive)…" - systemctl --user enable --now firstboot-brew-install@"$USER".service & - cosmic-term --bash -c "journalctl -fu firstboot-brew-install@$USER.service" & -else - echo "Homebrew wird nicht installiert." -fi - -if zenity --question \ - --title="Automatische Updates aktivieren?" \ - --width=500 \ - --text="Automatische System‑Updates\n -Das System kann regelmäßig image‑basierte Updates automatisch installieren.\n -\n -Empfohlen für die meisten Nutzer.\n -\n -Möchtest du automatische Updates aktivieren?" -then - echo "Aktiviere automatische Updates…" - - BOOTC_TIMER=$(systemctl list-unit-files \ - | awk '/bootc-.*fetch.*apply.*updates.*\.timer/ {print $1; exit}') - - if [ -n "$BOOTC_TIMER" ]; then - systemctl enable --now "$BOOTC_TIMER" - else - echo "Kein bootc Auto-Update Timer gefunden." >> /tmp/firstboot-debug.log - fi - -else - echo "Automatische Updates bleiben deaktiviert." -fi - -# ------------------------------------------------------------ -# Installation -# ------------------------------------------------------------ -ensure_flathub - -( - echo "10"; echo "# Installiere Anwendungen…" - - for b in ${BROWSERS_LIST//|/ }; do - case "$b" in - firefox) flatpak_user_install flathub org.mozilla.firefox ;; - chromium) flatpak_user_install flathub org.chromium.Chromium ;; - brave) flatpak_user_install flathub com.brave.Browser ;; - esac - done - - for o in ${OFFICE_LIST//|/ }; do - case "$o" in - libreoffice) flatpak_user_install flathub org.libreoffice.LibreOffice ;; - onlyoffice) flatpak_user_install flathub org.onlyoffice.desktopeditors ;; - collabora) flatpak_user_install flathub com.collabora.Office ;; - papers) flatpak_user_install flathub org.gnome.Papers ;; - simplescan) flatpak_user_install flathub org.gnome.SimpleScan ;; - esac - done - - for g in ${GRAPHICS_LIST//|/ }; do - case "$g" in - gimp) flatpak_user_install flathub org.gimp.GIMP ;; - krita) flatpak_user_install flathub org.kde.krita ;; - inkscape) flatpak_user_install flathub org.inkscape.Inkscape ;; - esac - done - - for m in ${MEDIA_LIST//|/ }; do - case "$m" in - vlc) flatpak_user_install flathub org.videolan.VLC ;; - showtime) flatpak_user_install flathub org.gnome.Showtime ;; - spotify) flatpak_user_install flathub com.spotify.Client ;; - esac - done - - for a in ${AV_LIST//|/ }; do - case "$a" in - shotcut) flatpak_user_install flathub org.shotcut.Shotcut ;; - kdenlive) flatpak_user_install flathub org.kde.kdenlive ;; - audacity) flatpak_user_install flathub org.audacityteam.Audacity ;; - ardour) flatpak_user_install flathub org.ardour.Ardour ;; - esac - done - - for g in ${GAMES_LIST//|/ }; do - case "$g" in - steam) flatpak_user_install flathub com.valvesoftware.Steam ;; - lutris) flatpak_user_install flathub net.lutris.Lutris ;; - sober) flatpak_user_install flathub org.vinegarhq.Sober ;; - esac - done - - for m in ${MAIL_LIST//|/ }; do - case "$m" in - thunderbird) flatpak_user_install flathub org.mozilla.Thunderbird ;; - geary) flatpak_user_install flathub org.gnome.Geary ;; - evolution) flatpak_user_install flathub org.gnome.Evolution ;; - esac - done - - for m in ${KI_LIST//|/ }; do - case "$m" in - alpaca) flatpak_user_install flathub com.jeffser.Alpaca ;; - gpt4all) flatpak_user_install flathub io.gpt4all.gpt4all ;; - esac - done - - for d in ${DEV_LIST//|/ }; do - [[ "$d" == vscode ]] && flatpak_user_install flathub com.visualstudio.code - done - - for s in ${SYSTEM_LIST//|/ }; do - [[ "$s" == flatseal ]] && flatpak_user_install 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="Die Einrichtung ist abgeschlossen.\n -Weitere Anwendungen kannst du jederzeit über den COSMIC‑Shop installieren.\n -Der Setup‑Assistent wird nicht erneut gestartet." diff --git a/files/etc/skel/.config/firstboot/run b/files/etc/skel/.config/firstboot/run deleted file mode 100644 index 8b13789..0000000 --- a/files/etc/skel/.config/firstboot/run +++ /dev/null @@ -1 +0,0 @@ - diff --git a/files/etc/skel/.config/firstboot/wait-and-run.sh b/files/etc/skel/.config/firstboot/wait-and-run.sh deleted file mode 100644 index f3ecf7d..0000000 --- a/files/etc/skel/.config/firstboot/wait-and-run.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Warten, bis wir wirklich in einer grafischen Session sind -until [ -n "${WAYLAND_DISPLAY:-}" ] || [ -n "${DISPLAY:-}" ]; do - sleep 1 -done - -# User‑DBus stabil -until busctl --user list >/dev/null 2>&1; do - sleep 1 -done - -sleep 2 -exec "$HOME/.config/firstboot/firstboot-setup.sh"