Feat: Linutil als letzten Install-Schritt (Stage 11) hinzufügen

Ergänzt stages/11-linutil.sh, das Linutil (Chris Titus Tech System Toolbox,
curl -fsSL https://christitus.com/linux | sh) als Zielbenutzer ausführt -
analog zum bestehenden Hyprland-Installer-Muster in Stage 10, da Linutil
selbst per sudo eskaliert wo nötig. Überspringt sich mit klarer Meldung,
falls kein Terminal verfügbar ist, statt an der interaktiven TUI zu hängen.

--all läuft jetzt 00 bis 11, die whiptail-Checklist sowie Hilfetext,
README.md und AGENTS.md wurden entsprechend ergänzt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017WMUd2fGsPCtTCVQkSS5TA
This commit is contained in:
2026-09-06 21:07:22 +02:00
co-authored by Claude Sonnet 5
parent 2e470d676d
commit 1723803e9c
5 changed files with 60 additions and 7 deletions
+3 -2
View File
@@ -37,7 +37,7 @@ Dieses Repository ist ein modulares, automatisiertes Setup- und Konfigurations-F
│ ├── 04-virtualization.list # QEMU, KVM, Libvirt, Bridge-Tools │ ├── 04-virtualization.list # QEMU, KVM, Libvirt, Bridge-Tools
│ ├── 05-multimedia.list # VLC, Amberol, GIMP, Loupe, LibreOffice │ ├── 05-multimedia.list # VLC, Amberol, GIMP, Loupe, LibreOffice
│ └── 06-flatpaks.list # Flathub App-IDs │ └── 06-flatpaks.list # Flathub App-IDs
├── stages/ # Sequenziell und modular ausführbare Phasen (00 bis 10) ├── stages/ # Sequenziell und modular ausführbare Phasen (00 bis 11)
│ ├── 00-preflight.sh # Systemvoraussetzungen, Root/User-Erkennung, Internetverbindung │ ├── 00-preflight.sh # Systemvoraussetzungen, Root/User-Erkennung, Internetverbindung
│ ├── 01-apt-unstable.sh # Deb822-Quellen, Keyrings, Pinning, apt-listbugs, dist-upgrade │ ├── 01-apt-unstable.sh # Deb822-Quellen, Keyrings, Pinning, apt-listbugs, dist-upgrade
│ ├── 02-kernel-hardware.sh # XanMod-Kernel, CPU P-State, Microcode, auto-cpufreq │ ├── 02-kernel-hardware.sh # XanMod-Kernel, CPU P-State, Microcode, auto-cpufreq
@@ -48,7 +48,8 @@ Dieses Repository ist ein modulares, automatisiertes Setup- und Konfigurations-F
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync │ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
│ ├── 08-flatpaks.sh # Flathub Setup, Flatpak-Paketlisten-Installation │ ├── 08-flatpaks.sh # Flathub Setup, Flatpak-Paketlisten-Installation
│ ├── 09-apps.sh # Spotify, Waydroid, OpenDeck, Desktop-Starter, MIME-Types │ ├── 09-apps.sh # Spotify, Waydroid, OpenDeck, Desktop-Starter, MIME-Types
── 10-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Desktop-Setup ── 10-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Desktop-Setup
│ └── 11-linutil.sh # Linutil (Chris Titus Tech System Toolbox), letzter Install-Schritt
├── data/ # Statische Konfigurationsdateien & Vorlagen ├── data/ # Statische Konfigurationsdateien & Vorlagen
│ ├── apt/ │ ├── apt/
│ │ ├── sources.list.d/ # Deb822-Quellen (debian-unstable.sources, xanmod.sources) │ │ ├── sources.list.d/ # Deb822-Quellen (debian-unstable.sources, xanmod.sources)
+3 -2
View File
@@ -13,7 +13,7 @@ Das Setup kann direkt ohne vorheriges manuelles Klonen via `curl` gestartet werd
# Interaktiver Modus (whiptail Menü) # Interaktiver Modus (whiptail Menü)
curl -fsSL https://gitea.creative-dragonslayer.de/Scripts/Setup/raw/branch/main/install.sh | bash curl -fsSL https://gitea.creative-dragonslayer.de/Scripts/Setup/raw/branch/main/install.sh | bash
# Vollautomatischer Modus (alle Stages 00 bis 10) # Vollautomatischer Modus (alle Stages 00 bis 11)
curl -fsSL https://gitea.creative-dragonslayer.de/Scripts/Setup/raw/branch/main/install.sh | bash -s -- --all curl -fsSL https://gitea.creative-dragonslayer.de/Scripts/Setup/raw/branch/main/install.sh | bash -s -- --all
# Gezielte Modulauswahl (z. B. Paketlisten und Schriften) # Gezielte Modulauswahl (z. B. Paketlisten und Schriften)
@@ -102,7 +102,8 @@ Installiere nur bestimmte Phasen (z. B. nur Paketlisten und Schriften):
│ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync │ ├── 07-skel-and-user.sh # /etc/skel Vorlagen, ZSH-Shell-Setzen, Dotfiles-Sync
│ ├── 08-flatpaks.sh # Flathub Setup, Flatpak-Paketlisten-Installation │ ├── 08-flatpaks.sh # Flathub Setup, Flatpak-Paketlisten-Installation
│ ├── 09-apps.sh # Spotify, Waydroid, OpenDeck, Desktop-Starter, MIME-Types │ ├── 09-apps.sh # Spotify, Waydroid, OpenDeck, Desktop-Starter, MIME-Types
── 10-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Dotfiles ── 10-hyprland.sh # LinuxBeginnings Debian-Hyprland Auto-Installer & Dotfiles
│ └── 11-linutil.sh # Linutil (Chris Titus Tech System Toolbox), letzter Install-Schritt
└── data/ # Statische Konfigurationsdateien & Vorlagen └── data/ # Statische Konfigurationsdateien & Vorlagen
├── apt/ ├── apt/
│ ├── sources.list.d/ # debian-unstable.sources, xanmod.sources │ ├── sources.list.d/ # debian-unstable.sources, xanmod.sources
+1
View File
@@ -100,6 +100,7 @@ tui_select_stages() {
"08" "Flatpaks (Flathub Repository & Flatpaks)" ON \ "08" "Flatpaks (Flathub Repository & Flatpaks)" ON \
"09" "Zusatz-Apps & MIME (Spotify, Waydroid, OpenDeck, MIME)" ON \ "09" "Zusatz-Apps & MIME (Spotify, Waydroid, OpenDeck, MIME)" ON \
"10" "Hyprland Desktop (LinuxBeginnings Debian-Hyprland Installer)" ON \ "10" "Hyprland Desktop (LinuxBeginnings Debian-Hyprland Installer)" ON \
"11" "Linutil (Chris Titus Tech System Toolbox)" ON \
3> "$tmp_file"; then 3> "$tmp_file"; then
TUI_SELECTION="$(tr -d '"' < "$tmp_file")" TUI_SELECTION="$(tr -d '"' < "$tmp_file")"
+4 -3
View File
@@ -46,7 +46,7 @@ prompts have been answered. Run it as your normal desktop user - no need to
prefix it with 'sudo' yourself (though doing so still works). prefix it with 'sudo' yourself (though doing so still works).
Options: Options:
-a, --all Run all setup stages sequentially (00 through 10) -a, --all Run all setup stages sequentially (00 through 11)
-s, --stages <list> Comma-separated list of stages to run (e.g. --stages 01,02,04) -s, --stages <list> Comma-separated list of stages to run (e.g. --stages 01,02,04)
-u, --user <username> Specify target desktop user (defaults to \$SUDO_USER) -u, --user <username> Specify target desktop user (defaults to \$SUDO_USER)
-d, --dry-run Simulate stage execution without modifying the system -d, --dry-run Simulate stage execution without modifying the system
@@ -64,6 +64,7 @@ Available Stages:
08: Flatpak Applications (Flathub, Flatpak package list) 08: Flatpak Applications (Flathub, Flatpak package list)
09: Standalone Applications & MIME (Spotify, Waydroid, OpenDeck, MIME types) 09: Standalone Applications & MIME (Spotify, Waydroid, OpenDeck, MIME types)
10: Hyprland Desktop (LinuxBeginnings Auto-Installer) 10: Hyprland Desktop (LinuxBeginnings Auto-Installer)
11: Linutil (Chris Titus Tech System Toolbox)
Examples: Examples:
./setup.sh # Interactive TUI mode ./setup.sh # Interactive TUI mode
@@ -133,7 +134,7 @@ fi
SELECTED_STAGES=() SELECTED_STAGES=()
if [[ "$FLAG_ALL" -eq 1 ]]; then if [[ "$FLAG_ALL" -eq 1 ]]; then
SELECTED_STAGES=(01 02 03 04 05 06 07 08 09 10) SELECTED_STAGES=(01 02 03 04 05 06 07 08 09 10 11)
elif [[ -n "$FLAG_STAGES" ]]; then elif [[ -n "$FLAG_STAGES" ]]; then
IFS=',' read -r -a raw_stages <<< "$FLAG_STAGES" IFS=',' read -r -a raw_stages <<< "$FLAG_STAGES"
for st in "${raw_stages[@]}"; do for st in "${raw_stages[@]}"; do
@@ -174,7 +175,7 @@ else
else else
log_warn "No controlling terminal available - interactive TUI cannot be displayed." log_warn "No controlling terminal available - interactive TUI cannot be displayed."
log_info "Non-interactive shell and no parameters provided. Defaulting to --all." log_info "Non-interactive shell and no parameters provided. Defaulting to --all."
SELECTED_STAGES=(01 02 03 04 05 06 07 08 09 10) SELECTED_STAGES=(01 02 03 04 05 06 07 08 09 10 11)
fi fi
fi fi
+49
View File
@@ -0,0 +1,49 @@
#!/usr/bin/env bash
# ==============================================================================
# stages/11-linutil.sh - Linutil (Chris Titus Tech System Toolbox), final install step
# ==============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
source "$SCRIPT_DIR/lib/utils.sh"
source "$SCRIPT_DIR/lib/btrfs.sh"
if [[ -f "$SCRIPT_DIR/config/setup.conf" ]]; then
# shellcheck source=/dev/null
source "$SCRIPT_DIR/config/setup.conf"
fi
setup_err_trap
log_step "Running Stage 11: Linutil (Chris Titus Tech System Toolbox)"
require_root
TARGET_USER="$(get_target_user)"
log_info "Launching Linutil as target user '$TARGET_USER'..."
create_timeshift_snapshot "Stage 11: Pre-Linutil" "B"
if command_exists curl; then
if has_tty; then
# Linutil is an interactive TUI - run it as the target user (it
# elevates via sudo itself where needed), attached to the controlling
# terminal so its menu can actually receive keystrokes.
if run_as_target_user bash -c 'sh <(curl -fsSL https://christitus.com/linux)' < /dev/tty > /dev/tty; then
log_success "Linutil finished."
else
log_warn "Linutil exited with a non-zero status. Check logs if needed."
fi
else
log_warn "No controlling terminal available - Linutil's interactive menu cannot be displayed. Skipping."
log_info "Run it manually later with: curl -fsSL https://christitus.com/linux | sh"
fi
else
log_error "curl is required to run Linutil."
exit 1
fi
create_timeshift_snapshot "Stage 11: Post-Linutil" "O"
log_success "Stage 11: Linutil completed successfully!"