#!/bin/bash # Modern Dotfiles Management System - Unified Command Interface # Usage: dot [subaction] [flags] # Source required functions DOTFILES_DIR="$HOME/.dotfiles" if [[ -f "$DOTFILES_DIR/shared/functions" ]]; then source "$DOTFILES_DIR/shared/functions" fi if [[ -f "$DOTFILES_DIR/shared/sync" ]]; then source "$DOTFILES_DIR/shared/sync" fi # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' # No Color # Function to print colored output print_color() { local color=$1 local message=$2 echo -e "${color}${message}${NC}" } # Function to show help show_help() { print_color "$CYAN" "Modern Dotfiles Management System" echo "" print_color "$YELLOW" "Usage: dot [subaction] [flags]" echo "" print_color "$BLUE" "SYNC MANAGEMENT:" echo " dot sync [--force] Sync dotfiles with remote repository" echo " dot sync status Show sync status and last update" echo " dot sync on Enable automatic syncing" echo " dot sync off Disable automatic syncing" echo "" print_color "$BLUE" "PACKAGE MANAGEMENT:" echo " dot packages [list] Show package status for current profile" echo " dot packages install Install all packages for current profile" echo " dot packages check Check package installation status" echo " dot packages update Install pending updates" echo " dot packages status Show update status" echo " dot packages check-updates Check for package updates (fast)" echo "" print_color "$BLUE" "PROFILE MANAGEMENT:" echo " dot profile [show] Show current machine profile" echo " dot profile set Switch to specified profile" echo " dot profile detect Re-detect machine type" echo "" print_color "$BLUE" "RESET OPERATIONS:" echo " dot reset Interactive reset menu" echo " dot reset --soft Remove configs, restore originals" echo " dot reset --hard Soft reset + uninstall packages" echo " dot reset --nuclear Complete removal (back to vanilla)" echo "" print_color "$BLUE" "GENERAL:" echo " dot help Show this help message" echo " dot version Show version information" echo "" print_color "$GREEN" "Examples:" echo " dot sync --force Force sync now" echo " dot profile set dev Switch to development profile" echo " dot packages update Update all packages" echo " dot reset --soft Safely reset configurations" } # Function to show version show_version() { print_color "$CYAN" "Modern Dotfiles Management System" print_color "$YELLOW" "Version: 2.0.0" print_color "$GREEN" "Repository: https://git.turnersrus.com/razzam21/dotfiles" } # Main command router main() { local action="$1" local subaction="$2" local flag="$3" case "$action" in "sync") case "$subaction" in "status") dotfiles_sync_status ;; "on") dotfiles_sync_enable ;; "off") dotfiles_sync_disable ;; "--force"|"force") dotfiles_sync_force ;; "") if [[ "$flag" == "--force" ]]; then dotfiles_sync_force else dotfiles_sync_now fi ;; *) print_color "$RED" "Error: Unknown sync subaction '$subaction'" echo "Use 'dot help' for available commands" return 1 ;; esac ;; "packages"|"pkg") case "$subaction" in "list"|"") dotfiles_packages_status ;; "install") dotfiles_install_packages ;; "check") dotfiles_check_packages ;; "update") dotfiles_update_install ;; "status") dotfiles_update_status ;; "check-updates") dotfiles_update_check ;; *) print_color "$RED" "Error: Unknown packages subaction '$subaction'" echo "Use 'dot help' for available commands" return 1 ;; esac ;; "profile") case "$subaction" in "show"|"") dotfiles_profile_status ;; "set") if [[ -z "$flag" ]]; then print_color "$RED" "Error: Profile name required" echo "Usage: dot profile set " return 1 fi dotfiles_profile_set "$flag" ;; "detect") dotfiles_profile_detect ;; *) print_color "$RED" "Error: Unknown profile subaction '$subaction'" echo "Use 'dot help' for available commands" return 1 ;; esac ;; "reset") case "$subaction" in "--soft"|"soft") "$HOME/.dotfiles/reset.sh" --soft ;; "--hard"|"hard") "$HOME/.dotfiles/reset.sh" --hard ;; "--nuclear"|"nuclear") "$HOME/.dotfiles/reset.sh" --nuclear ;; "") "$HOME/.dotfiles/reset.sh" ;; *) print_color "$RED" "Error: Unknown reset option '$subaction'" echo "Available options: --soft, --hard, --nuclear" return 1 ;; esac ;; "help"|"-h"|"--help") show_help ;; "version"|"-v"|"--version") show_version ;; "") print_color "$RED" "Error: No action specified" echo "Use 'dot help' for available commands" return 1 ;; *) print_color "$RED" "Error: Unknown action '$action'" echo "Use 'dot help' for available commands" return 1 ;; esac } # Execute main function with all arguments main "$@"