#!/bin/sh
# Dieses Skript muss als root laufen.

# --- Distros erkennen ---
is_alpine() {
  [ -f /etc/alpine-release ] || grep -Eq '^ID="?alpine"?$' /etc/os-release 2>/dev/null
}
is_debian() {
  grep -Eq '^(ID|ID_LIKE)=.*(debian|ubuntu)' /etc/os-release 2>/dev/null
}
is_arch() {
  grep -Eq '^ID="?arch"?$' /etc/os-release 2>/dev/null
}
is_rhel() {
  grep -Eq '^(ID|ID_LIKE)=.*(rhel|fedora|centos)' /etc/os-release 2>/dev/null
}

# --- 1) Bash-Teil: nur auf Alpine ---
if is_alpine; then
  echo "Alpine Linux erkannt - führe Bash-Installation/-Konfig durch."

  # Bash installieren, falls nicht vorhanden
  if ! command -v bash >/dev/null 2>&1; then
    echo "  → Bash nicht gefunden, installiere mit apk..."
    apk update
    apk add --no-cache bash
  else
    echo "  → Bash bereits installiert."
  fi

  # /bin/bash in /etc/shells eintragen
  if ! grep -Fxq "/bin/bash" /etc/shells; then
    echo "/bin/bash" >> /etc/shells
    echo "  → /bin/bash zu /etc/shells hinzugefügt."
  fi

  # Default-Shell aller User (UID>=1000 und root) auf /bin/bash setzen
  echo "  → Setze Default-Shell auf /bin/bash für alle User:"
  while IFS=: read -r user pass uid gid home shell; do
    if [ "$uid" -ge 1000 ] || [ "$uid" -eq 0 ]; then
      if [ "$shell" != "/bin/bash" ]; then
        echo "     $user: $shell → /bin/bash"
        usermod -s /bin/bash "$user"
      fi
    fi
  done < /etc/passwd

  # Setup for coloured LS/PS1
  BASHRC_CONTENT="\n# Farbiges ls und grep\nalias ls='ls --color=auto'\nalias grep='grep --color=auto'\nalias egrep='egrep --color=auto'\nalias fgrep='fgrep --color=auto'\neval \"\$(dircolors -b ~/.dircolors)\"\nif [ \"\$EUID\" -eq 0 ]; then\n    PS1='\\[\\e[1;31m\\]\\u\\[\\e[0;33m\\]@\\[\\e[1;95m\\]\\h \\[\\e[1;33m\\]\\w\\[\\e[0m\\] # '\nelse\n    PS1='\\[\\e[1;32m\\]\\u\\[\\e[0;33m\\]@\\[\\e[1;95m\\]\\h \\[\\e[1;34m\\]\\w\\[\\e[0m\\] \\$ '\nfi\n"

  # .dircolors ins Skeleton
  dircolors -p > /etc/skel/.dircolors

  update_bashrc() {
    home=$1; file="$home/.bashrc"
    touch "$file"
    chown "$(basename "$home")":"$(basename "$home")" "$file"
    if ! grep -q "Farbiges ls und grep" "$file"; then
      echo -e "$BASHRC_CONTENT" >> "$file"
      echo "     Aktualisiert: $file"
    fi
    cp /etc/skel/.dircolors "$home/.dircolors"
    chown "$(basename "$home")":"$(basename "$home")" "$home/.dircolors"
  }
  update_bashrc "/root"
  for d in /home/*; do [ -d "$d" ] && update_bashrc "$d"; done

  echo "Bash-Teil auf Alpine abgeschlossen."
else
  echo "Kein Alpine - Bash-Teil übersprungen."
fi

# --- 2) Nano + Syntax-Highlighting für alle Distros ---
echo "Installiere/configuriere Nano + Syntax-Highlighting…"

if is_alpine; then
  apk update
  apk add --no-cache nano nano-syntax
elif is_debian; then
  apt update
  DEBIAN_FRONTEND=noninteractive apt install -y nano
  # Debian liefert /usr/share/nano/*.nanorc meist schon mit
elif is_arch; then
  pacman -Syu --noconfirm nano nano-syntax-highlighting
elif is_rhel; then
  # EPEL aktivieren, dann Nano-Paket
  if ! rpm -qa | grep -q epel-release; then
    yum install -y epel-release
  fi
  yum install -y nano nano-syntax-highlighting
else
  echo "Unbekannte Distribution - versuche, Nano zu installieren…"
  # Fallback: gängige Paketmanager testen
  if command -v apt >/dev/null; then
    apt update && apt install -y nano
  elif command -v yum >/dev/null; then
    yum install -y nano
  elif command -v pacman >/dev/null; then
    pacman -Syu --noconfirm nano
  fi
fi

# ensure include line in /etc/nanorc
NANORC=/etc/nanorc
INCLUDE='include "/usr/share/nano/*.nanorc"'
if ! grep -Fxq "$INCLUDE" $NANORC; then
  echo "$INCLUDE" >> $NANORC
  echo "  → Nano: Syntax-Highlighting in $NANORC aktiviert."
else
  echo "  → Nano: Syntax-Highlighting bereits aktiviert."
fi

echo "Skript fertig."    
