diff --git a/0_Setup.sh b/0_Setup.sh index ef5af20..a2c5dd9 100755 --- a/0_Setup.sh +++ b/0_Setup.sh @@ -10,7 +10,7 @@ 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,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then @@ -22,31 +22,37 @@ if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then echo "ℹ️ Aktualisiere $SOURCE_LIST..." - # Neue Datei erzeugen + # 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" + echo "$line" >>"$TEMP_FILE" continue fi - # Den eigentlichen APT-Eintrag und die aktuellen Komponenten extrahieren + # Den APT-Eintrag und die Komponenten extrahieren APT_ENTRY=$(echo "$line" | awk '{for (i=1; i<=NF; i++) if ($i ~ /^[a-zA-Z0-9.-]+:\/\//) {print substr($0, 1, index($0,$i) + length($i) - 1); exit}}') - COMPONENTS=$(echo "$line" | awk '{$1=$2=$3=""; print $0}' | xargs) + CURRENT_COMPONENTS=$(echo "$line" | awk '{$1=$2=$3=""; print $0}' | xargs) + + # Set für aktuelle Komponenten erstellen + COMPONENTS_SET=($CURRENT_COMPONENTS) # Fehlende Komponenten hinzufügen - for component in main non-free non-free-firmware contrib; do - if ! grep -qE "(^| )$component( |$)" <<< "$COMPONENTS"; then - COMPONENTS="$COMPONENTS $component" + for component in "${REQUIRED_COMPONENTS[@]}"; do + if ! [[ " ${COMPONENTS_SET[*]} " =~ " $component " ]]; then + COMPONENTS_SET+=("$component") fi done - # Neue Zeile zusammenbauen - echo "$APT_ENTRY $COMPONENTS" >> "$TEMP_FILE" + # Neue Zeile mit ursprünglichem APT-Teil + aktualisierten Komponenten schreiben + echo "$APT_ENTRY ${COMPONENTS_SET[*]}" >>"$TEMP_FILE" - done < "$SOURCE_LIST" + done <"$SOURCE_LIST" # Originaldatei ersetzen mv "$TEMP_FILE" "$SOURCE_LIST" @@ -62,7 +68,7 @@ apt install -y git sudo 7zip unrar unzip network-manager software-properties-com # 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,,} # In Kleinbuchstaben umwandeln answer=${answer:-n} # Standardwert 'n', falls leer if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then @@ -82,8 +88,8 @@ if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then 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" + 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 @@ -94,11 +100,11 @@ 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,,} # 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 + cat << 'EOF' >/etc/profile.d/sbin_in_path.sh if groups | grep -q "\bsudo\b"; then case ":$PATH:" in *":/sbin:"*) ;; @@ -116,11 +122,11 @@ fi # sudo-Hinweis read -p "❓ Soll ein sudo-Hinweis hinzugefügt werden? (j/n) [n]: " answer -answer=${answer,,} # In Kleinbuchstaben umwandeln +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 + 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 @@ -136,11 +142,11 @@ fi # sudo-Hinweis read -p "❓ Sollen die XDG-Data-Dirs gesetzt werden? (j/n) [n]: " answer -answer=${answer,,} # In Kleinbuchstaben umwandeln +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 + 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"