#!/usr/bin/env bash set -euo pipefail BASE_URL="https://bash.gejodel.de" ALIASES_URL="${BASE_URL}/bash_aliases" BASHRC="${HOME}/.bashrc" ALIASES="${HOME}/.bash_aliases" BACKUP_DIR="${HOME}/.bash-backups" PACKAGES=( htop screen mc ) echo echo "==========================================" echo " Bash-Setup für ${USER:-$(whoami)}" echo "==========================================" echo # ------------------------------------------------------------ # Root / sudo vorbereiten # ------------------------------------------------------------ if [ "$(id -u)" -eq 0 ]; then SUDO="" echo "==> Läuft als root - sudo nicht erforderlich" else if ! command -v sudo >/dev/null 2>&1; then echo "FEHLER: sudo ist nicht installiert." echo "Bitte als root ausführen oder sudo installieren." exit 1 fi SUDO="sudo" echo "==> Benötige einmalig sudo-Berechtigung..." sudo -v # sudo-Timestamp während der Installation gültig halten ( while true; do sudo -n true 2>/dev/null || exit sleep 50 done ) & SUDO_KEEPALIVE_PID=$! cleanup_sudo() { kill "$SUDO_KEEPALIVE_PID" 2>/dev/null || true } trap cleanup_sudo EXIT fi echo # ------------------------------------------------------------ # Download-Helfer # ------------------------------------------------------------ download() { local url="$1" local destination="$2" if command -v curl >/dev/null 2>&1; then curl -fsSL "$url" -o "$destination" elif command -v wget >/dev/null 2>&1; then wget -q "$url" -O "$destination" else echo "FEHLER: Weder curl noch wget gefunden." exit 1 fi } # ------------------------------------------------------------ # Backup # ------------------------------------------------------------ mkdir -p "$BACKUP_DIR" TIMESTAMP="$(date '+%Y%m%d-%H%M%S')" if [ -f "$BASHRC" ]; then cp -p "$BASHRC" "${BACKUP_DIR}/bashrc.${TIMESTAMP}" echo "==> Backup: ${BACKUP_DIR}/bashrc.${TIMESTAMP}" fi if [ -f "$ALIASES" ]; then cp -p "$ALIASES" "${BACKUP_DIR}/bash_aliases.${TIMESTAMP}" echo "==> Backup: ${BACKUP_DIR}/bash_aliases.${TIMESTAMP}" fi # ------------------------------------------------------------ # .bash_aliases herunterladen # ------------------------------------------------------------ TMP_ALIASES="$(mktemp)" cleanup_tmp() { rm -f "$TMP_ALIASES" if [ -n "${SUDO_KEEPALIVE_PID:-}" ]; then kill "$SUDO_KEEPALIVE_PID" 2>/dev/null || true fi } trap cleanup_tmp EXIT echo echo "==> Lade .bash_aliases herunter..." download "$ALIASES_URL" "$TMP_ALIASES" if [ ! -s "$TMP_ALIASES" ]; then echo "FEHLER: Heruntergeladene .bash_aliases ist leer." exit 1 fi mv "$TMP_ALIASES" "$ALIASES" chmod 644 "$ALIASES" echo "==> .bash_aliases installiert" # ------------------------------------------------------------ # .bashrc sicherstellen # ------------------------------------------------------------ if [ ! -f "$BASHRC" ]; then touch "$BASHRC" fi # ------------------------------------------------------------ # force_color_prompt=yes aktivieren # ------------------------------------------------------------ echo echo "==> Prüfe farbigen Bash-Prompt..." if grep -Eq '^[[:space:]]*#[[:space:]]*force_color_prompt=yes[[:space:]]*$' "$BASHRC"; then sed -i -E \ 's/^[[:space:]]*#[[:space:]]*force_color_prompt=yes[[:space:]]*$/force_color_prompt=yes/' \ "$BASHRC" echo "==> force_color_prompt=yes aktiviert" elif grep -Eq '^[[:space:]]*force_color_prompt=yes[[:space:]]*$' "$BASHRC"; then echo "==> force_color_prompt=yes ist bereits aktiviert" else echo "==> Hinweis: force_color_prompt=yes wurde in .bashrc nicht gefunden" fi # ------------------------------------------------------------ # Sicherstellen, dass ~/.bash_aliases geladen wird # ------------------------------------------------------------ if ! grep -Eq '(^|[[:space:]])(\.|source)[[:space:]]+.*\.bash_aliases' "$BASHRC"; then echo "==> Ergänze .bash_aliases-Loader in .bashrc" cat >> "$BASHRC" <<'EOF' # ~/.bash_aliases laden if [ -f ~/.bash_aliases ]; then . ~/.bash_aliases fi EOF else echo "==> .bash_aliases wird bereits von .bashrc geladen" fi # ------------------------------------------------------------ # Konfiguration für diesen Script-Prozess laden # ------------------------------------------------------------ echo echo "==> Lade Bash-Konfiguration..." # shellcheck disable=SC1090 source "$BASHRC" || true echo "==> Bash-Konfiguration geladen" # ------------------------------------------------------------ # Pakete installieren # ------------------------------------------------------------ echo echo "==> Aktualisiere Paketlisten..." $SUDO apt-get update echo echo "==> Installiere Pakete: ${PACKAGES[*]}" $SUDO apt-get install -y "${PACKAGES[@]}" # ------------------------------------------------------------ # Fertig # ------------------------------------------------------------ echo echo "==========================================" echo " Setup erfolgreich abgeschlossen" echo "==========================================" echo echo "Installiert:" echo " - .bash_aliases" echo " - force_color_prompt=yes" echo " - htop" echo " - screen" echo " - mc" echo echo "Die Bash-Konfiguration ist für neue Shells" echo "automatisch aktiv." echo echo "Für die aktuell geöffnete Shell einmal:" echo echo " source ~/.bashrc" echo