feat: implement unified dot command interface
Add modern `dot <action> [subaction] [flags]` command structure to replace fragmented legacy commands. Provides intuitive, self-documenting CLI with comprehensive help system and error handling. New commands: - dot sync [status|on|off|--force] - dot packages [list|install|check|update|status|check-updates] - dot profile [show|set <name>|detect] - dot reset [--soft|--hard|--nuclear] - dot help, dot version Features: - Colored output with clear error messages - Auto-sources required functions - Short aliases supported (e.g. 'pkg' for 'packages') - Removes all legacy dotcommand aliases for clean codebase 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -61,33 +61,8 @@ alias myip='curl ifconfig.me'
|
|||||||
alias path='echo $PATH | tr ":" "\n"'
|
alias path='echo $PATH | tr ":" "\n"'
|
||||||
alias reload='exec $SHELL'
|
alias reload='exec $SHELL'
|
||||||
|
|
||||||
# Dotfiles sync aliases
|
# Modern Dotfiles Management - Unified Command Interface
|
||||||
alias dotsync='dotfiles_sync_now'
|
alias dot='$HOME/.dotfiles/shared/dot-command'
|
||||||
alias dotsyncforce='dotfiles_sync_force'
|
|
||||||
alias dotstatus='dotfiles_sync_status'
|
|
||||||
alias dotson='dotfiles_sync_enable'
|
|
||||||
alias dotsoff='dotfiles_sync_disable'
|
|
||||||
|
|
||||||
# Package management aliases
|
|
||||||
alias dotpkgs='dotfiles_packages_status'
|
|
||||||
alias dotinstall='dotfiles_install_packages'
|
|
||||||
alias dotcheck='dotfiles_check_packages'
|
|
||||||
|
|
||||||
# Profile management aliases
|
|
||||||
alias dotprofile='dotfiles_profile_status'
|
|
||||||
alias dotprofileset='dotfiles_profile_set'
|
|
||||||
alias dotprofiledetect='dotfiles_profile_detect'
|
|
||||||
|
|
||||||
# Reset aliases
|
|
||||||
alias dotreset='$HOME/.dotfiles/reset.sh'
|
|
||||||
alias dotresetsoft='$HOME/.dotfiles/reset.sh --soft'
|
|
||||||
alias dotresethard='$HOME/.dotfiles/reset.sh --hard'
|
|
||||||
alias dotresetnuke='$HOME/.dotfiles/reset.sh --nuclear'
|
|
||||||
|
|
||||||
# Update aliases
|
|
||||||
alias dotupdatecheck='dotfiles_update_check'
|
|
||||||
alias dotupdatestatus='dotfiles_update_status'
|
|
||||||
alias dotupdate='dotfiles_update_install'
|
|
||||||
|
|
||||||
# Task Master aliases
|
# Task Master aliases
|
||||||
alias tm='task-master'
|
alias tm='task-master'
|
||||||
|
|||||||
204
shared/dot-command
Executable file
204
shared/dot-command
Executable file
@@ -0,0 +1,204 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Modern Dotfiles Management System - Unified Command Interface
|
||||||
|
# Usage: dot <action> [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 <action> [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 <name> 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 <profile_name>"
|
||||||
|
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 "$@"
|
||||||
Reference in New Issue
Block a user