From 876866f7408d81d2fa8892850b6e09f0f0e0294f Mon Sep 17 00:00:00 2001 From: DragonSlayer_14 Date: Sun, 9 Mar 2025 20:52:44 +0100 Subject: [PATCH] =?UTF-8?q?Feat:=20F=C3=BCgt=20Skripte=20zum=20aufsetzen?= =?UTF-8?q?=20von=20Debian=2012=20(Bookworm)=20hinzu.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 0_Setup.sh | 78 ++++++++++++++ 10_Programs.sh | 236 +++++++++++++++++++++++++++++++++++++++++++ 1_TrixieUpgrade.sh | 34 +++++++ 2_AdJoin.sh | 26 +++++ 3_HyprlandInstall.sh | 26 +++++ 4_ZshRegister.sh | 62 ++++++++++++ 5_DomainLogin.sh | 47 +++++++++ 6_Polish.sh | 193 +++++++++++++++++++++++++++++++++++ 7_GrubTheme.sh | 36 +++++++ 8_Plymouth.sh | 59 +++++++++++ 9_GamingSetup.sh | 35 +++++++ README.md | 2 + 12 files changed, 834 insertions(+) create mode 100755 0_Setup.sh create mode 100755 10_Programs.sh create mode 100755 1_TrixieUpgrade.sh create mode 100755 2_AdJoin.sh create mode 100755 3_HyprlandInstall.sh create mode 100755 4_ZshRegister.sh create mode 100755 5_DomainLogin.sh create mode 100755 6_Polish.sh create mode 100755 7_GrubTheme.sh create mode 100755 8_Plymouth.sh create mode 100755 9_GamingSetup.sh diff --git a/0_Setup.sh b/0_Setup.sh new file mode 100755 index 0000000..a16ab4a --- /dev/null +++ b/0_Setup.sh @@ -0,0 +1,78 @@ +#!/bin/bash + +# Root-Rechte prüfen +if [ "$(id -u)" -ne 0 ]; then + echo "Bitte mit sudo ausführen!" + exit 1 +fi + +apt update && apt upgrade -y +apt install -y git sudo + +# 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' + +# 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. +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." +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 + +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 +' + +echo "$XDG_BLOCK" >/etc/profile.d/xdg_dirs_desktop_session.sh + +echo "Fertig! Bitte neu einloggen." + diff --git a/10_Programs.sh b/10_Programs.sh new file mode 100755 index 0000000..b18c7ff --- /dev/null +++ b/10_Programs.sh @@ -0,0 +1,236 @@ +#!/bin/bash + +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." + exit 1 +fi + +# Überprüfen, ob Flatpak installiert ist +if ! command -v flatpak &>/dev/null; then + echo "❌ Fehler: Flatpak ist nicht installiert. Bitte installiere es und versuche es erneut." + exit 1 +fi + +# Flatpak Apps installieren (nur falls noch nicht als DEB installiert) +declare -A FLATPAK_APPS=( +["org.libreoffice.LibreOffice"]="LibreOffice" +["dev.vencord.Vesktop"]="Vesktop" +["eu.betterbird.Betterbird"]="Betterbird" +) + +for APP in "${!FLATPAK_APPS[@]}"; do + if dpkg -l | grep -iq "${FLATPAK_APPS[$APP]}"; then + echo "✅ ${FLATPAK_APPS[$APP]} ist bereits als DEB-Paket installiert." + elif flatpak list | grep -q "$APP"; then + echo "✅ ${FLATPAK_APPS[$APP]} ist bereits als Flatpak installiert." + else + echo "🔄 Installiere ${FLATPAK_APPS[$APP]} als Flatpak..." + flatpak install -y flathub "$APP" + fi +done + +# Dynamischen Vorlagen-Ordner ermitteln +TEMPLATE_DIR=$(xdg-user-dir TEMPLATES 2>/dev/null || echo "$HOME/Vorlagen") +mkdir -p "$TEMPLATE_DIR" + +# Prüfen, ob LibreOffice als Flatpak installiert ist +if flatpak list | grep -q "org.libreoffice.LibreOffice"; then + LO_CMD="flatpak run org.libreoffice.LibreOffice" +elif command -v libreoffice &>/dev/null; then + LO_CMD="libreoffice" +else + echo "❌ Fehler: LibreOffice ist weder als Flatpak noch als DEB-Paket installiert." + exit 1 +fi + +# LibreOffice-Vorlagen erstellen, falls nicht vorhanden +if [[ ! -f "$TEMPLATE_DIR/LibreOffice-Writer.ott" ]]; then + echo "🔄 Erstelle LibreOffice Writer-Vorlage..." + $LO_CMD --headless --convert-to ott --outdir "$TEMPLATE_DIR" /dev/null +else + echo "✅ LibreOffice Writer-Vorlage ist bereits vorhanden." +fi + +if [[ ! -f "$TEMPLATE_DIR/LibreOffice-Calc.ots" ]]; then + echo "🔄 Erstelle LibreOffice Calc-Vorlage..." + $LO_CMD --headless --convert-to ots --outdir "$TEMPLATE_DIR" /dev/null +else + echo "✅ LibreOffice Calc-Vorlage ist bereits vorhanden." +fi + +# Spotify-Installation +echo "🎵 Überprüfe Spotify-Installation..." +SPOTIFY_KEY="/etc/apt/trusted.gpg.d/spotify.gpg" +SPOTIFY_REPO="/etc/apt/sources.list.d/spotify.list" + +if dpkg -l | grep -q "spotify-client"; then + echo "✅ Spotify ist bereits installiert." +else + echo "🔄 Installiere Spotify..." + + if [[ ! -f "$SPOTIFY_KEY" ]]; then + curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg | sudo gpg --dearmor -o "$SPOTIFY_KEY" + else + echo "✅ Spotify GPG-Key ist bereits vorhanden." + fi + + if [[ ! -f "$SPOTIFY_REPO" ]]; then + echo "deb http://repository.spotify.com stable non-free" | sudo tee "$SPOTIFY_REPO" + else + echo "✅ Spotify-Repository ist bereits konfiguriert." + fi + + sudo apt update && sudo apt install -y spotify-client +fi + +# Spotify .desktop-Datei erstellen +SPOTIFY_DESKTOP_FILE="$HOME/.local/share/applications/spotify.desktop" +mkdir -p "$HOME/.local/share/applications" +if [[ ! -f "$SPOTIFY_DESKTOP_FILE" ]]; then + echo "🔄 Erstelle Spotify .desktop-Datei..." + cat <"$SPOTIFY_DESKTOP_FILE" +[Desktop Entry] +Name=Spotify +Exec=/usr/bin/spotify +Icon=spotify-client +Terminal=false +Type=Application +Categories=Audio;Music; +EOF + echo "✅ Spotify .desktop-Datei wurde erstellt." +else + echo "✅ Spotify .desktop-Datei ist bereits vorhanden." +fi + +# Benötigte Abhängigkeiten prüfen und installieren +dependencies=(man fzf ripgrep awk w3m coreutils parallel) +for dep in "${dependencies[@]}"; do + if ! command -v "$dep" &>/dev/null; then + echo "🔄 Installiere $dep..." + sudo apt install -y "$dep" + else + echo "✅ $dep ist bereits installiert." + fi + +done + +# Tealdeer (tldr-Client) installieren +if ! command -v tldr &>/dev/null; then + echo "🔄 Installiere tealdeer..." + sudo apt install -y tealdeer +else + echo "✅ Tealdeer ist bereits installiert." +fi + +# tealdeer Autoupdate konfigurieren +TEALDEER_CONFIG=~/.config/tealdeer/config.toml +mkdir -p ~/.config/tealdeer +if ! grep -q "\[updates\]" "$TEALDEER_CONFIG" 2 >/dev/null; then + echo -e "\n[updates]" >>"$TEALDEER_CONFIG" +fi +if grep -q "^auto_update" "$TEALDEER_CONFIG" 2 >/dev/null; then + sed -i 's/^auto_update.*/auto_update = true/' "$TEALDEER_CONFIG" +else + echo "auto_update = true" >>"$TEALDEER_CONFIG" +fi + +# Wikiman installieren, falls nicht vorhanden +if ! command -v wikiman &>/dev/null; then + echo "🔄 Installiere Wikiman..." + + # Prüfen, ob `make` installiert ist + if ! command -v make &>/dev/null; then + echo "🔄 Installiere make..." + sudo apt install -y make + fi + + git clone 'https://github.com/filiparag/wikiman' ~/wikiman + cd ~/wikiman || exit + + # Die neueste stabile Version auschecken + git checkout "$(git describe --tags | cut -d'-' -f1)" + + # Kompilieren und installieren + make all + sudo make install + + # Cleanup + cd .. + rm -rf ~/wikiman + + echo "✅ Wikiman wurde erfolgreich installiert!" +else + echo "✅ Wikiman ist bereits installiert." +fi + +# Arch-Wiki für Wikiman installieren, falls nicht vorhanden +if ! wikiman -list | grep -q "arch"; then + echo "🔄 Installiere Arch Wiki für Wikiman..." + curl -L 'https://raw.githubusercontent.com/filiparag/wikiman/master/Makefile' -o 'wikiman-makefile' + make -f ./wikiman-makefile source-arch + sudo make -f ./wikiman-makefile source-install + sudo make -f ./wikiman-makefile clean + rm -f wikiman-makefile +else + echo "✅ Arch Wiki ist bereits installiert." +fi + +echo "🔄 Installiere Standard-Programme..." +# Bildbetrachter +flatpak install flathub org.gnome.Loupe -y +xdg-mime default org.gnome.Loupe.desktop image/jpeg +xdg-mime default org.gnome.Loupe.desktop image/png + +# Disk-Utility, PDF-Viewer (Okular), Softwarecenter und Flatpak-Plugin, Systemmonitor +sudo apt -y install gnome-disk-utility okular gnome-software gnome-software-plugin-flatpak gnome-system-monitor +# Okular als Standard-PDF-Viewer setzen +xdg-mime default okularApplication_pdf.desktop application/pdf +# Betterbird als Standard-Mail-Programm setzen +xdg-mime default org.betterbird.Betterbird.desktop x-scheme-handler/mailto + +# Simple Scan isntallieren +flatpak install flathub org.gnome.SimpleScan -y +# Festplattenbelegungsanalyse installieren +flatpak install flathub org.gnome.baobab -y +# Camera installieren +flatpak install flathub org.gnome.Snapshot -y +# Amberol (Musik-Player) installieren +flatpak install flathub io.bassi.Amberol -y +xdg-mime default io.bassi.Amberol.desktop audio/mpeg +xdg-mime default io.bassi.Amberol.desktop audio/x-wav +xdg-mime default io.bassi.Amberol.desktop audio/flac +xdg-mime default io.bassi.Amberol.desktop audio/ogg + +# VLC-Media-Player installieren +flatpak install flathub org.videolan.VLC -y +# Protokolle installieren +flatpak install flathub org.gnome.Logs -y +# Schriftarten-Viewer +flatpak install flathub org.gnome.font-viewer -y +# Taschenrechner +flatpak install flathub org.gnome.Calculator -y +# Texteditor +flatpak install flathub org.gnome.TextEditor -y +xdg-mime default org.gnome.TextEditor.desktop text/plain +xdg-mime default org.gnome.TextEditor.desktop text/x-log +xdg-mime default org.gnome.TextEditor.desktop text/markdown + +# Ente Authenticator +flatpak install flathub io.ente.auth -y +# Cartridges (Gaming) +flatpak install flathub page.kramo.Cartridges -y +# Decoder (QR-Code) +flatpak install flathub com.belmoussaoui.Decoder -y +# Fragments (Torrent) +flatpak install flathub de.haeckerfelix.Fragments -y +# Impressions (Bootsticks) +flatpak install flathub io.gitlab.adhami3310.Impression -y +# Ressources (Task-Manager) +flatpak install flathub net.nokyan.Resources -y +# Secrets +flatpak install flathub org.gnome.World.Secrets -y + +echo "✅ Alle Programme wurden erfolgreich installiert!" diff --git a/1_TrixieUpgrade.sh b/1_TrixieUpgrade.sh new file mode 100755 index 0000000..7c045f8 --- /dev/null +++ b/1_TrixieUpgrade.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Root-Rechte prüfen +if [ "$(id -u)" -ne 0 ]; then + echo "Bitte mit sudo 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." + exit 0 +fi + +echo "Aktualisiere Paketlisten..." +sudo apt-get update + +echo "Starte System-Upgrade..." +sudo apt-get full-upgrade -y + +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..." +sudo apt-get update + +echo "Starte vollständiges Release-Upgrade..." +sudo apt-get full-upgrade -y + +echo "System wird jetzt neu gestartet..." +sudo reboot + diff --git a/2_AdJoin.sh b/2_AdJoin.sh new file mode 100755 index 0000000..4bd5738 --- /dev/null +++ b/2_AdJoin.sh @@ -0,0 +1,26 @@ +#!/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 + +# Verzeichnis setzen +REPO_DIR="$HOME/Linux-Active-Directory-join-script" + +# Repository klonen, falls es noch nicht existiert +if [ -d "$REPO_DIR" ]; then + echo "Repository existiert bereits. Überspringe das Klonen." +else + 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; } + +# AD-Skript ausführen +echo "Starte Active Directory Verbindung..." +sudo bash ADconnection.sh + diff --git a/3_HyprlandInstall.sh b/3_HyprlandInstall.sh new file mode 100755 index 0000000..8f60635 --- /dev/null +++ b/3_HyprlandInstall.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Repository-Pfad definieren +REPO_DIR="$HOME/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 +else + 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 + +# Sicherstellen, dass das Installationsskript existiert und ausführbar ist +if [ -f "install.sh" ]; then + chmod +x install.sh + echo "Starte Installation..." + ./install.sh +else + echo "Fehler: install.sh nicht gefunden!" + exit 1 +fi + diff --git a/4_ZshRegister.sh b/4_ZshRegister.sh new file mode 100755 index 0000000..fa3e108 --- /dev/null +++ b/4_ZshRegister.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +# Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird +if [[ $EUID -ne 0 ]]; then + echo "Dieses Skript muss als root ausgeführt werden." + 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." + exit 1 +fi + +USER_NAME="$SUDO_USER" +USER_HOME=$(eval echo ~$USER_NAME) + +# Eintrag aus getent passwd holen +USER_ENTRY=$(getent passwd "$USER_NAME") + +# 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 + +echo "✅ Installation abgeschlossen!" diff --git a/5_DomainLogin.sh b/5_DomainLogin.sh new file mode 100755 index 0000000..91d9751 --- /dev/null +++ b/5_DomainLogin.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird +if [[ $EUID -ne 0 ]]; then + 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" + +# 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" +[Users] +MaximumUid=9999999999 +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" +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." diff --git a/6_Polish.sh b/6_Polish.sh new file mode 100755 index 0000000..abd602a --- /dev/null +++ b/6_Polish.sh @@ -0,0 +1,193 @@ +#!/bin/bash + +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." + 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 +sudo ufw enable + +# Flatpak Flathub-Repo hinzufügen +sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo + +# 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 + +sudo apt update && sudo apt install -y waterfox + +# 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 + +# Hyprland User Bindings +HYPR_CONFIG_DIR="$HOME/.config/hypr/UserConfigs" +mkdir -p "$HYPR_CONFIG_DIR" + +# 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 + +# Standardvorlagen ablegen +echo "📂 Standardvorlagen werden im Vorlagen-Ordner erstellt..." +TEMPLATES_DIR=$(xdg-user-dir TEMPLATES 2>/dev/null || echo "$HOME/Vorlagen") +mkdir -p "$TEMPLATES_DIR" + +# Vorlagenliste +declare -A TEMPLATES=( +["Textdokument.txt"]="Dies ist eine Standard-Textdatei." +["Markdown-Dokument.md"]="# Markdown-Vorlage\n\nHier beginnt dein Markdown-Dokument." +["Bash-Skript.sh"]="#!/bin/bash\n\necho 'Hello, world!'" +["Python-Skript.py"]='#!/usr/bin/env python3\n\nprint("Hello, world!")' +) + +for FILE in "${!TEMPLATES[@]}"; do + TEMPLATE_PATH="$TEMPLATES_DIR/$FILE" + if [[ ! -f "$TEMPLATE_PATH" ]]; then + echo -e "${TEMPLATES[$FILE]}" >"$TEMPLATE_PATH" + chmod +x "$TEMPLATE_PATH" # Falls Skript + echo "✅ Vorlage erstellt: $FILE" + else + echo "ℹ️ Vorlage existiert bereits: $FILE" + fi +done + +# Zielverzeichnis und UserKeybinds-Datei definieren +SOURCE_DIR="$HOME/.config/hypr/scripts" +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 + 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 + 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." + 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." +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/7_GrubTheme.sh b/7_GrubTheme.sh new file mode 100755 index 0000000..8060845 --- /dev/null +++ b/7_GrubTheme.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +set -e # Skript bricht bei Fehlern ab + +# Theme-Name +THEME_NAME="vimix" + +# Prüfen, ob GRUB bereits das Theme verwendet +if grep -q "GRUB_THEME=" /etc/default/grub && grep -q "$THEME_NAME" /etc/default/grub; then + echo "✅ Das Theme '$THEME_NAME' ist bereits installiert und aktiv." + exit 0 +fi + +echo "🔄 Installiere das GRUB-Theme '$THEME_NAME'..." + +# Falls der Ordner existiert, vorher löschen +THEME_DIR="$HOME/grub-themes" +if [[ -d "$THEME_DIR" ]]; then + rm -rf "$THEME_DIR" +fi + +# Repository klonen +git clone https://github.com/vinceliuice/grub2-themes.git "$THEME_DIR" +cd "$THEME_DIR" + +# Theme installieren +sudo ./install.sh -b -t "$THEME_NAME" + +# GRUB-Konfiguration aktualisieren +echo "🔄 Aktualisiere die GRUB-Konfiguration..." +sudo update-grub + +# Aufräumen +rm -rf "$THEME_DIR" + +echo "✅ GRUB-Theme '$THEME_NAME' erfolgreich installiert und aktiviert!" diff --git a/8_Plymouth.sh b/8_Plymouth.sh new file mode 100755 index 0000000..187a7e1 --- /dev/null +++ b/8_Plymouth.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +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." + exit 1 +fi + +echo "🔄 Plymouth und benötigte Pakete installieren..." +if ! dpkg -l | grep -qw plymouth; then + apt update && apt install -y plymouth plymouth-themes +else + echo "✅ Plymouth ist bereits installiert." +fi + +# Plymouth in initramfs aktivieren +MKINIT_CONF="/etc/mkinitcpio.conf" +if [[ -f "$MKINIT_CONF" ]]; then + if grep -q "^HOOKS=" "$MKINIT_CONF"; then + sed -i 's/^HOOKS=.*/HOOKS=(base udev plymouth autodetect modconf block encrypt lvm2 filesystems keyboard fsck)/' "$MKINIT_CONF" + else + echo 'HOOKS=(base udev plymouth autodetect modconf block encrypt lvm2 filesystems keyboard fsck)' >>"$MKINIT_CONF" + fi +fi + +# Falls Dracut genutzt wird, initramfs neu erstellen +if command -v dracut &>/dev/null; then + echo "🔄 Dracut erkannt, erstelle neues initramfs..." + dracut -f +else + echo "🔄 Initramfs wird aktualisiert..." + update-initramfs -u +fi + +# Plymouth-Theme setzen +PLYMOUTH_THEME="spinner" +echo "🎨 Setze Plymouth-Theme auf '$PLYMOUTH_THEME'..." +plymouth-set-default-theme -R "$PLYMOUTH_THEME" + +# Kernel-Boot-Parameter in GRUB anpassen +GRUB_CFG="/etc/default/grub" +GRUB_BACKUP="/etc/default/grub.bak" + +echo "🔍 Überprüfe GRUB-Einstellungen..." +NEW_CMDLINE="quiet splash vt.global_cursor_default=0 loglevel=3 rd.luks.options=discard plymouth.ignore-serial-consoles" + +if grep -q "^GRUB_CMDLINE_LINUX_DEFAULT=.*" "$GRUB_CFG"; then + sed -i "s|^GRUB_CMDLINE_LINUX_DEFAULT=.*|GRUB_CMDLINE_LINUX_DEFAULT=\"$NEW_CMDLINE\"|" "$GRUB_CFG" + echo "🔄 GRUB wird aktualisiert..." + update-grub +else + echo "GRUB_CMDLINE_LINUX_DEFAULT=\"$NEW_CMDLINE\"" >>"$GRUB_CFG" + echo "🔄 GRUB wird aktualisiert..." + update-grub +fi + +echo "✅ Einrichtung abgeschlossen. Bitte starte das System neu, um die Änderungen zu übernehmen." diff --git a/9_GamingSetup.sh b/9_GamingSetup.sh new file mode 100755 index 0000000..bf12fae --- /dev/null +++ b/9_GamingSetup.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Sicherstellen, dass das Skript mit Root-Rechten ausgeführt wird +if [[ $EUID -ne 0 ]]; then + echo "Dieses Skript muss als root ausgeführt werden." + exit 1 +fi + +# System aktualisieren +apt update && apt upgrade -y + +# Steam-Installation +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 + +# Lutris-Installation +LUTRIS_KEYRING="/etc/apt/keyrings/lutris.gpg" +LUTRIS_REPO="https://download.opensuse.org/repositories/home:/strycore/Debian_12/" + +mkdir -p /etc/apt/keyrings +wget -qO /tmp/lutris-key.gpg "${LUTRIS_REPO}Release.key" +gpg --dearmor "$LUTRIS_KEYRING" +rm /tmp/lutris-key.gpg + +echo "deb [signed-by=$LUTRIS_KEYRING] $LUTRIS_REPO ./" >/etc/apt/sources.list.d/lutris.list + +apt update +apt install -y lutris + +echo "✅ Installation von Steam und Lutris abgeschlossen!" diff --git a/README.md b/README.md index 4308ece..a39b240 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ Dieses Repository enthält Skripte um ein Linux System mit Hyprland und diversen Programmen aufzusetzen. Die entsprechenden Skripte befinden sich in den Branches zur jeweiligen Distribution. +**Mit diesen Skripten kann *Debian 12 (Bookworm)* mit *Hyprland* und diversen Programmen aufgesetzt werden.** + ## Anforderungen Um die Skripte in diesem Repository auszuführen, stelle sicher, dass die folgenden Voraussetzungen erfüllt sind: