5.0 KiB
5.0 KiB
Architecture Overview
This document details the technical architecture and implementation specifics of the Modern Dotfiles Management System.
🏗️ System Structure
The core components of the dotfiles system are organized as follows:
~/.dotfiles/
├── install.sh # Main installation script
├── sync.sh # Auto-sync with git repository
├── reset.sh # Reset to vanilla state
├── machine-profiles.yaml # Machine type definitions
├── packages.yaml # Package definitions
├── bash/ # Bash-specific configurations
├── zsh/ # Zsh-specific configurations
├── shared/ # Universal configurations
├── git/ # Git configuration
├── vim/ # Vim configuration
├── lib/ # Core libraries
└── docs/ # Documentation
🤖 Machine Profiles
The system automatically detects and configures based on machine type using a scoring algorithm:
Server Profile
- Purpose: Minimal server setup
- Packages:
curl,git,vim,sshuttle,ripgrep,fd - Use Case: Production servers, minimal VMs
- Auto-detection: SSH connections, systemd services, no GUI
Development Profile
- Purpose: Full development environment
- Packages: All tools including Claude AI, Gemini CLI, Docker, modern CLI tools
- Use Case: Primary development machines
- Auto-detection: Code editors, development directories, Node.js/Python
Development Lite Profile
- Purpose: Development without heavy packages
- Packages: Development tools but no Docker/containers
- Use Case: Lightweight VMs, resource-constrained machines
- Auto-detection: Development tools present but limited resources
Personal Profile
- Purpose: Personal machines with all conveniences
- Packages: Everything including task management tools
- Use Case: Personal laptops, home workstations
- Auto-detection: Personal directories, browsers, GUI environment
Minimal Profile
- Purpose: Absolute bare bones
- Packages:
curl,git,vimonly - Use Case: Emergency access, extremely limited environments
🔧 Technical Implementation
Profile Detection Algorithm
The system uses a scoring algorithm to detect machine type:
# Server indicators (weight)
- systemd active (30 points)
- SSH connection (25 points)
- Multi-user target (20 points)
- No logged users (10 points)
# Development indicators
- Development tools present (30 points)
- Code editor available (25 points)
- Dev directories exist (20 points)
- GUI environment (15 points)
# Personal indicators
- Personal directories (20 points)
- Browser available (25 points)
- Personal home path (15 points)
Update Checking Strategy
# Fast check methods
npm outdated -g --json # No installs, just version comparison
GitHub API calls # Latest release info
Local version parsing # Current installed versions
# Selective updates
Only outdated packages # Skip up-to-date ones
Profile filtering # Server won't check Claude/Gemini
Batch operations # Update multiple efficiently
Sync Optimization
# Timing controls
24-hour auto-sync limit # Prevent excessive git operations
5-minute manual override # Allow frequent manual syncing
Background execution # Non-blocking terminal startup
# Change detection
Git fetch + compare # Check for remote changes
Local diff detection # Handle local modifications
Automatic stash/restore # Preserve local changes
🛡️ Safety Features
Backup System
- Pre-installation backup: All existing configs saved
- Timestamped backups: Never overwrites previous backups
- Symlink detection: Preserves existing dotfiles setups
- Restoration capability: Can restore original configs
Reset Capabilities
- Soft reset: Remove dotfiles, restore originals
- Hard reset: Also uninstall packages
- Nuclear reset: Complete removal
- Safety prompts: Confirmation for destructive operations
Error Handling
- Graceful failures: Continue on non-critical errors
- Detailed logging: All operations logged with timestamps
- Rollback capability: Can undo changes if needed
- Dependency checking: Verify requirements before installation
📈 Performance Characteristics
Startup Time
- Cold start: ~2 seconds (first terminal of day with sync)
- Warm start: ~0.1 seconds (subsequent terminals)
- Background sync: Non-blocking, invisible to user
Update Efficiency
- Traditional approach:
npm update -g(30-60 seconds) - Smart checking:
dotupdatecheck(2-5 seconds) - Selective updates: Only outdated packages (10-20 seconds)
Resource Usage
- Memory footprint: Minimal (shell functions only)
- Disk usage: ~50MB for full dev profile
- Network usage: Efficient API calls, cached results