1
0
mirror of https://github.com/tw93/Mole.git synced 2026-02-04 13:16:47 +00:00

🐛 Normalize output tags

This commit is contained in:
Tw93
2025-10-05 22:16:25 +08:00
parent 79b1f53c7a
commit 3ff933f5d5
8 changed files with 154 additions and 125 deletions

View File

@@ -720,7 +720,7 @@ display_cleanup_suggestions() {
echo ""
echo " ${YELLOW}Tip:${NC} Run 'mole clean' to perform cleanup operations"
else
echo " ${GREEN}${NC} No obvious cleanup opportunities found"
echo " ${BLUE}${NC} No obvious cleanup opportunities found"
fi
echo ""
}
@@ -1592,8 +1592,6 @@ interactive_drill_down() {
# Ensure cursor is always hidden during navigation
printf "\033[?25l" >&2
# Drain any burst input (e.g. trackpad scroll converted to many arrow keys)
type drain_pending_input >/dev/null 2>&1 && drain_pending_input
# Only scan if needed (directory changed or refresh requested)
if [[ "$need_scan" == "true" ]]; then
# Generate cache key (use md5 hash of path)
@@ -1782,10 +1780,7 @@ interactive_drill_down() {
# Output everything at once (single write = no flicker)
printf "%b" "$output" >&2
# Drain any pending input to prevent escape sequence leakage
drain_pending_input 2>/dev/null || true
# Read key (suppress any escape sequences that might leak)
# Read key directly without draining (to preserve all user input)
local key
key=$(read_key 2>/dev/null || echo "OTHER")
@@ -1832,41 +1827,75 @@ interactive_drill_down() {
need_scan=true
else
# It's a file - open it for viewing
# Exit alternate screen temporarily
local file_ext="${selected_path##*.}"
local filename=$(basename "$selected_path")
local open_success=false
# For text-like files, use less or fallback to open
case "$file_ext" in
txt|log|md|json|xml|yaml|yml|conf|cfg|ini|sh|bash|zsh|py|js|ts|go|rs|c|cpp|h|java|rb|php|html|css|sql)
# Clear screen and show loading message
printf "\033[H\033[J"
echo ""
echo " ${BLUE}📄 Opening: $filename${NC}"
echo ""
# Try less first (best for text viewing)
if command -v less &>/dev/null; then
# Exit alternate screen only for less
printf "\033[?25h" # Show cursor
tput rmcup 2>/dev/null || true
# Try to open with system default viewer
local file_ext="${selected_path##*.}"
local open_success=false
# For text-like files, use less
case "$file_ext" in
txt|log|md|json|xml|yaml|yml|conf|cfg|ini|sh|bash|zsh|py|js|ts|go|rs|c|cpp|h|java|rb|php|html|css|sql)
if command -v less &>/dev/null; then
less -F "$selected_path" 2>/dev/null && open_success=true
fi
;;
*)
# For other files, try system open
if command -v open &>/dev/null; then
open "$selected_path" 2>/dev/null && open_success=true
sleep 0.5 # Give time for app to launch
fi
;;
esac
# If nothing worked, show a message
if [[ "$open_success" != "true" ]]; then
echo ""
echo " ${YELLOW}File: $selected_path${NC}"
echo " ${GRAY}Press any key to return...${NC}"
read -n 1 -s 2>/dev/null
fi
# Return to alternate screen
tput smcup 2>/dev/null || true
printf "\033[?25l" # Hide cursor
else
# Fallback to system open if less is not available
echo " ${GRAY}Launching default application...${NC}"
if command -v open &>/dev/null; then
open "$selected_path" 2>/dev/null && open_success=true
if [[ "$open_success" == "true" ]]; then
echo ""
echo " ${BLUE}${NC} File opened in external app"
sleep 0.8
fi
fi
fi
;;
*)
# For other files, use system open (keep in alternate screen)
# Show message without flashing
printf "\033[H\033[J"
echo ""
echo " ${BLUE}📦 Opening: $filename${NC}"
echo ""
echo " ${GRAY}Launching default application...${NC}"
if command -v open &>/dev/null; then
open "$selected_path" 2>/dev/null && open_success=true
# Show brief success message
if [[ "$open_success" == "true" ]]; then
echo ""
echo " ${BLUE}${NC} File opened in external app"
sleep 0.8
fi
fi
;;
esac
# If nothing worked, show error message
if [[ "$open_success" != "true" ]]; then
printf "\033[H\033[J"
echo ""
echo " ${YELLOW}⚠️ Could not open file${NC}"
echo ""
echo " ${GRAY}File: $selected_path${NC}"
echo " ${GRAY}Press any key to return...${NC}"
read -n 1 -s 2>/dev/null
fi
fi
fi
;;
@@ -1973,7 +2002,7 @@ interactive_drill_down() {
fi
if [[ "$delete_success" == "true" ]]; then
echo " ${GREEN}✓ Deleted successfully${NC}"
echo " ${BLUE}✓ Deleted successfully${NC}"
echo " ${GRAY}Freed: $human_size${NC}"
sleep 0.8

View File

@@ -63,21 +63,21 @@ start_spinner() {
local message="$1"
if [[ ! -t 1 ]]; then
echo -n " ${BLUE}🔍${NC} $message"
echo -n " ${BLUE}${NC} $message"
return
fi
echo -n " ${BLUE}🔍${NC} $message"
echo -n " ${BLUE}${NC} $message"
(
local delay=0.5
while true; do
printf "\r ${BLUE}🔍${NC} $message. "
printf "\r ${BLUE}${NC} $message. "
sleep $delay
printf "\r ${BLUE}🔍${NC} $message.. "
printf "\r ${BLUE}${NC} $message.. "
sleep $delay
printf "\r ${BLUE}🔍${NC} $message..."
printf "\r ${BLUE}${NC} $message..."
sleep $delay
printf "\r ${BLUE}🔍${NC} $message "
printf "\r ${BLUE}${NC} $message "
sleep $delay
done
) &
@@ -96,9 +96,9 @@ stop_spinner() {
kill "$SPINNER_PID" 2>/dev/null
wait "$SPINNER_PID" 2>/dev/null
SPINNER_PID=""
printf "\r ${GREEN}${NC} %s\n" "$result_message"
printf "\r ${BLUE}${NC} %s\n" "$result_message"
else
echo " ${GREEN}${NC} $result_message"
echo " ${BLUE}${NC} $result_message"
fi
}
@@ -111,7 +111,7 @@ start_section() {
end_section() {
if [[ $TRACK_SECTION -eq 1 && $SECTION_ACTIVITY -eq 0 ]]; then
echo -e " ${BLUE}${NC} Nothing to tidy"
echo -e " ${BLUE}${NC} Nothing to tidy"
fi
TRACK_SECTION=0
}
@@ -156,7 +156,7 @@ safe_clean() {
# Show progress indicator for potentially slow operations
if [[ ${#existing_paths[@]} -gt 3 ]]; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Checking $description...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Checking $description...\r"
local temp_dir=$(mktemp -d)
# Parallel processing (bash 3.2 compatible)
@@ -197,7 +197,7 @@ safe_clean() {
rm -rf "$temp_dir"
else
# Show progress for small batches too (simpler jobs)
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Checking $description...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Checking $description...\r"
for path in "${existing_paths[@]}"; do
local size_bytes=$(du -sk "$path" 2>/dev/null | awk '{print $1}' || echo "0")
@@ -235,7 +235,7 @@ safe_clean() {
if [[ "$DRY_RUN" == "true" ]]; then
echo -e " ${YELLOW}${NC} $label ${YELLOW}($size_human, dry)${NC}"
else
echo -e " ${GREEN}${NC} $label ${GREEN}($size_human)${NC}"
echo -e " ${BLUE}${NC} $label ${GREEN}($size_human)${NC}"
fi
((files_cleaned+=total_count))
((total_size_cleaned+=total_size_bytes))
@@ -442,10 +442,10 @@ perform_cleanup() {
start_section "Developer tools"
# Node.js ecosystem
if command -v npm >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning npm cache...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning npm cache...\r"
npm cache clean --force >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} npm cache cleaned"
echo -e " ${BLUE}${NC} npm cache cleaned"
note_activity
fi
@@ -455,10 +455,10 @@ perform_cleanup() {
# Python ecosystem
if command -v pip3 >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning pip cache...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning pip cache...\r"
pip3 cache purge >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} pip cache cleaned"
echo -e " ${BLUE}${NC} pip cache cleaned"
note_activity
fi
@@ -468,11 +468,11 @@ perform_cleanup() {
# Go ecosystem
if command -v go >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Go cache...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Go cache...\r"
go clean -modcache >/dev/null 2>&1 || true
go clean -cache >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} Go cache cleaned"
echo -e " ${BLUE}${NC} Go cache cleaned"
note_activity
fi
@@ -484,20 +484,20 @@ perform_cleanup() {
# Docker (only clean build cache, preserve images and volumes)
if command -v docker >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Docker build cache...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Docker build cache...\r"
docker builder prune -af >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} Docker build cache cleaned"
echo -e " ${BLUE}${NC} Docker build cache cleaned"
note_activity
fi
# Container tools
safe_clean ~/.kube/cache/* "Kubernetes cache"
if command -v podman >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Podman build cache...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Podman build cache...\r"
podman system prune -f >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} Podman build cache cleaned"
echo -e " ${BLUE}${NC} Podman build cache cleaned"
note_activity
fi
safe_clean ~/.local/share/containers/storage/tmp/* "Container storage temp"
@@ -512,10 +512,10 @@ perform_cleanup() {
safe_clean /opt/homebrew/var/homebrew/locks/* "Homebrew lock files (M series)"
safe_clean /usr/local/var/homebrew/locks/* "Homebrew lock files (Intel)"
if command -v brew >/dev/null 2>&1; then
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Homebrew...\r"
[[ -t 1 ]] && echo -ne " ${BLUE}${NC} Cleaning Homebrew...\r"
brew cleanup >/dev/null 2>&1 || true
[[ -t 1 ]] && echo -ne "\r\033[K"
echo -e " ${GREEN}${NC} Homebrew cache cleaned"
echo -e " ${BLUE}${NC} Homebrew cache cleaned"
note_activity
fi
@@ -774,7 +774,7 @@ perform_cleanup() {
start_section "Orphaned app caches"
# Build a list of installed application bundle identifiers
echo -n " ${BLUE}🔍${NC} Scanning installed applications..."
echo -n " ${BLUE}${NC} Scanning installed applications..."
local installed_bundles=$(mktemp)
# Scan both system and user application directories
@@ -785,12 +785,12 @@ perform_cleanup() {
fi
done
local app_count=$(wc -l < "$installed_bundles" | tr -d ' ')
echo " ${GREEN}${NC} Found $app_count apps"
echo " ${BLUE}${NC} Found $app_count apps"
local cache_count=0
# Check for orphaned caches (safe to remove - caches are regenerable)
echo -n " ${BLUE}🔍${NC} Scanning orphaned cache directories..."
echo -n " ${BLUE}${NC} Scanning orphaned cache directories..."
if ls ~/Library/Caches/com.* >/dev/null 2>&1; then
for cache_dir in ~/Library/Caches/com.*; do
[[ -d "$cache_dir" ]] || continue
@@ -805,7 +805,7 @@ perform_cleanup() {
fi
done
fi
echo " ${GREEN}${NC} Complete ($cache_count removed)"
echo " ${BLUE}${NC} Complete ($cache_count removed)"
# Clean up temp file
rm -f "$installed_bundles"

View File

@@ -404,11 +404,11 @@ uninstall_applications() {
# Show what will be removed
echo -e " ${YELLOW}Files to be removed:${NC}"
echo -e " ${GREEN}${NC} Application: $(echo "$app_path" | sed "s|$HOME|~|")"
echo -e " ${BLUE}${NC} Application: $(echo "$app_path" | sed "s|$HOME|~|")"
# Show user-level files
while IFS= read -r file; do
[[ -n "$file" && -e "$file" ]] && echo -e " ${GREEN}${NC} $(echo "$file" | sed "s|$HOME|~|")"
[[ -n "$file" && -e "$file" ]] && echo -e " ${BLUE}${NC} $(echo "$file" | sed "s|$HOME|~|")"
done <<< "$related_files"
# Show system-level files
@@ -435,7 +435,7 @@ uninstall_applications() {
if [[ $REPLY =~ ^[Yy]$ ]]; then
# Remove the application
if rm -rf "$app_path" 2>/dev/null; then
echo -e " ${GREEN}${NC} Removed application"
echo -e " ${BLUE}${NC} Removed application"
else
log_error "Failed to remove $app_path"
continue
@@ -445,7 +445,7 @@ uninstall_applications() {
while IFS= read -r file; do
if [[ -n "$file" && -e "$file" ]]; then
if rm -rf "$file" 2>/dev/null; then
echo -e " ${GREEN}${NC} Removed $(echo "$file" | sed "s|$HOME|~|" | xargs basename)"
echo -e " ${BLUE}${NC} Removed $(echo "$file" | sed "s|$HOME|~|" | xargs basename)"
fi
fi
done <<< "$related_files"
@@ -456,7 +456,7 @@ uninstall_applications() {
while IFS= read -r file; do
if [[ -n "$file" && -e "$file" ]]; then
if sudo rm -rf "$file" 2>/dev/null; then
echo -e " ${GREEN}${NC} Removed [System] $(basename "$file")"
echo -e " ${BLUE}${NC} Removed [System] $(basename "$file")"
else
log_warning "Failed to remove system file: $file"
fi

View File

@@ -85,7 +85,7 @@ resolve_source_dir() {
# Expand tmp now so trap doesn't depend on local scope
trap "rm -rf '$tmp'" EXIT
echo "Fetching Mole source..."
echo -e "${BLUE}${NC} Fetching Mole source..."
if command -v curl >/dev/null 2>&1; then
# Download main branch tarball
if curl -fsSL -o "$tmp/mole.tar.gz" "https://github.com/tw93/mole/archive/refs/heads/main.tar.gz"; then
@@ -448,17 +448,17 @@ perform_update() {
update_via_homebrew "$VERSION"
else
# Fallback: inline implementation
echo -e "${BLUE}${NC} Updating Homebrew..."
echo -e "${BLUE}${NC} Updating Homebrew..."
brew update 2>&1 | grep -Ev "^(==>|Already up-to-date)" || true
echo -e "${BLUE}${NC} Upgrading Mole..."
echo -e "${BLUE}${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
if echo "$upgrade_output" | grep -q "already installed"; then
local current_version
current_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Already on latest version (${current_version:-$VERSION})"
echo -e "${BLUE}${NC} Already on latest version (${current_version:-$VERSION})"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Homebrew upgrade failed"
echo "$upgrade_output" | grep "Error:" >&2
@@ -467,7 +467,7 @@ perform_update() {
echo "$upgrade_output" | grep -Ev "^(==>|Updating Homebrew|Warning:)" || true
local new_version
new_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Updated to latest version (${new_version:-$VERSION})"
echo -e "${BLUE}${NC} Updated to latest version (${new_version:-$VERSION})"
fi
rm -f "$HOME/.cache/mole/version_check" "$HOME/.cache/mole/update_message"
@@ -494,7 +494,7 @@ perform_update() {
fi
if [[ "$installed_version" == "$target_version" ]]; then
echo -e "${GREEN}${NC} Already on latest version ($installed_version)"
echo -e "${BLUE}${NC} Already on latest version ($installed_version)"
exit 0
fi
@@ -514,7 +514,7 @@ perform_update() {
updated_version="$target_version"
fi
echo -e "${GREEN}${NC} Updated to latest version ($updated_version)"
echo -e "${BLUE}${NC} Updated to latest version ($updated_version)"
}
# Run requested action

View File

@@ -185,14 +185,14 @@ batch_uninstall_applications() {
if [[ "$needs_sudo" == "true" ]]; then
if sudo rm -rf "$app_path" 2>/dev/null; then
removal_success=true
echo -e " ${GREEN}${NC} Removed application"
echo -e " ${BLUE}${NC} Removed application"
else
error_msg="Failed to remove with sudo (check permissions or SIP protection)"
fi
else
if rm -rf "$app_path" 2>/dev/null; then
removal_success=true
echo -e " ${GREEN}${NC} Removed application"
echo -e " ${BLUE}${NC} Removed application"
else
error_msg="Failed to remove (check if app is running or protected)"
fi
@@ -211,7 +211,7 @@ batch_uninstall_applications() {
done <<< "$related_files"
if [[ $files_removed -gt 0 ]]; then
echo -e " ${GREEN}${NC} Cleaned $files_removed related files"
echo -e " ${BLUE}${NC} Cleaned $files_removed related files"
fi
((total_size_freed += total_kb))

View File

@@ -36,7 +36,7 @@ log_info() {
log_success() {
rotate_log
echo -e " ${GREEN}${NC} $1"
echo -e " ${BLUE}${NC} $1"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] SUCCESS: $1" >> "$LOG_FILE" 2>/dev/null || true
}
@@ -48,7 +48,7 @@ log_warning() {
log_error() {
rotate_log
echo -e "${RED}$1${NC}" >&2
echo -e "${RED}$1${NC}" >&2
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" >> "$LOG_FILE" 2>/dev/null || true
}
@@ -264,11 +264,11 @@ request_sudo() {
update_via_homebrew() {
local version="${1:-unknown}"
echo -e "${BLUE}${NC} Updating Homebrew..."
echo -e "${BLUE}${NC} Updating Homebrew..."
# Filter out common noise but show important info
brew update 2>&1 | grep -Ev "^(==>|Already up-to-date)" || true
echo -e "${BLUE}${NC} Upgrading Mole..."
echo -e "${BLUE}${NC} Upgrading Mole..."
local upgrade_output
upgrade_output=$(brew upgrade mole 2>&1) || true
@@ -276,7 +276,7 @@ update_via_homebrew() {
# Get current version
local current_version
current_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Already on latest version (${current_version:-$version})"
echo -e "${BLUE}${NC} Already on latest version (${current_version:-$version})"
elif echo "$upgrade_output" | grep -q "Error:"; then
log_error "Homebrew upgrade failed"
echo "$upgrade_output" | grep "Error:" >&2
@@ -287,7 +287,7 @@ update_via_homebrew() {
# Get new version
local new_version
new_version=$(brew list --versions mole 2>/dev/null | awk '{print $2}')
echo -e "${GREEN}${NC} Updated to latest version (${new_version:-$version})"
echo -e "${BLUE}${NC} Updated to latest version (${new_version:-$version})"
fi
# Clear version check cache

View File

@@ -42,7 +42,7 @@ collect_files_to_be_cleaned() {
local clean_sh="$SCRIPT_DIR/../bin/clean.sh"
local -a items=()
echo -e "${BLUE}🔍${NC} Scanning cache files..."
echo -e "${BLUE}${NC} Scanning cache files..."
echo ""
# Run clean.sh in dry-run mode
@@ -298,7 +298,7 @@ manage_whitelist() {
fi
if [[ ${#all_items[@]} -eq 0 ]]; then
echo -e "${GREEN}${NC} No cache files found - system is clean!"
echo -e "${BLUE}${NC} No cache files found - system is clean!"
echo ""
echo "Press any key to exit..."
read -n 1 -s
@@ -308,7 +308,7 @@ manage_whitelist() {
# Update global array with all items
AVAILABLE_CACHE_ITEMS=("${all_items[@]}")
echo -e "${GREEN}${NC} Found ${#AVAILABLE_CACHE_ITEMS[@]} items"
echo -e "${BLUE}${NC} Found ${#AVAILABLE_CACHE_ITEMS[@]} items"
echo ""
local -a menu_options=()
@@ -432,7 +432,7 @@ EOF
fi
echo ""
echo -e "${GREEN}${NC} Protected $total_count items${summary}"
echo -e "${BLUE}${NC} Protected $total_count items${summary}"
echo -e "${GRAY}Config: ${WHITELIST_CONFIG}${NC}"
}

22
mole
View File

@@ -22,7 +22,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/common.sh"
# Version info
VERSION="1.6.0"
VERSION="1.6.1"
MOLE_TAGLINE="can dig deep to clean your Mac."
# Check for updates (non-blocking, cached)
@@ -148,7 +148,7 @@ update_mole() {
fi
# Download and run installer with progress
echo -e "${BLUE}${NC} Downloading latest version..."
echo -e "${BLUE}${NC} Downloading latest version..."
local installer_url="https://raw.githubusercontent.com/tw93/mole/main/install.sh"
local tmp_installer
@@ -181,7 +181,7 @@ update_mole() {
local install_dir
install_dir="$(cd "$(dirname "$mole_path")" && pwd)"
echo -e "${BLUE}${NC} Installing update..."
echo -e "${BLUE}${NC} Installing update..."
# Run installer with visible output (but capture for error handling)
local install_output
@@ -189,14 +189,14 @@ update_mole() {
echo "$install_output" | grep -Ev "^$" || true
local new_version
new_version=$("$mole_path" --version 2>/dev/null | awk 'NF {print $NF}' || echo "")
echo -e "${GREEN}✓${NC} Updated to latest version (${new_version:-unknown})"
echo -e "${BLUE}✓${NC} Updated to latest version (${new_version:-unknown})"
else
# Retry without --update flag
if install_output=$("$tmp_installer" --prefix "$install_dir" --config "$HOME/.config/mole" 2>&1); then
echo "$install_output" | grep -Ev "^$" || true
local new_version
new_version=$("$mole_path" --version 2>/dev/null | awk 'NF {print $NF}' || echo "")
echo -e "${GREEN}✓${NC} Updated to latest version (${new_version:-unknown})"
echo -e "${BLUE}✓${NC} Updated to latest version (${new_version:-unknown})"
else
rm -f "$tmp_installer"
log_error "Update failed"
@@ -259,28 +259,28 @@ remove_mole() {
echo ""
if [[ "$is_homebrew" == "true" ]]; then
echo -e " ${GREEN}✓${NC} Mole (via Homebrew)"
echo -e " ${BLUE}✓${NC} Mole (via Homebrew)"
fi
if [[ ${#manual_installs[@]} -gt 0 ]]; then
for install in "${manual_installs[@]}"; do
echo -e " ${GREEN}✓${NC} $install"
echo -e " ${BLUE}✓${NC} $install"
local install_dir="$(dirname "$install")"
local install_root="$(dirname "$install_dir")"
if [[ -d "$install_root/lib" ]]; then
echo -e " ${GREEN}✓${NC} $install_root/lib/"
echo -e " ${BLUE}✓${NC} $install_root/lib/"
fi
done
fi
if [[ ${#alias_installs[@]} -gt 0 ]]; then
for alias in "${alias_installs[@]}"; do
echo -e " ${GREEN}✓${NC} $alias"
echo -e " ${BLUE}✓${NC} $alias"
done
fi
echo -e " ${GREEN}✓${NC} ~/.config/mole/ (configuration)"
echo -e " ${GREEN}✓${NC} ~/.cache/mole/ (cache)"
echo -e " ${BLUE}✓${NC} ~/.config/mole/ (configuration)"
echo -e " ${BLUE}✓${NC} ~/.cache/mole/ (cache)"
if [[ "$is_homebrew" == "false" && ${#manual_installs[@]} -eq 0 && ${#alias_installs[@]} -eq 0 ]]; then
echo ""