diff --git a/0_Setup.sh b/0_Setup.sh index 8e98297..d4be5c6 100755 --- a/0_Setup.sh +++ b/0_Setup.sh @@ -2,50 +2,63 @@ # Root-Rechte prüfen if [ "$(id -u)" -ne 0 ]; then - echo "Bitte mit sudo ausführen!" + echo "❌ Bitte als root ausführen!" exit 1 fi apt update && apt upgrade -y -apt install -y git sudo 7zip unrar unzip network-manager software-properties-common tree bluetooth +apt install -y git sudo 7zip unrar unzip network-manager software-properties-common tree bluetooth wget curl -# Der Code, der eingefügt werden soll -CONFIG_BLOCK='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' +# 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 -# Saubere Lösung über /etc/profile.d/ -echo "$CONFIG_BLOCK" >/etc/profile.d/custom_path.sh - -# Sudo-Hinweis für bash.bashrc -SUDO_HINT_BLOCK='# sudo hint -if [ ! -e "$HOME/.sudo_as_admin_successful" ] && [ ! -e "$HOME/.hushlogin" ] ; then -case " $(groups) " in *\ admin\ *|*\ sudo\ *) -if [ -x /usr/bin/sudo ]; then -cat <<-EOF -To run a command as administrator (user "root"), use "sudo ". -See "man sudo_root" for details. +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 -fi -esac -fi' -# Prüfen, ob der sudo-Hinweis bereits existiert -if ! grep -Fxq "# sudo hint" /etc/bash.bashrc; then - echo -e "\n$SUDO_HINT_BLOCK" | tee -a /etc/bash.bashrc >/dev/null - echo "Sudo-Hinweis zur bash.bashrc hinzugefügt." -else - echo "Sudo-Hinweis ist bereits in bash.bashrc vorhanden." + echo "ℹ️ sbin wurde zum PATH für sudo-Nutzer hinzugefügt." fi -XDG_BLOCK='# /etc/profile.d/desktop_session_xdg_dirs.sh - Prepend a $DESKTOP_SESSION-named directory to $XDG_CONFIG_DIRS and $XDG_DATA_DIRS +# 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/" @@ -70,9 +83,11 @@ if [ -n "$DESKTOP_SESSION" ]; then export XDG_DATA_DIRS fi fi -' +EOF -echo "$XDG_BLOCK" >/etc/profile.d/xdg_dirs_desktop_session.sh + echo "ℹ️ XDG-Data-Dirs wurden gesetzt!" +fi -echo "Fertig! Bitte neu einloggen." +chmod +x /etc/profile.d/* +echo "✅ Abgeschlossen. Zum Anwenden der Änderungen bitte neu einloggen!" diff --git a/10_Programs.sh b/10_Programs.sh index f8288d1..ee593ad 100755 --- a/10_Programs.sh +++ b/10_Programs.sh @@ -4,7 +4,7 @@ set -e # Skript bricht bei Fehlern ab # Sicherstellen, dass das Skript **nicht** als root ausgeführt wird if [[ $EUID -eq 0 ]]; then - echo "Bitte **nicht** als root oder mit sudo ausführen! Das Skript fordert sudo nur dort an, wo es benötigt wird." + echo "❌ Bitte **nicht** als root oder mit sudo ausführen! Das Skript fordert sudo nur dort an, wo es benötigt wird." exit 1 fi diff --git a/1_TrixieUpgrade.sh b/1_TrixieUpgrade.sh index 7c045f8..3421b80 100755 --- a/1_TrixieUpgrade.sh +++ b/1_TrixieUpgrade.sh @@ -2,33 +2,39 @@ # Root-Rechte prüfen if [ "$(id -u)" -ne 0 ]; then - echo "Bitte mit sudo ausführen!" + echo "❌ Bitte als root ausführen!" exit 1 fi # Sicherheitsabfrage -read -p "Achtung! Du führst ein Release-Upgrade auf Debian Trixie durch. Fortfahren? (ja/nein): " choice -if [[ "$choice" != "ja" ]]; then - echo "Upgrade abgebrochen." +read -p "⚠️ Achtung! Du führst ein Release-Upgrade auf Debian Trixie durch. Fortfahren? (ja/nein): " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer + +if [[ "$answer" != "j" ]] || [[ "$answer" != "y" ]]; then + echo "❌ Upgrade abgebrochen." exit 0 fi -echo "Aktualisiere Paketlisten..." +echo "ℹ️ Aktualisiere Paketlisten..." sudo apt-get update -echo "Starte System-Upgrade..." +echo "ℹ️ Starte System-Upgrade..." sudo apt-get full-upgrade -y -echo "Ändere die Paketquellen auf Debian Trixie..." +echo "ℹ️ Ändere die Paketquellen auf Debian Trixie..." sudo sed -i 's/bookworm/trixie/g' /etc/apt/sources.list sudo find /etc/apt/sources.list.d -type f -exec sed -i 's/bookworm/trixie/g' {} \; -echo "Aktualisiere Paketlisten erneut..." +echo "ℹ️ Aktualisiere Paketlisten erneut..." sudo apt-get update -echo "Starte vollständiges Release-Upgrade..." +echo "ℹ️ Starte vollständiges Release-Upgrade..." sudo apt-get full-upgrade -y -echo "System wird jetzt neu gestartet..." + +read -p "❓ Drücke [ENTER], um das System jetzt neuzustarten." + +echo "ℹ️ System wird jetzt neu gestartet..." sudo reboot diff --git a/2_AdJoin.sh b/2_AdJoin.sh index 4bd5738..f678821 100755 --- a/2_AdJoin.sh +++ b/2_AdJoin.sh @@ -2,25 +2,30 @@ # Root-Rechte prüfen if [ "$(id -u)" -eq 0 ]; then - echo "Bitte nicht als Root ausführen! Das Skript nutzt sudo, falls nötig." + echo "❌ Bitte nicht als root ausführen! Das Skript nutzt sudo, falls nötig." exit 1 fi # Verzeichnis setzen -REPO_DIR="$HOME/Linux-Active-Directory-join-script" +REPO_DIR="/tmp/Linux-Active-Directory-join-script" # Repository klonen, falls es noch nicht existiert if [ -d "$REPO_DIR" ]; then - echo "Repository existiert bereits. Überspringe das Klonen." + echo "ℹ️ Repository existiert bereits. Überspringe das Klonen." else - echo "Klonen des Repositories..." + echo "ℹ️ Klonen des Repositories..." git clone https://gitea.creative-dragonslayer.de/DragonSlayer_14/Linux-Active-Directory-join-script.git "$REPO_DIR" fi # In das Verzeichnis wechseln -cd "$REPO_DIR" || { echo "Fehler: Konnte nicht in das Verzeichnis wechseln!"; exit 1; } +cd "$REPO_DIR" || { echo "❌ Fehler: Konnte nicht in das Verzeichnis wechseln!"; exit 1; } # AD-Skript ausführen -echo "Starte Active Directory Verbindung..." -sudo bash ADconnection.sh - +if [ -f "ADconnection.sh" ]; then + chmod +x ADconnection.sh + echo "ℹ️ Starte Active Directory setup..." + ./ADconnection.sh +else + echo "❌ Fehler: ADconnection.sh nicht gefunden!" + exit 1 +fi diff --git a/3_HyprlandInstall.sh b/3_HyprlandInstall.sh index 8f60635..eccc50e 100755 --- a/3_HyprlandInstall.sh +++ b/3_HyprlandInstall.sh @@ -1,26 +1,31 @@ #!/bin/bash +# Root-Rechte prüfen +if [ "$(id -u)" -eq 0 ]; then + echo "❌ Bitte nicht als root ausführen! Das Skript nutzt sudo, falls nötig." + exit 1 +fi + # Repository-Pfad definieren -REPO_DIR="$HOME/Debian-Hyprland" +REPO_DIR="/tmp/Debian-Hyprland" # Falls das Repository bereits existiert, überspringen if [ -d "$REPO_DIR" ]; then - echo "Repository existiert bereits. Aktualisiere stattdessen..." - cd "$REPO_DIR" || { echo "Fehler: Konnte nicht in das Verzeichnis wechseln!"; exit 1; } - git pull + echo "ℹ️ Repository existiert bereits. Überspringe das klonen..." else - echo "Klonen des Repositories..." + echo "ℹ️ Klonen des Repositories..." git clone --depth=1 https://github.com/JaKooLit/Debian-Hyprland.git "$REPO_DIR" || { echo "Fehler beim Klonen!"; exit 1; } - cd "$REPO_DIR" || { echo "Fehler: Konnte nicht in das Verzeichnis wechseln!"; exit 1; } fi +# In das Verzeichnis wechseln +cd "$REPO_DIR" || { echo "❌ Fehler: Konnte nicht in das Verzeichnis wechseln!"; exit 1; } + # Sicherstellen, dass das Installationsskript existiert und ausführbar ist if [ -f "install.sh" ]; then chmod +x install.sh - echo "Starte Installation..." + echo "ℹ️ Starte Installation..." ./install.sh else - echo "Fehler: install.sh nicht gefunden!" + echo "❌ Fehler: install.sh nicht gefunden!" exit 1 fi - diff --git a/4_ZshRegister.sh b/4_ZshRegister.sh index fa3e108..9f2e083 100755 --- a/4_ZshRegister.sh +++ b/4_ZshRegister.sh @@ -2,61 +2,67 @@ # Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird if [[ $EUID -ne 0 ]]; then - echo "Dieses Skript muss als root ausgeführt werden." + echo "❌ Bitte als root ausführen!" exit 1 fi # Tatsächlichen Benutzer ermitteln (nicht root) if [[ -z "$SUDO_USER" || "$SUDO_USER" == "root" ]]; then - echo "Fehler: Das Skript muss mit 'sudo' von einem normalen Benutzer ausgeführt werden." + echo "❌ Fehler: Das Skript muss mit 'sudo' von einem normalen Benutzer ausgeführt werden." exit 1 fi USER_NAME="$SUDO_USER" USER_HOME=$(eval echo ~$USER_NAME) -# Eintrag aus getent passwd holen -USER_ENTRY=$(getent passwd "$USER_NAME") +read -p "❓ Soll die shell für $USER_NAME auf ZSH gesetzt werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -# Backup der passwd Datei -cp /etc/passwd /etc/passwd.bak +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + # Eintrag aus getent passwd holen + USER_ENTRY=$(getent passwd "$USER_NAME") -if grep -q "^$USER_NAME:" /etc/passwd; then - # Existierenden Eintrag aktualisieren - sed -i "/^$USER_NAME:/s|[^:]*$|/bin/zsh|" /etc/passwd - echo "Shell für $USER_NAME wurde auf zsh aktualisiert." -else - # Neuen Eintrag hinzufügen - UPDATED_ENTRY=$(echo "$USER_ENTRY" | awk -F: -v OFS=: '{ $NF="/bin/zsh"; print }') - echo "$UPDATED_ENTRY" >>/etc/passwd - echo "Eintrag für $USER_NAME wurde in /etc/passwd geschrieben mit zsh als Shell." + # Backup der passwd Datei + cp /etc/passwd /etc/passwd.bak + + if grep -q "^$USER_NAME:" /etc/passwd; then + # Existierenden Eintrag aktualisieren + sed -i "/^$USER_NAME:/s|[^:]*$|/bin/zsh|" /etc/passwd + echo "ℹ️ Shell für $USER_NAME wurde auf zsh aktualisiert." + else + # Neuen Eintrag hinzufügen + UPDATED_ENTRY=$(echo "$USER_ENTRY" | awk -F: -v OFS=: '{ $NF="/bin/zsh"; print }') + echo "$UPDATED_ENTRY" >>/etc/passwd + echo "ℹ️ Eintrag für $USER_NAME wurde in /etc/passwd geschrieben mit zsh als Shell." + fi + + # Repository klonen + REPO_DIR="$USER_HOME/Debian-Hyprland" + sudo -u "$USER_NAME" git clone https://github.com/JaKooLit/Debian-Hyprland.git "$REPO_DIR" + + # Ordner nach ~/.oh-my-zsh/themes kopieren + THEME_SRC="$REPO_DIR/assets/add_zsh_theme" + THEME_DEST="$USER_HOME/.oh-my-zsh/themes" + + if [[ -d "$THEME_SRC" ]]; then + sudo -u "$USER_NAME" mkdir -p "$THEME_DEST" + sudo -u "$USER_NAME" cp -r "$THEME_SRC"/* "$THEME_DEST/" + echo "🎨 ZSH-Theme wurde nach $THEME_DEST kopiert." + else + echo "⚠️ Fehler: Theme-Ordner wurde nicht gefunden!" + fi + + # Repository löschen + rm -rf "$REPO_DIR" + + # /etc/profile in /etc/zsh/zprofile einfügen, falls nicht bereits vorhanden + if ! grep -q "source /etc/profile" /etc/zsh/zprofile; then + echo "source /etc/profile" >>/etc/zsh/zprofile + echo "🔧 'source /etc/profile' wurde in /etc/zsh/zprofile hinzugefügt." + else + echo "ℹ️ 'source /etc/profile' ist bereits in /etc/zsh/zprofile vorhanden." + fi fi -# Repository klonen -REPO_DIR="$USER_HOME/Debian-Hyprland" -sudo -u "$USER_NAME" git clone https://github.com/JaKooLit/Debian-Hyprland.git "$REPO_DIR" - -# Ordner nach ~/.oh-my-zsh/themes kopieren -THEME_SRC="$REPO_DIR/assets/add_zsh_theme" -THEME_DEST="$USER_HOME/.oh-my-zsh/themes" - -if [[ -d "$THEME_SRC" ]]; then - sudo -u "$USER_NAME" mkdir -p "$THEME_DEST" - sudo -u "$USER_NAME" cp -r "$THEME_SRC"/* "$THEME_DEST/" - echo "🎨 ZSH-Theme wurde nach $THEME_DEST kopiert." -else - echo "⚠️ Fehler: Theme-Ordner wurde nicht gefunden!" -fi - -# Repository löschen -rm -rf "$REPO_DIR" - -# /etc/profile in /etc/zsh/zprofile einfügen, falls nicht bereits vorhanden -if ! grep -q "source /etc/profile" /etc/zsh/zprofile; then - echo "source /etc/profile" >>/etc/zsh/zprofile - echo "🔧 'source /etc/profile' wurde in /etc/zsh/zprofile hinzugefügt." -else - echo "ℹ️ 'source /etc/profile' ist bereits in /etc/zsh/zprofile vorhanden." -fi - -echo "✅ Installation abgeschlossen!" +echo "✅ Shell wurde erfolgreich auf ZSH gesetzt! Zum Anwenden, neue Terminal-Sitzung öffnen." diff --git a/5_DomainLogin.sh b/5_DomainLogin.sh index 91d9751..653dc1e 100755 --- a/5_DomainLogin.sh +++ b/5_DomainLogin.sh @@ -2,46 +2,52 @@ # Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird if [[ $EUID -ne 0 ]]; then - echo "Dieses Skript muss als root ausgeführt werden." + echo "❌ Dieses Skript muss als root ausgeführt werden." exit 1 fi -# SDDM-Konfigurationsdatei in sddm.conf.d erstellen -SDDM_CONF_DIR="/etc/sddm.conf.d" -SDDM_CUSTOM_CONF="$SDDM_CONF_DIR/custom.conf" -mkdir -p "$SDDM_CONF_DIR" +read -p "❓ Soll SDDM so konfiguriert werden, dass Domänenbenutzer angezeigt werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -# Bestehende Konfiguration sichern und anpassen -if [[ -f "$SDDM_CUSTOM_CONF" ]]; then - sed -i '/MaximumUid/d' "$SDDM_CUSTOM_CONF" - sed -i '/MinimumUid/d' "$SDDM_CUSTOM_CONF" - sed -i '/HideShells/d' "$SDDM_CUSTOM_CONF" - echo "MaximumUid=9999999999" >>"$SDDM_CUSTOM_CONF" - echo "MinimumUid=1000" >>"$SDDM_CUSTOM_CONF" - echo "HideShells=/sbin/nologin,/bin/false,/usr/sbin/nologin" >>"$SDDM_CUSTOM_CONF" -else - cat <"$SDDM_CUSTOM_CONF" +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + # SDDM-Konfigurationsdatei in sddm.conf.d erstellen + SDDM_CONF_DIR="/etc/sddm.conf.d" + SDDM_CUSTOM_CONF="$SDDM_CONF_DIR/ad_login.conf" + mkdir -p "$SDDM_CONF_DIR" + + # Bestehende Konfiguration sichern und anpassen + if [[ -f "$SDDM_CUSTOM_CONF" ]]; then + sed -i '/MaximumUid/d' "$SDDM_CUSTOM_CONF" + sed -i '/MinimumUid/d' "$SDDM_CUSTOM_CONF" + sed -i '/HideShells/d' "$SDDM_CUSTOM_CONF" + echo "MaximumUid=99999999999999999999" >>"$SDDM_CUSTOM_CONF" + echo "MinimumUid=1000" >>"$SDDM_CUSTOM_CONF" + echo "HideShells=/sbin/nologin,/bin/false,/usr/sbin/nologin" >>"$SDDM_CUSTOM_CONF" + else + cat <"$SDDM_CUSTOM_CONF" [Users] -MaximumUid=9999999999 +MaximumUid=999999999999999999 MinimumUid=1000 HideShells=/sbin/nologin,/bin/false,/usr/sbin/nologin EOF -fi - -# SSSD-Konfiguration anpassen, falls die Datei existiert -SSSD_CONF="/etc/sssd/sssd.conf" -if [[ -f "$SSSD_CONF" ]]; then - if grep -q "^enumerate" "$SSSD_CONF"; then - sed -i 's/^enumerate.*/enumerate = false/' "$SSSD_CONF" - else - echo "enumerate = false" >>"$SSSD_CONF" fi - # Berechtigungen für SSSD-Konfigurationsdatei setzen - chmod 600 "$SSSD_CONF" + + # SSSD-Konfiguration anpassen, falls die Datei existiert + SSSD_CONF="/etc/sssd/sssd.conf" + if [[ -f "$SSSD_CONF" ]]; then + if grep -q "^enumerate" "$SSSD_CONF"; then + sed -i 's/^enumerate.*/enumerate = false/' "$SSSD_CONF" + else + echo "enumerate = false" >>"$SSSD_CONF" + fi + # Berechtigungen für SSSD-Konfigurationsdatei setzen + chmod 600 "$SSSD_CONF" + fi + + # SSSD und SDDM neu starten + systemctl restart sssd + systemctl restart sddm fi -# SSSD und SDDM neu starten -systemctl restart sssd -systemctl restart sddm - -echo "SDDM wurde so konfiguriert, dass lokale und bereits angemeldete Domänenbenutzer angezeigt werden." +echo "✅ Konfiguration von SDDM und sssd abgeschlossen!" diff --git a/6_Polish.sh b/6_Polish.sh index f61f084..7eaf7ae 100755 --- a/6_Polish.sh +++ b/6_Polish.sh @@ -2,68 +2,100 @@ set -e # Skript bricht bei Fehlern ab -# Sicherstellen, dass das Skript **nicht** als root ausgeführt wird -if [[ $EUID -eq 0 ]]; then - echo "Bitte **nicht** als root oder mit sudo ausführen! Das Skript fordert sudo nur dort an, wo es benötigt wird." +# Root-Rechte prüfen +if [ "$(id -u)" -eq 0 ]; then + echo "❌ Bitte nicht als root ausführen! Das Skript nutzt sudo, falls nötig." exit 1 fi # System aktualisieren und benötigte Pakete installieren echo "🔄 System wird aktualisiert..." -sudo apt update && sudo apt install -y flatpak neovim ufw rfkill xdg-user-dirs rsync clamav clamav-freshclam clamav-docs libclamunrar9 clamav-daemon bleachbit network-manager-gnome +sudo apt update && sudo apt upgrade -y + +echo "ℹ️ Firewall (ufw) wird installiert..." +sudo apt install -y ufw sudo ufw enable -# Flatpak Flathub-Repo hinzufügen +echo "ℹ️ Virenschutz (clamav) wird installiert..." +sudo apt install -y clamav clamav-freshclam clamav-docs libclamunrar9 clamav-daemon + +echo "ℹ️ Installiere Flatpak..." +sudo apt install -y flatpak sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo +echo "ℹ️ Installiere nützliche Pakete..." +sudo apt install -y neovim rfkill xdg-user-dirs rsync bleachbit network-manager-gnome + # Portmaster installieren -wget -O /tmp/portmaster-installer.deb https://updates.safing.io/latest/linux_amd64/packages/portmaster-installer.deb -sudo apt install -y /tmp/portmaster-installer.deb -rm /tmp/portmaster-installer.deb +read -p "❓ Soll Portmaster installiert werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer + +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + wget -O /tmp/portmaster-installer.deb https://updates.safing.io/latest/linux_amd64/packages/portmaster-installer.deb + sudo apt install -y /tmp/portmaster-installer.deb + rm /tmp/portmaster-installer.deb + + echo "✅ Portmaster wurde installiert!" +fi # Waterfox-Installation -echo "🌍 Waterfox wird installiert..." -sudo install -d -m 0755 /etc/apt/keyrings -curl -fsSL https://download.opensuse.org/repositories/home:hawkeye116477:waterfox/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_hawkeye116477_waterfox.gpg > /dev/null -echo 'deb https://download.opensuse.org/repositories/home:/hawkeye116477:/waterfox/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/home:hawkeye116477:waterfox.list +read -p "❓ Soll Firefox durch Waterfox ersetzt werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -sudo apt update && sudo apt install -y waterfox +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + echo "🌍 Waterfox wird installiert..." + sudo apt remove -y firefox + sudo install -d -m 0755 /etc/apt/keyrings + curl -fsSL https://download.opensuse.org/repositories/home:hawkeye116477:waterfox/Debian_12/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_hawkeye116477_waterfox.gpg > /dev/null + echo 'deb https://download.opensuse.org/repositories/home:/hawkeye116477:/waterfox/Debian_12/ /' | sudo tee /etc/apt/sources.list.d/home:hawkeye116477:waterfox.list -# Waterfox als Standardbrowser setzen -echo "🌍 Setze Waterfox als Standardbrowser..." -if command -v xdg-settings >/dev/null 2>&1; then - xdg-settings set default-web-browser waterfox.desktop - echo "✅ Waterfox wurde als Standardbrowser gesetzt." + sudo apt update && sudo apt install -y waterfox + echo "✅ Waterfox wurde installiert!" - # Standardanwendungen für spezifische Dateitypen setzen - xdg-mime default waterfox.desktop text/html - xdg-mime default waterfox.desktop application/xhtml+xml - xdg-mime default waterfox.desktop x-scheme-handler/http - xdg-mime default waterfox.desktop x-scheme-handler/https -else - echo "❌ 'xdg-settings' ist nicht verfügbar. Bitte manuell den Standardbrowser setzen." + # Waterfox als Standardbrowser setzen + echo "🌍 Setze Waterfox als Standardbrowser..." + if command -v xdg-settings >/dev/null 2>&1; then + xdg-settings set default-web-browser waterfox.desktop + echo "✅ Waterfox wurde als Standardbrowser gesetzt." + + # Standardanwendungen für spezifische Dateitypen setzen + xdg-mime default waterfox.desktop text/html + xdg-mime default waterfox.desktop application/xhtml+xml + xdg-mime default waterfox.desktop x-scheme-handler/http + xdg-mime default waterfox.desktop x-scheme-handler/https + else + echo "❌ 'xdg-settings' ist nicht verfügbar. Bitte manuell den Standardbrowser setzen." + fi fi # Hyprland User Bindings -HYPR_CONFIG_DIR="$HOME/.config/hypr/UserConfigs" -mkdir -p "$HYPR_CONFIG_DIR" +read -p "❓ Sollen Anpassungen an den Hyprland-Keybinds vorgenomen werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -# Keybinds hinzufügen (falls nicht vorhanden) -declare -A KEYBINDS=( -["bindr = \$mainMod, \$mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window"]="rofi menu" -["bindr = \$mainMod, L, exec, \$scriptsDir/LockScreen.sh"]="screen lock" -["bindr = \$mainMod, V, exec, \$scriptsDir/ClipManager.sh"]="Clipboard Manager" -) +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + HYPR_CONFIG_DIR="$HOME/.config/hypr/UserConfigs" + mkdir -p "$HYPR_CONFIG_DIR" -for BIND in "${!KEYBINDS[@]}"; do - FULL_BIND="$BIND # ${KEYBINDS[$BIND]}" - if ! grep -Fxq "$FULL_BIND" "$HYPR_CONFIG_DIR/UserKeybinds.conf" 2>/dev/null; then - echo "$FULL_BIND" >>"$HYPR_CONFIG_DIR/UserKeybinds.conf" - echo "✅ Keybind hinzugefügt: ${KEYBINDS[$BIND]}" - else - echo "ℹ️ Keybind existiert bereits: ${KEYBINDS[$BIND]}" - fi -done + # Keybinds hinzufügen (falls nicht vorhanden) + declare -A KEYBINDS=( + ["bindr = \$mainMod, \$mainMod_L, exec, pkill rofi || rofi -show drun -modi drun,filebrowser,run,window"]="rofi menu" + ["bindr = \$mainMod, L, exec, \$scriptsDir/LockScreen.sh"]="screen lock" + ["bindr = \$mainMod, V, exec, \$scriptsDir/ClipManager.sh"]="Clipboard Manager" + ) + + for BIND in "${!KEYBINDS[@]}"; do + FULL_BIND="$BIND # ${KEYBINDS[$BIND]}" + if ! grep -Fxq "$FULL_BIND" "$HYPR_CONFIG_DIR/UserKeybinds.conf" 2>/dev/null; then + echo "$FULL_BIND" >>"$HYPR_CONFIG_DIR/UserKeybinds.conf" + echo "✅ Keybind hinzugefügt: ${KEYBINDS[$BIND]}" + else + echo "ℹ️ Keybind existiert bereits: ${KEYBINDS[$BIND]}" + fi + done +fi # Standardvorlagen ablegen echo "📂 Standardvorlagen werden im Vorlagen-Ordner erstellt..." @@ -95,104 +127,110 @@ TARGET_DIR="$HOME/.config/hypr/UserScripts" CONFIG_DIR="$HOME/.config/hypr/UserConfigs" USER_KEYBINDS_FILE="$CONFIG_DIR/UserKeybinds.conf" # Definition an der richtigen Stelle -# Bereinige fälschlicherweise kopierte Dateien -echo "📂 Überprüfe und bereinige Dateien im Verzeichnis $TARGET_DIR..." -if [[ -d "$TARGET_DIR" ]]; then +read -p "❓ Sollen Anpassungen an den Users-Dirs in den Hyprland-Skripten vorgenommen werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer + +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + # Bereinige fälschlicherweise kopierte Dateien + echo "📂 Überprüfe und bereinige Dateien im Verzeichnis $TARGET_DIR..." + if [[ -d "$TARGET_DIR" ]]; then + for FILE in "$TARGET_DIR"/*; do + if [[ -f "$FILE" ]]; then + BASENAME=$(basename "$FILE") + SOURCE_FILE="$SOURCE_DIR/$BASENAME" + + # Prüfen, ob die Datei im Quellverzeichnis existiert und angepasst werden musste + if [[ -f "$SOURCE_FILE" ]] && ! grep -qE '\$HOME/Desktop|\$HOME/Downloads|\$HOME/Documents|\$HOME/Pictures|\$HOME/Music|\$HOME/Videos' "$SOURCE_FILE"; then + echo "🗑️ Entferne fälschlicherweise kopierte Datei: $BASENAME" + rm "$FILE" + + # Rückgängig machen der falschen Verweise in UserKeybinds.conf + if [[ -f "$USER_KEYBINDS_FILE" ]]; then + echo "🔄 Setze falschen Verweis für $BASENAME in $USER_KEYBINDS_FILE zurück..." + sed -i "s|\$UserScripts/$BASENAME|\$scriptsDir/$BASENAME|g" "$USER_KEYBINDS_FILE" + echo "✅ Verweis für $BASENAME zurückgesetzt." + fi + else + echo "✅ Datei $BASENAME ist korrekt und bleibt erhalten." + fi + fi + done + else + echo "⚠️ Zielverzeichnis $TARGET_DIR existiert nicht. Keine Bereinigung erforderlich." + fi + + # Kopiere nur relevante Dateien und behalte die Verzeichnisstruktur bei + echo "📂 Verarbeite Dateien im Verzeichnis $SOURCE_DIR..." + mkdir -p "$TARGET_DIR" + COPIED_FILES=() # Array, um die tatsächlich kopierten Dateien zu speichern + + if [[ -d "$SOURCE_DIR" ]]; then + find "$SOURCE_DIR" -type f | while read -r FILE; do + RELATIVE_PATH="${FILE#$SOURCE_DIR/}" # Relativer Pfad zur Datei + TARGET_PATH="$TARGET_DIR/$RELATIVE_PATH" + + # Prüfen, ob die Datei angepasst werden muss + if grep -qE '\$HOME/Desktop|\$HOME/Downloads|\$HOME/Documents|\$HOME/Pictures|\$HOME/Music|\$HOME/Videos|/home/[a-zA-Z0-9._-]*/Desktop|/home/[a-zA-Z0-9._-]*/Downloads|/home/[a-zA-Z0-9._-]*/Documents|/home/[a-zA-Z0-9._-]*/Pictures|/home/[a-zA-Z0-9._-]*/Music|/home/[a-zA-Z0-9._-]*/Videos|\$\(xdg-user-dir\)/Desktop|\$\(xdg-user-dir\)/Downloads|\$\(xdg-user-dir\)/Documents|\$\(xdg-user-dir\)/Pictures|\$\(xdg-user-dir\)/Music|\$\(xdg-user-dir\)/Videos' "$FILE"; then + echo "🔄 Kopiere Datei zur Anpassung: $RELATIVE_PATH" + mkdir -p "$(dirname "$TARGET_PATH")" # Zielverzeichnis erstellen + cp "$FILE" "$TARGET_PATH" + COPIED_FILES+=("$RELATIVE_PATH") # Relativen Pfad speichern + else + echo "ℹ️ Datei $RELATIVE_PATH benötigt keine Anpassung. Überspringe Kopieren." + fi + done + else + echo "⚠️ Quellverzeichnis $SOURCE_DIR existiert nicht. Überspringe Verarbeitung." + fi + + # Ersetzungen in allen Dateien im Verzeichnis UserScripts vornehmen + echo "🔄 Ersetze absolute Pfade, XDG-Verzeichnisse und Platzhalter in allen Dateien im Verzeichnis $TARGET_DIR..." for FILE in "$TARGET_DIR"/*; do if [[ -f "$FILE" ]]; then - BASENAME=$(basename "$FILE") - SOURCE_FILE="$SOURCE_DIR/$BASENAME" + echo "Verarbeite Datei: $FILE" - # Prüfen, ob die Datei im Quellverzeichnis existiert und angepasst werden musste - if [[ -f "$SOURCE_FILE" ]] && ! grep -qE '\$HOME/Desktop|\$HOME/Downloads|\$HOME/Documents|\$HOME/Pictures|\$HOME/Music|\$HOME/Videos' "$SOURCE_FILE"; then - echo "🗑️ Entferne fälschlicherweise kopierte Datei: $BASENAME" - rm "$FILE" + # Ersetzungen vornehmen + sed -i \ + -e 's|\$HOME/Desktop|$(xdg-user-dir DESKTOP)|g' \ + -e 's|\$HOME/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ + -e 's|\$HOME/Documents|$(xdg-user-dir DOCUMENTS)|g' \ + -e 's|\$HOME/Pictures|$(xdg-user-dir PICTURES)|g' \ + -e 's|\$HOME/Music|$(xdg-user-dir MUSIC)|g' \ + -e 's|\$HOME/Videos|$(xdg-user-dir VIDEOS)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Desktop|$(xdg-user-dir DESKTOP)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Documents|$(xdg-user-dir DOCUMENTS)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Pictures|$(xdg-user-dir PICTURES)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Music|$(xdg-user-dir MUSIC)|g' \ + -e 's|/home/[a-zA-Z0-9._-]*/Videos|$(xdg-user-dir VIDEOS)|g' \ + -e 's|$(xdg-user-dir)/Desktop|$(xdg-user-dir DESKTOP)|g' \ + -e 's|$(xdg-user-dir)/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ + -e 's|$(xdg-user-dir)/Documents|$(xdg-user-dir DOCUMENTS)|g' \ + -e 's|$(xdg-user-dir)/Pictures|$(xdg-user-dir PICTURES)|g' \ + -e 's|$(xdg-user-dir)/Music|$(xdg-user-dir MUSIC)|g' \ + -e 's|$(xdg-user-dir)/Videos|$(xdg-user-dir VIDEOS)|g' \ + "$FILE" - # Rückgängig machen der falschen Verweise in UserKeybinds.conf - if [[ -f "$USER_KEYBINDS_FILE" ]]; then - echo "🔄 Setze falschen Verweis für $BASENAME in $USER_KEYBINDS_FILE zurück..." - sed -i "s|\$UserScripts/$BASENAME|\$scriptsDir/$BASENAME|g" "$USER_KEYBINDS_FILE" - echo "✅ Verweis für $BASENAME zurückgesetzt." - fi - else - echo "✅ Datei $BASENAME ist korrekt und bleibt erhalten." - fi + echo "✅ Ersetzungen in $FILE abgeschlossen." fi done -else - echo "⚠️ Zielverzeichnis $TARGET_DIR existiert nicht. Keine Bereinigung erforderlich." -fi -# Kopiere nur relevante Dateien und behalte die Verzeichnisstruktur bei -echo "📂 Verarbeite Dateien im Verzeichnis $SOURCE_DIR..." -mkdir -p "$TARGET_DIR" -COPIED_FILES=() # Array, um die tatsächlich kopierten Dateien zu speichern - -if [[ -d "$SOURCE_DIR" ]]; then - find "$SOURCE_DIR" -type f | while read -r FILE; do - RELATIVE_PATH="${FILE#$SOURCE_DIR/}" # Relativer Pfad zur Datei - TARGET_PATH="$TARGET_DIR/$RELATIVE_PATH" - - # Prüfen, ob die Datei angepasst werden muss - if grep -qE '\$HOME/Desktop|\$HOME/Downloads|\$HOME/Documents|\$HOME/Pictures|\$HOME/Music|\$HOME/Videos|/home/[a-zA-Z0-9._-]*/Desktop|/home/[a-zA-Z0-9._-]*/Downloads|/home/[a-zA-Z0-9._-]*/Documents|/home/[a-zA-Z0-9._-]*/Pictures|/home/[a-zA-Z0-9._-]*/Music|/home/[a-zA-Z0-9._-]*/Videos|\$\(xdg-user-dir\)/Desktop|\$\(xdg-user-dir\)/Downloads|\$\(xdg-user-dir\)/Documents|\$\(xdg-user-dir\)/Pictures|\$\(xdg-user-dir\)/Music|\$\(xdg-user-dir\)/Videos' "$FILE"; then - echo "🔄 Kopiere Datei zur Anpassung: $RELATIVE_PATH" - mkdir -p "$(dirname "$TARGET_PATH")" # Zielverzeichnis erstellen - cp "$FILE" "$TARGET_PATH" - COPIED_FILES+=("$RELATIVE_PATH") # Relativen Pfad speichern - else - echo "ℹ️ Datei $RELATIVE_PATH benötigt keine Anpassung. Überspringe Kopieren." - fi - done -else - echo "⚠️ Quellverzeichnis $SOURCE_DIR existiert nicht. Überspringe Verarbeitung." -fi - -# Ersetzungen in allen Dateien im Verzeichnis UserScripts vornehmen -echo "🔄 Ersetze absolute Pfade, XDG-Verzeichnisse und Platzhalter in allen Dateien im Verzeichnis $TARGET_DIR..." -for FILE in "$TARGET_DIR"/*; do - if [[ -f "$FILE" ]]; then - echo "Verarbeite Datei: $FILE" - - # Ersetzungen vornehmen - sed -i \ - -e 's|\$HOME/Desktop|$(xdg-user-dir DESKTOP)|g' \ - -e 's|\$HOME/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ - -e 's|\$HOME/Documents|$(xdg-user-dir DOCUMENTS)|g' \ - -e 's|\$HOME/Pictures|$(xdg-user-dir PICTURES)|g' \ - -e 's|\$HOME/Music|$(xdg-user-dir MUSIC)|g' \ - -e 's|\$HOME/Videos|$(xdg-user-dir VIDEOS)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Desktop|$(xdg-user-dir DESKTOP)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Documents|$(xdg-user-dir DOCUMENTS)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Pictures|$(xdg-user-dir PICTURES)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Music|$(xdg-user-dir MUSIC)|g' \ - -e 's|/home/[a-zA-Z0-9._-]*/Videos|$(xdg-user-dir VIDEOS)|g' \ - -e 's|$(xdg-user-dir)/Desktop|$(xdg-user-dir DESKTOP)|g' \ - -e 's|$(xdg-user-dir)/Downloads|$(xdg-user-dir DOWNLOAD)|g' \ - -e 's|$(xdg-user-dir)/Documents|$(xdg-user-dir DOCUMENTS)|g' \ - -e 's|$(xdg-user-dir)/Pictures|$(xdg-user-dir PICTURES)|g' \ - -e 's|$(xdg-user-dir)/Music|$(xdg-user-dir MUSIC)|g' \ - -e 's|$(xdg-user-dir)/Videos|$(xdg-user-dir VIDEOS)|g' \ - "$FILE" - - echo "✅ Ersetzungen in $FILE abgeschlossen." + # Verweise in UserKeybinds.conf anpassen + if [[ -f "$USER_KEYBINDS_FILE" ]]; then + echo "🔄 Passe Verweise in $USER_KEYBINDS_FILE an..." + for SCRIPT in "${COPIED_FILES[@]}"; do + # Ersetze $scriptsDir/ durch $UserScripts/ + sed -i "s|\$scriptsDir/$SCRIPT|\$UserScripts/$SCRIPT|g" "$USER_KEYBINDS_FILE" + echo "✅ Verweis für $SCRIPT angepasst." + done + else + echo "⚠️ Datei $USER_KEYBINDS_FILE existiert nicht. Überspringe Anpassung der Verweise." fi -done -# Verweise in UserKeybinds.conf anpassen -if [[ -f "$USER_KEYBINDS_FILE" ]]; then - echo "🔄 Passe Verweise in $USER_KEYBINDS_FILE an..." - for SCRIPT in "${COPIED_FILES[@]}"; do - # Ersetze $scriptsDir/ durch $UserScripts/ - sed -i "s|\$scriptsDir/$SCRIPT|\$UserScripts/$SCRIPT|g" "$USER_KEYBINDS_FILE" - echo "✅ Verweis für $SCRIPT angepasst." - done -else - echo "⚠️ Datei $USER_KEYBINDS_FILE existiert nicht. Überspringe Anpassung der Verweise." + echo "📂 Verschiebe $(xdg-user-dir)/Pictures nach $(xdg-user-dir PICTURES)..." + rsync -av --ignore-existing "$(xdg-user-dir)/Pictures/" "$(xdg-user-dir PICTURES)/" + rm -r "$(xdg-user-dir)/Pictures/" fi -echo "📂 Verschiebe $(xdg-user-dir)/Pictures nach $(xdg-user-dir PICTURES)..." -rsync -av --ignore-existing "$(xdg-user-dir)/Pictures/" "$(xdg-user-dir PICTURES)/" -rm -r "$(xdg-user-dir)/Pictures/" - echo "✅ Skript erfolgreich ausgeführt!" diff --git a/8_Plymouth.sh b/8_Plymouth.sh index 187a7e1..25a8d95 100755 --- a/8_Plymouth.sh +++ b/8_Plymouth.sh @@ -4,7 +4,7 @@ set -e # Skript bricht bei Fehlern ab # Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird if [[ $EUID -ne 0 ]]; then - echo "Dieses Skript muss als root ausgeführt werden." + echo "❌ Dieses Skript muss als root ausgeführt werden." exit 1 fi diff --git a/9_GamingSetup.sh b/9_GamingSetup.sh index bf12fae..a1ecbd2 100755 --- a/9_GamingSetup.sh +++ b/9_GamingSetup.sh @@ -2,7 +2,7 @@ # Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird if [[ $EUID -ne 0 ]]; then - echo "Dieses Skript muss als root ausgeführt werden." + echo "❌ Dieses Skript muss als root ausgeführt werden." exit 1 fi @@ -10,26 +10,38 @@ fi apt update && apt upgrade -y # Steam-Installation -dpkg --add-architecture i386 -apt update -apt install -y wget curl +read -p "❓ Soll Steam installiert werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -wget -O /tmp/steam.deb https://cdn.akamai.steamstatic.com/client/installer/steam.deb -apt install -y /tmp/steam.deb -rm /tmp/steam.deb +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + dpkg --add-architecture i386 + apt update + apt install -y wget curl + + wget -O /tmp/steam.deb https://cdn.akamai.steamstatic.com/client/installer/steam.deb + apt install -y /tmp/steam.deb + rm /tmp/steam.deb +fi # Lutris-Installation -LUTRIS_KEYRING="/etc/apt/keyrings/lutris.gpg" -LUTRIS_REPO="https://download.opensuse.org/repositories/home:/strycore/Debian_12/" +read -p "❓ Soll Lutris installiert werden? (j/n) [n]: " answer +answer=${answer,,} # In Kleinbuchstaben umwandeln +answer=${answer:-n} # Standardwert 'n', falls leer -mkdir -p /etc/apt/keyrings -wget -qO /tmp/lutris-key.gpg "${LUTRIS_REPO}Release.key" -gpg --dearmor "$LUTRIS_KEYRING" -rm /tmp/lutris-key.gpg +if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then + LUTRIS_KEYRING="/etc/apt/keyrings/lutris.gpg" + LUTRIS_REPO="https://download.opensuse.org/repositories/home:/strycore/Debian_12/" -echo "deb [signed-by=$LUTRIS_KEYRING] $LUTRIS_REPO ./" >/etc/apt/sources.list.d/lutris.list + mkdir -p /etc/apt/keyrings + wget -qO /tmp/lutris-key.gpg "${LUTRIS_REPO}Release.key" + gpg --dearmor "$LUTRIS_KEYRING" + rm /tmp/lutris-key.gpg -apt update -apt install -y lutris + echo "deb [signed-by=$LUTRIS_KEYRING] $LUTRIS_REPO ./" >/etc/apt/sources.list.d/lutris.list -echo "✅ Installation von Steam und Lutris abgeschlossen!" + apt update + apt install -y lutris +fi + +echo "✅ Skript abgeschlossen!"