#!/bin/bash # Root-Rechte prüfen if [ "$(id -u)" -ne 0 ]; then echo "❌ Bitte als root ausführen!" exit 1 fi apt update && apt upgrade -y # sources-list Config read -p "❓ Soll die apt sources-list so konfiguriert werden, dass sie Contributions und non-free Software zum installieren ermöglicht? (j/n) [n]: " answer answer=${answer,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then # Datei-Pfad zur sources.list SOURCE_LIST="/etc/apt/sources.list" # Backup erstellen cp "$SOURCE_LIST" "$SOURCE_LIST.bak" echo "ℹ️ Aktualisiere $SOURCE_LIST..." # Temporäre Datei erstellen TEMP_FILE=$(mktemp) # Fehlende Komponenten, die hinzugefügt werden sollen REQUIRED_COMPONENTS=("main" "non-free" "non-free-firmware" "contrib") while IFS= read -r line; do # Falls die Zeile auskommentiert oder leer ist, unverändert übernehmen if [[ "$line" =~ ^# || -z "$line" ]]; then echo "$line" >>"$TEMP_FILE" continue fi # Die ersten drei Felder als APT-Befehl, URL und Distribution speichern APT_CMD=$(echo "$line" | awk '{print $1}') APT_URL=$(echo "$line" | awk '{print $2}') APT_DIST=$(echo "$line" | awk '{print $3}') # Alle vorhandenen Komponenten sammeln (ab Feld 4) CURRENT_COMPONENTS=$(echo "$line" | cut -d' ' -f4-) # Set für aktuelle Komponenten erstellen COMPONENTS_SET=($CURRENT_COMPONENTS) # Fehlende Komponenten hinzufügen for component in "${REQUIRED_COMPONENTS[@]}"; do if ! [[ " ${COMPONENTS_SET[*]} " =~ " $component " ]]; then COMPONENTS_SET+=("$component") fi done # Neue Zeile mit ursprünglichem APT-Befehl, URL, Distribution und aktualisierten Komponenten schreiben echo "$APT_CMD $APT_URL $APT_DIST ${COMPONENTS_SET[*]}" >>"$TEMP_FILE" done <"$SOURCE_LIST" # Originaldatei ersetzen mv "$TEMP_FILE" "$SOURCE_LIST" # apt aktualisieren echo "🔄 Aktualisiere APT..." apt update echo "✅ Fertig! $SOURCE_LIST wurde aktualisiert." fi apt install -y git sudo 7zip unrar unzip network-manager software-properties-common tree bluetooth wget curl # GRUB-Config read -p "❓ Soll GRUB so konfiguriert werden, dass es nur im Fehlerfall angezeigt wird? (j/n) [n]: " answer answer=${answer,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then echo "ℹ️ GRUB wird so konfiguriert, dass es nur im Fehlerfall angezeigt wird..." # Sicherstellen, dass die Datei existiert GRUB_CFG="/etc/default/grub" if [[ ! -f "$GRUB_CFG" ]]; then echo "❌ Fehler: $GRUB_CFG nicht gefunden!" else # Backup der aktuellen GRUB-Konfiguration cp "$GRUB_CFG" "$GRUB_CFG.bak" # Konfigurationsänderungen vornehmen sed -i 's/^GRUB_TIMEOUT=.*/GRUB_TIMEOUT=0/' "$GRUB_CFG" sed -i 's/^GRUB_TIMEOUT_STYLE=.*/GRUB_TIMEOUT_STYLE=hidden/' "$GRUB_CFG" # Falls die Einträge nicht existieren, hinzufügen grep -q '^GRUB_TIMEOUT=' "$GRUB_CFG" || echo 'GRUB_TIMEOUT=0' >>"$GRUB_CFG" grep -q '^GRUB_TIMEOUT_STYLE=' "$GRUB_CFG" || echo 'GRUB_TIMEOUT_STYLE=hidden' >>"$GRUB_CFG" # GRUB-Konfiguration aktualisieren update-grub echo "✅ GRUB wurde erfolgreich angepasst. Änderungen werden beim nächsten Boot wirksam." fi fi # sbin in Path read -p "❓ Soll sbin für sudo-Nutzer in den PATH aufgenommen werden? (j/n) [n]: " answer answer=${answer,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then cat << 'EOF' >/etc/profile.d/sbin_in_path.sh if groups | grep -q "\bsudo\b"; then case ":$PATH:" in *":/sbin:"*) ;; *) export PATH="$PATH:/sbin" ;; esac case ":$PATH:" in *":/usr/sbin:"*) ;; *) export PATH="$PATH:/usr/sbin" ;; esac fi EOF echo "ℹ️ sbin wurde zum PATH für sudo-Nutzer hinzugefügt." fi # sudo-Hinweis read -p "❓ Soll ein sudo-Hinweis hinzugefügt werden? (j/n) [n]: " answer answer=${answer,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then cat << 'EOF' >/etc/profile.d/sudo_hint.sh if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then case " $(groups) " in *\ admin\ *|*\ sudo\ *) if [ -x /usr/bin/sudo ]; then echo 'To run a command as administrator (user "root"), use "sudo ".' echo 'See "man sudo_root" for details.' fi esac fi EOF echo "ℹ️ sudo-Hinweis wurde hinzugefügt!" fi # sudo-Hinweis read -p "❓ Sollen die XDG-Data-Dirs gesetzt werden? (j/n) [n]: " answer answer=${answer,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then cat << 'EOF' >/etc/profile.d/xdg_dirs_desktop_session.sh # /etc/profile.d/desktop_session_xdg_dirs.sh - Prepend a $DESKTOP_SESSION-named directory to $XDG_CONFIG_DIRS and $XDG_DATA_DIRS DEFAULT_XDG_CONFIG_DIRS="/etc/xdg" DEFAULT_XDG_DATA_DIRS="/usr/local/share/:/usr/share/" if [ -n "$DESKTOP_SESSION" ]; then # readd default if was empty if [ -z "$XDG_CONFIG_DIRS" ]; then XDG_CONFIG_DIRS="$DEFAULT_XDG_CONFIG_DIRS" fi if [ -n "${XDG_CONFIG_DIRS##*$DEFAULT_XDG_CONFIG_DIRS/xdg-$DESKTOP_SESSION*}" ]; then XDG_CONFIG_DIRS="$DEFAULT_XDG_CONFIG_DIRS"/xdg-"$DESKTOP_SESSION":"$XDG_CONFIG_DIRS" fi export XDG_CONFIG_DIRS # gnome is already added if gnome-session installed if [ "$DESKTOP_SESSION" != "gnome" ]; then if [ -z "$XDG_DATA_DIRS" ]; then XDG_DATA_DIRS="$DEFAULT_XDG_DATA_DIRS" fi if [ -n "${XDG_DATA_DIRS##*/usr/share/$DESKTOP_SESSION*}" ]; then XDG_DATA_DIRS=/usr/share/"$DESKTOP_SESSION":"$XDG_DATA_DIRS" fi export XDG_DATA_DIRS fi fi EOF echo "ℹ️ XDG-Data-Dirs wurden gesetzt!" fi chmod +x /etc/profile.d/* echo "✅ Abgeschlossen. Zum Anwenden der Änderungen bitte neu einloggen!"