diff --git a/bin/clean.sh b/bin/clean.sh index 599e4ac..d00067e 100755 --- a/bin/clean.sh +++ b/bin/clean.sh @@ -15,6 +15,7 @@ source "$SCRIPT_DIR/../lib/common.sh" # Configuration SYSTEM_CLEAN=false DRY_RUN=false +PROTECT_FINDER_METADATA=false IS_M_SERIES=$([[ "$(uname -m)" == "arm64" ]] && echo "true" || echo "false") # Constants @@ -28,6 +29,7 @@ readonly PROTECTED_SW_DOMAINS=( "photopea.com" "pixlr.com" ) +readonly FINDER_METADATA_SENTINEL="FINDER_METADATA" # Default whitelist patterns (preselected, user can disable) declare -a DEFAULT_WHITELIST_PATTERNS=( "$HOME/Library/Caches/ms-playwright*" @@ -36,6 +38,7 @@ declare -a DEFAULT_WHITELIST_PATTERNS=( "$HOME/.ollama/models/*" "$HOME/Library/Caches/com.nssurge.surge-mac/*" "$HOME/Library/Application Support/com.nssurge.surge-mac/*" + "$FINDER_METADATA_SENTINEL" ) declare -a WHITELIST_PATTERNS=() WHITELIST_WARNINGS=() @@ -89,6 +92,15 @@ if [[ -f "$HOME/.config/mole/whitelist" ]]; then else WHITELIST_PATTERNS=("${DEFAULT_WHITELIST_PATTERNS[@]}") fi + +if [[ ${#WHITELIST_PATTERNS[@]} -gt 0 ]]; then + for entry in "${WHITELIST_PATTERNS[@]}"; do + if [[ "$entry" == "$FINDER_METADATA_SENTINEL" ]]; then + PROTECT_FINDER_METADATA=true + break + fi + done +fi total_items=0 # Tracking variables @@ -681,20 +693,26 @@ perform_cleanup() { end_section start_section "Finder metadata" - clean_ds_store_tree "$HOME" "Home directory (.DS_Store)" + if [[ "$PROTECT_FINDER_METADATA" == "true" ]]; then + note_activity + echo -e " ${GRAY}○${NC} Finder metadata protected by whitelist (Finder view settings preserved)." + echo -e " ${GRAY}○${NC} Use ${GRAY}mo clean --whitelist${NC} to allow cleaning .DS_Store files." + else + clean_ds_store_tree "$HOME" "Home directory (.DS_Store)" - if [[ -d "/Volumes" ]]; then - for volume in /Volumes/*; do - [[ -d "$volume" && -w "$volume" ]] || continue + if [[ -d "/Volumes" ]]; then + for volume in /Volumes/*; do + [[ -d "$volume" && -w "$volume" ]] || continue - local fs_type="" - fs_type=$(df -T "$volume" 2> /dev/null | tail -1 | awk '{print $2}') - case "$fs_type" in - nfs | smbfs | afpfs | cifs | webdav) continue ;; - esac + local fs_type="" + fs_type=$(df -T "$volume" 2> /dev/null | tail -1 | awk '{print $2}') + case "$fs_type" in + nfs | smbfs | afpfs | cifs | webdav) continue ;; + esac - clean_ds_store_tree "$volume" "$(basename "$volume") volume (.DS_Store)" - done + clean_ds_store_tree "$volume" "$(basename "$volume") volume (.DS_Store)" + done + fi fi end_section diff --git a/lib/whitelist_manager.sh b/lib/whitelist_manager.sh index d8227b7..3ee9b98 100755 --- a/lib/whitelist_manager.sh +++ b/lib/whitelist_manager.sh @@ -20,6 +20,7 @@ declare -a DEFAULT_WHITELIST_PATTERNS=( "$HOME/.ollama/models/*" "$HOME/Library/Caches/com.nssurge.surge-mac/*" "$HOME/Library/Application Support/com.nssurge.surge-mac/*" + "FINDER_METADATA" ) # Save whitelist patterns to config @@ -30,7 +31,7 @@ save_whitelist_patterns() { cat > "$WHITELIST_CONFIG" << 'EOF' # Mole Whitelist - Protected paths won't be deleted -# Default protections: Playwright browsers, HuggingFace models, Maven repo, Ollama models, Surge Mac +# Default protections: Playwright browsers, HuggingFace models, Maven repo, Ollama models, Surge Mac, Finder metadata # Add one pattern per line to keep items safe. EOF @@ -127,6 +128,7 @@ Podman container cache|$HOME/.local/share/containers/cache/*|container_cache Font cache|$HOME/Library/Caches/com.apple.FontRegistry/*|system_cache Spotlight metadata cache|$HOME/Library/Caches/com.apple.spotlight/*|system_cache CloudKit cache|$HOME/Library/Caches/CloudKit/*|system_cache +Finder metadata (.DS_Store)|FINDER_METADATA|system_cache EOF }