237 lines
11 KiB
Bash
Executable File
237 lines
11 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
set -e # Skript bricht bei Fehlern ab
|
||
|
||
# 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 upgrade -y
|
||
|
||
echo "ℹ️ Firewall (ufw) wird installiert..."
|
||
sudo apt install -y ufw
|
||
sudo ufw enable
|
||
|
||
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
|
||
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
|
||
read -p "❓ Soll Firefox durch Waterfox ersetzt werden? (j/n) [n]: " answer
|
||
answer=${answer,,} # In Kleinbuchstaben umwandeln
|
||
answer=${answer:-n} # Standardwert 'n', falls leer
|
||
|
||
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
|
||
|
||
sudo apt update && sudo apt install -y waterfox
|
||
echo "✅ Waterfox wurde installiert!"
|
||
|
||
# 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
|
||
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
|
||
|
||
if [[ "$answer" == "j" ]] || [[ "$answer" == "y" ]]; then
|
||
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
|
||
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
|
||
|
||
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
|
||
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/<Dateiname> durch $UserScripts/<Dateiname>
|
||
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/"
|
||
fi
|
||
|
||
echo "✅ Skript erfolgreich ausgeführt!"
|