#!/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 upgrade -y && sudo apt autoremove -y echo "🔄 Entferne Pakete..." sudo apt remove -y firefox kmahjongg kmines kpat ksudoku nextcloud-desktop skanlite thunderbird virtualbox echo "🔄 Installiere Pakete..." sudo apt update && sudo apt install -y flatpak neovim ufw rfkill xdg-user-dirs rsync maliit-keyboard ffmpeg printer-driver-* clamav clamav-freshclam clamav-docs libclamunrar9 clamav-daemon 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 echo 'deb http://download.opensuse.org/repositories/home:/hawkeye116477:/waterfox/xUbuntu_24.04/ /' | sudo tee /etc/apt/sources.list.d/home:hawkeye116477:waterfox.list curl -fsSL https://download.opensuse.org/repositories/home:hawkeye116477:waterfox/xUbuntu_24.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/home_hawkeye116477_waterfox.gpg > /dev/null 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 echo "🔄 Füge Autostart-Apps hinzu..." # Pfad zur Konfigurationsdatei CONFIG_FILE="$HOME/.config/hypr/UserConfigs/Startup_Apps.conf" # Zeile, die hinzugefügt werden soll LINE_TO_ADD="exec-once = tuxedo-control-center --tray" # Überprüfen, ob die Datei existiert if [ -f "$CONFIG_FILE" ]; then # Überprüfen, ob die Zeile bereits existiert if ! grep -Fxq "$LINE_TO_ADD" "$CONFIG_FILE"; then # Zeile hinzufügen echo "$LINE_TO_ADD" >> "$CONFIG_FILE" echo "Zeile wurde erfolgreich hinzugefügt." else echo "Die Zeile existiert bereits in der Datei." fi else echo "Die Datei $CONFIG_FILE existiert nicht." fi # 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 # Überprüfen, ob der Ordner existiert if [ -d "$(xdg-user-dir)/Pictures" ]; then 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/" else echo "📂 Der Ordner $(xdg-user-dir)/Pictures existiert nicht. Kein Verschieben notwendig." fi echo "✅ Skript erfolgreich ausgeführt!"