#!/bin/bash MOUNT_BASE="$HOME/SYM" declare -A REMOTES while IFS= read -r remote; do remote="${remote%:}" REMOTES["$remote"]="$MOUNT_BASE/$remote" done < <(rclone listremotes) if [[ ${#REMOTES[@]} -eq 0 ]]; then echo "Keine rclone-Remotes gefunden. Abbruch." exit 1 fi is_mounted() { mountpoint -q "${REMOTES[$1]}" } status_dot() { is_mounted "$1" && echo "🟢" || echo "🔴" } mount_remote() { local remote=$1 local mount_path="${REMOTES[$remote]}" if is_mounted "$remote"; then gum style --foreground 212 "⚠️ ${remote} ist bereits gemountet unter ${mount_path}" return 0 fi mkdir -p "$mount_path" gum spin --title "Mounting ${remote}..." -- rclone mount \ --vfs-cache-mode full \ --dir-cache-time 1h \ --daemon \ "$remote": "$mount_path" if is_mounted "$remote"; then gum style --foreground 10 "✅ ${remote} wurde erfolgreich gemountet unter ${mount_path}" else gum style --foreground 9 "❌ Fehler beim Mounten von ${remote}. Bitte rclone-Log prüfen." return 1 fi } unmount_remote() { local remote=$1 local mount_path="${REMOTES[$remote]}" if ! is_mounted "$remote"; then gum style --foreground 212 "⚠️ ${remote} ist nicht gemountet." return 0 fi gum spin --title "Unmounting ${remote}..." -- fusermount -z "$mount_path" sleep 1 # kurz warten bis der lazy unmount sich gesetzt hat if ! is_mounted "$remote"; then gum style --foreground 10 "✅ ${remote} wurde erfolgreich getrennt." else gum style --foreground 9 "❌ Fehler beim Trennen von ${remote}." return 1 fi } unmount_all() { local any_mounted=false for remote in "${!REMOTES[@]}"; do if is_mounted "$remote"; then any_mounted=true unmount_remote "$remote" fi done if ! $any_mounted; then gum style --foreground 212 "⚠️ Keine Remotes gemountet." fi } while true; do menu_items=() for remote in "${!REMOTES[@]}"; do menu_items+=("$(status_dot "$remote") ${remote}") done menu_items+=("⏏️ Alle Remotes trennen" "Beenden") choice=$(gum choose --header "🚀 rclone Mount-Menü" "${menu_items[@]}") case "$choice" in "⏏️ Alle Remotes trennen") unmount_all ;; "Beenden") exit 0 ;; *) selected="${choice#* }" is_mounted "$selected" && unmount_remote "$selected" || mount_remote "$selected" ;; esac done