# ░█▀▀░█░█░█▀█░█▀▀░▀█▀░▀█▀░█▀█░█▀█░█▀▀ # ░█▀▀░█░█░█░█░█░░░░█░░░█░░█░█░█░█░▀▀█ # ░▀░░░▀▀▀░▀░▀░▀▀▀░░▀░░▀▀▀░▀▀▀░▀░▀░▀▀▀ # Sophisticated shell functions following durability principles # ═══════════════════════════════════════════════════════════════════════════════ # I. SYSTEM MAINTENANCE & UPDATES # ═══════════════════════════════════════════════════════════════════════════════ # Enhanced system update with error handling and rollback capability sysupdate() { local start_time=$(date +%s) local backup_dir="$HOME/.system-snapshots/$(date +%Y%m%d_%H%M%S)" echo "🔧 Starting comprehensive system update at $(date)" # Ensure sudo credentials and create backup point if ! sudo -vn 2>/dev/null; then echo "🔒 sudo authentication required..." sudo -v || return 1 fi mkdir -p "$backup_dir" # Create restore point echo "💾 Creating system snapshot..." brew list > "$backup_dir/brew_before.txt" 2>/dev/null || true cp "$HOME/.zshrc" "$backup_dir/" 2>/dev/null || true # macOS updates with error handling echo "🍎 Updating macOS Software..." if ! sudo softwareupdate -i -a; then echo "⚠️ macOS updates had issues - check manually" fi # Homebrew updates with verification echo "🍺 Updating Homebrew packages..." if ! (brew update && brew upgrade); then echo "❌ Homebrew update failed. Restore point: $backup_dir" return 1 fi # Verify critical tools still work local critical_tools=(git zsh python3 brew) for tool in "${critical_tools[@]}"; do if ! command -v "$tool" >/dev/null; then echo "❌ Critical tool $tool missing after update!" echo "🔄 Restore point available: $backup_dir" return 1 fi done # Safe cleanup brew cleanup --prune=all brew autoremove # Update fzf if present echo "🔄 Refreshing development tools..." if [[ -d ~/.fzf ]]; then (cd ~/.fzf && git pull && ./install --all) >/dev/null 2>&1 || true fi # Check for broken symlinks echo "🧹 Checking for broken symlinks..." local broken_links=$(find "/usr/local/bin" "$HOME/bin" "$HOME/.local/bin" -xtype l 2>/dev/null) [[ -n "$broken_links" ]] && echo "🔗 Broken symlinks found:\n$broken_links" # Moon phase logging (with API key check and graceful failure) echo "🌓 Celestial context:" if [[ -n "$MOON_API_KEY" ]] && command -v curl >/dev/null && command -v jq >/dev/null; then local moon_json=$(curl -s "https://api.ipgeolocation.io/astronomy?apiKey=$MOON_API_KEY" 2>/dev/null) if [[ $? -eq 0 ]] && [[ -n "$moon_json" ]]; then local moon_phase=$(echo "$moon_json" | jq -r '.moon_phase // "Unknown"') local illum=$(echo "$moon_json" | jq -r '.moon_illumination_percentage // "Unknown"') echo "🌙 $moon_phase (${illum}%)" else echo "🌙 Moon phase unavailable" fi else echo "🌙 Moon phase tracking disabled (missing API key or tools)" fi # Dotfiles management (corrected path) if [[ -d "$DOTFILES_PATH" ]]; then echo "📝 Syncing dotfiles..." ( cd "$DOTFILES_PATH" || return git add . git commit -m "🔧 Auto-commit from sysupdate on $(date '+%Y-%m-%d %H:%M')" 2>/dev/null || true git push 2>/dev/null || true brew bundle dump --force --file="$DOTFILES_PATH/Brewfile" 2>/dev/null || true ) fi # System information summary echo "📊 System Status:" echo "💻 $(uname -a)" echo "📅 macOS: $(sw_vers -productVersion)" echo "🧠 Memory: $(top -l 1 -s 0 | grep PhysMem | awk '{print $2 " used, " $6 " available"}')" echo "💿 Disk: $(df -h / | tail -1 | awk '{print $3 " used, " $4 " available (" $5 " full)"}')" # Post-update hooks if [[ -x "$HOME/.zsh/hooks/post-update" ]]; then echo "🪝 Running post-update hooks..." "$HOME/.zsh/hooks/post-update" fi local duration=$(($(date +%s) - start_time)) echo "🕓 Update completed in ${duration}s" # Success notification if command -v osascript >/dev/null; then osascript -e 'display notification "All systems updated successfully! 🚀" with title "System Maintenance Complete"' fi # Cleanup old snapshots (keep last 5) find "$HOME/.system-snapshots" -maxdepth 1 -type d -name "20*" | sort -r | tail -n +6 | xargs rm -rf 2>/dev/null || true } # Quiet version for automated updates quietupdate() { sysupdate >/dev/null 2>&1 echo "Silent update completed at $(date)" } # ═══════════════════════════════════════════════════════════════════════════════ # II. COMPREHENSIVE SYSTEM CLEANING # ═══════════════════════════════════════════════════════════════════════════════ deep_clean() { echo "🧹 Initiating deep system cleaning..." local cleaned=() # DS_Store cleanup local ds_count=$(find "$HOME" -name ".DS_Store" -delete -print 2>/dev/null | wc -l) [[ $ds_count -gt 0 ]] && cleaned+=("$ds_count .DS_Store files") # Broken symlinks local broken_symlinks=$(find "$HOME/bin" "$HOME/.local/bin" -xtype l 2>/dev/null) if [[ -n "$broken_symlinks" ]]; then echo "$broken_symlinks" | xargs rm -f local broken_count=$(echo "$broken_symlinks" | wc -l) cleaned+=("$broken_count broken symlinks") fi # Cache cleanup local cache_dirs=( "$HOME/Library/Caches/pip" "$HOME/.npm/_cacache" "$HOME/.cache" "$HOME/Library/Caches/Homebrew" ) for cache_dir in "${cache_dirs[@]}"; do if [[ -d "$cache_dir" ]]; then local cache_size=$(du -sh "$cache_dir" 2>/dev/null | cut -f1) rm -rf "$cache_dir"/* 2>/dev/null || true [[ -n "$cache_size" ]] && cleaned+=("$cache_size from $(basename "$cache_dir") cache") fi done # Homebrew cleanup if command -v brew >/dev/null; then local brew_output=$(brew cleanup --prune=all 2>&1) [[ "$brew_output" != *"Nothing to do"* ]] && cleaned+=("Homebrew packages") fi # Launch Services cleanup echo "🔄 Rebuilding Launch Services database..." /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user 2>/dev/null || true cleaned+=("Launch Services database") # Trash cleanup (with confirmation) if [[ -n "$(ls -A ~/.Trash 2>/dev/null)" ]]; then echo -n "🗑️ Empty Trash? (y/N): " read -r response if [[ "$response" =~ ^[Yy]$ ]]; then rm -rf ~/.Trash/* 2>/dev/null || true cleaned+=("Trash contents") fi fi # Summary if [[ ${#cleaned[@]} -gt 0 ]]; then echo "✅ Cleaned: ${(j:, :)cleaned}" else echo "✨ System already clean!" fi # Final system state echo "💿 Free space: $(df -h / | tail -1 | awk '{print $4}')" } # ═══════════════════════════════════════════════════════════════════════════════ # III. VAULT & OBSIDIAN INTEGRATION # ═══════════════════════════════════════════════════════════════════════════════ # Create or open today's daily note today() { if [[ ! -d "$VAULT_PATH" ]]; then echo "❌ Vault not found at: $VAULT_PATH" return 1 fi local daily_path="$VAULT_PATH/01. Daily" local today_file="$daily_path/$(date +%Y-%m-%d).md" local template_file="$VAULT_PATH/98. Templates/Daily Note Template.md" # Create daily note from template if it doesn't exist if [[ ! -f "$today_file" ]]; then if [[ -f "$template_file" ]]; then cp "$template_file" "$today_file" echo "📝 Created today's daily note" else echo "⚠️ Template not found, creating basic daily note" echo "# $(date +%Y-%m-%d)\n\n## Morning\n\n## Evening\n\n" > "$today_file" fi fi # Open in Obsidian if command -v open >/dev/null; then open -a Obsidian "$today_file" else echo "📍 Daily note: $today_file" fi } # Quick vault search with fzf vf() { if [[ ! -d "$VAULT_PATH" ]]; then echo "❌ Vault not found" return 1 fi if ! command -v fzf >/dev/null; then echo "❌ fzf not available" return 1 fi local file file=$(find "$VAULT_PATH" -name "*.md" -not -path "*/.*" | \ sed "s|$VAULT_PATH/||" | \ fzf --preview "head -20 '$VAULT_PATH/{}'" \ --preview-window=right:60% \ --header="Select vault file to open") if [[ -n "$file" ]]; then open -a Obsidian "$VAULT_PATH/$file" fi } # Weekly review creation weekly() { local week_num=$(date +%U) local year=$(date +%Y) local weekly_file="$VAULT_PATH/02. Reviews & Planning/${year}-W${week_num}.md" local template_file="$VAULT_PATH/98. Templates/Weekly_Review_Template.md" if [[ ! -f "$weekly_file" ]] && [[ -f "$template_file" ]]; then cp "$template_file" "$weekly_file" echo "📅 Created weekly review for week $week_num" fi open -a Obsidian "$weekly_file" 2>/dev/null || echo "📍 Weekly review: $weekly_file" } # ═══════════════════════════════════════════════════════════════════════════════ # IV. CHAMBER & WORKFLOW INTEGRATION # ═══════════════════════════════════════════════════════════════════════════════ # Chamber mode switching chamber() { local mode="${1:-unified}" local mode_file="$CHAMBER_PATH/docs/chamber/workflow/MODE-${mode^^}.md" if [[ -f "$mode_file" ]]; then open "$mode_file" 2>/dev/null || echo "📍 Chamber mode: $mode_file" cd "$CHAMBER_PATH" 2>/dev/null || true export CURRENT_CONTEXT="chamber" else echo "❌ Chamber mode '$mode' not found" echo "Available modes:" ls "$CHAMBER_PATH/docs/chamber/workflow/MODE-"*.md 2>/dev/null | \ sed 's/.*MODE-\(.*\)\.md/\1/' | tr '[:upper:]' '[:lower:]' || echo "None found" fi } # ═══════════════════════════════════════════════════════════════════════════════ # V. UTILITY FUNCTIONS # ═══════════════════════════════════════════════════════════════════════════════ # Enhanced weather function wttr() { local location=${1:-} local format=${2:-"?n"} # Default to narrow format if command -v curl >/dev/null; then curl -s "wttr.in/${location}${format}" else echo "❌ curl not available for weather lookup" fi } # PDF compression with quality options pdfcompress() { local input_file="$1" local quality="${2:-screen}" # screen, ebook, printer, prepress if [[ ! -f "$input_file" ]]; then echo "❌ File not found: $input_file" return 1 fi if ! command -v gs >/dev/null; then echo "❌ Ghostscript not found. Install with: brew install ghostscript" return 1 fi local output_file="${input_file%.*}.compressed.pdf" gs -q -dNOPAUSE -dBATCH -dSAFER \ -sDEVICE=pdfwrite \ -dCompatibilityLevel=1.4 \ -dPDFSETTINGS=/"$quality" \ -dEmbedAllFonts=true \ -dSubsetFonts=true \ -sOutputFile="$output_file" \ "$input_file" if [[ -f "$output_file" ]]; then local original_size=$(du -h "$input_file" | cut -f1) local compressed_size=$(du -h "$output_file" | cut -f1) echo "✅ Compressed: $original_size → $compressed_size" echo "📍 Output: $output_file" else echo "❌ Compression failed" return 1 fi } # Context-aware directory change with hooks smart_cd() { cd "$@" && detect_context # Auto-activate virtual environments if [[ -f "venv/bin/activate" ]]; then echo "🐍 Virtual environment detected" fi # Show git status in git repos if [[ -d ".git" ]] && command -v git >/dev/null; then echo "📊 $(git branch --show-current) | $(git status --porcelain | wc -l | tr -d ' ') changes" fi } # Override cd with smart_cd alias cd='smart_cd' # Add context detection to prompt changes chpwd_functions+=(detect_context)