-
Notifications
You must be signed in to change notification settings - Fork 0
Features
DFBU provides comprehensive dotfiles and configuration backup capabilities with emphasis on safety, flexibility, and user experience.
Creates readable directory structures that mirror source file organization:
Characteristics:
- Preserves original directory structure
- Files remain in plain, readable format
- Easy browsing and manual file retrieval
- Ideal for version control integration
- No decompression needed for restoration
Output Structure:
~/backups/mirror/hostname/
├── bash/
│ ├── .bashrc
│ └── .bash_aliases
├── vim/
│ └── .vimrc
└── config/
├── alacritty/
│ └── alacritty.yml
└── nvim/
└── init.vim
Use Cases:
- Quick file inspection without extraction
- Git repository integration for dotfiles
- Selective file restoration
- Human-readable backup verification
Archive Backup
Generates compressed .tar.gz archives for space-efficient storage:
Characteristics:
- Significant space savings (typically 60-80% compression)
- Single-file backup packages
- Configurable compression level (1-9)
- Timestamped archive naming
- Automatic rotation with configurable retention
Output Structure:
~/backups/archives/hostname/
├── backup-20260207-083015.tar.gz
├── backup-20260206-210342.tar.gz
└── backup-20260205-143021.tar.gz
Configuration Options:
- Compression Level: 1 (fastest) to 9 (maximum compression)
- Max Archives: Automatic rotation when limit exceeded
- Custom Naming: Optional custom archive prefixes
Use Cases:
- Long-term backup storage
- Network transfer (smaller file sizes)
- Disaster recovery archives
- Periodic snapshots with rotation
Execute both mirror and archive backups simultaneously:
Benefits:
- Mirror: Quick access and selective restore
- Archive: Compact long-term storage
- Redundancy: Two backup formats for safety
- Flexibility: Choose restoration method per situation
DFBU avoids redundant file copies when unchanged:
Detection Methods:
- Size Comparison: Quick initial check
- Modification Time: Timestamp verification
- Metadata Matching: Comprehensive comparison
Benefits:
- Faster backup completion
- Reduced disk I/O
- Lower disk wear
- Detailed skip logging
Logging:
- Individual file skip tracking (v1.2.0+)
- Verbose mode shows full paths
- Skip summary in operation statistics
Real-time progress display during operations:
Progress Information:
- Percentage completion (0-100%)
- Current file being processed
- Files processed vs. total count
- Individual file status (copied/skipped/failed)
UI Elements:
- Progress bar with percentage
- Status text with current operation
- Log pane with detailed file-by-file output
- Statistics panel (files processed, skipped, total size)
Pre-backup size analysis with configurable warnings (v1.0.0+):
Warning Thresholds:
- Warning Level: 10 MB (default) - Yellow indicator
- Alert Level: 100 MB (default) - Orange indicator
- Critical Level: 1 GB (default) - Red indicator
Size Warning Dialog:
- Lists large files exceeding thresholds
- Shows file size and severity level
- Provides Continue/Abort options
- Configurable threshold values in settings
.dfbuignore Support:
- Gitignore-style exclusion patterns
- Exclude cache directories, build artifacts, logs
- Default patterns for common exclusions
- Custom pattern additions
Example .dfbuignore:
# Cache directories
__pycache__/
*.pyc
.cache/
**/cache/
# Build artifacts
*.o
*.so
build/
dist/
# Logs
*.log
logs/
Automatic safety backups before restoration (v0.6.0+):
Behavior:
- Creates timestamped backup of existing files
- Only backs up files that will be overwritten
- Stores in dedicated restore-backup directory
- Generates TOML manifest documenting backup
Backup Location:
- Default:
~/.local/share/dfbu/restore-backups/ - Configurable via
settings.yaml
Manifest Format (TOML):
[metadata]
timestamp = "2026-02-07T08:30:15"
source = "restore operation"
files_backed_up = 5
[[files]]
original_path = "/home/user/.bashrc"
backup_path = "restore-backup-20260207-083015/.bashrc"
size = 4096Retention Policy:
- Configurable maximum backups
- Automatic cleanup of old backups
- Sorted by timestamp (newest retained)
Post-backup verification for data integrity (v0.8.0+):
Verification Methods:
- Existence Check: Confirms files copied to destination
- Size Verification: Compares source and backup file sizes
- Hash Verification: Optional SHA-256 hash comparison
Configuration Options:
- Verify After Backup: Enable/disable automatic verification
- Hash Verification: Enable SHA-256 hash checking
- Verification Threshold: File size threshold for hash verification
Verification Report:
Verification Results
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ All files exist in backup
✓ All file sizes match
✓ Hash verification: 42/42 files verified
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Status: PASSED
Failure Handling:
- Detailed error reporting for failed verifications
- Option to retry or abort operation
- Logged failures for investigation
Comprehensive error handling with recovery options (v0.9.0+):
Error Categories:
- PERMISSION: Access denied errors
- NOT_FOUND: Missing source files/directories
- DISK_FULL: Insufficient storage space
- NETWORK: Connection issues (future remote backups)
- UNKNOWN: Unexpected errors
Recovery Dialog:
- User-friendly error explanations
- Recovery suggestions and remediation steps
- Actions: Retry, Skip, Abort
- Automatic retry for transient failures
Retry Logic:
- Configurable retry attempts
- Exponential backoff for network errors
- Skip option for non-critical failures
Save and switch between backup configurations (v1.1.0+):
Profile Components:
- Dotfile exclusion lists
- Option overrides (compression, verification, etc.)
- Named profiles for different scenarios
- Active profile persistence
Use Cases:
- Work Profile: Work-related configs only
- Personal Profile: Personal dotfiles and settings
- Minimal Profile: Essential files only
- Full Profile: Complete system backup
Profile Dialog:
- Create new profiles
- Edit existing profiles
- Delete unused profiles
- Set active profile
Storage:
- Profiles saved in
profiles.yaml - Per-profile option overrides
- Global settings as defaults
Organize dotfiles with flexible tagging:
Tag System:
- Comma-separated tags in dotfile definitions
- Filter by single or multiple tags
- Category-based organization
- Custom tag creation
Common Tags:
-
shell: Shell configurations -
editor: Text editor configs -
terminal: Terminal emulator settings -
dev: Development tool configs -
gui: GUI application configs
Tag Filtering:
- Filter input in Backup tab
- Search by application name, tags, or path
- Real-time filter updates
- Clear filter button
Temporarily exclude dotfiles from operations:
Exclusion Model:
- All dotfiles included by default
- Explicit exclusion via checkbox
- Session-based persistence
- Independent of dotfile library
Exclusion Persistence:
- Saved in
session.yaml - Survives application restarts
- Per-session state management
- Reset exclusions option
Use Cases:
- Exclude large directories temporarily
- Skip problematic files during testing
- Selective backups for specific purposes
- Temporary workflow adjustments
Detailed operation logs with configurable verbosity (v1.2.0+):
Verbose Mode Toggle:
- Toolbar button in log pane
- Persistent setting across sessions
- Real-time log updates
Normal Mode Output:
Copying: ~/.bashrc
Copying: ~/.vimrc
Skipped: ~/.zshrc (unchanged)
Verbose Mode Output:
Copying: ~/.bashrc
→ /home/user/backups/mirror/hostname/bash/.bashrc
Copying: ~/.vimrc
→ /home/user/backups/mirror/hostname/vim/.vimrc
Skipped: ~/.zshrc (unchanged)
→ /home/user/backups/mirror/hostname/zsh/.zshrc
Benefits:
- Verify exact backup locations
- Troubleshoot path issues
- Audit backup operations
- Detailed operation review
Per-file skip logging instead of batch summaries (v1.2.0+):
Previous Behavior (v1.1.x):
Skipped 10 unchanged files
Skipped 20 unchanged files
Current Behavior (v1.2.0+):
Skipped: ~/.bashrc (unchanged)
Skipped: ~/.vimrc (unchanged)
Skipped: ~/.config/alacritty/alacritty.yml (unchanged)
Benefits:
- Identify which files were skipped
- Verify skip decisions
- Troubleshoot unexpected skips
- Complete operation audit trail
Filter dotfiles with non-existent source paths (v1.2.0+):
Hide Missing Checkbox:
- Located on Backup tab
- Filters out missing source files
- Reduces visual clutter
- Maintains full dotfile library
Use Cases:
- Multi-machine dotfile libraries
- Distribution-specific configs
- Optional software configurations
- Clean backup selection view
Enhanced configuration management tools (v1.2.0+):
Opens dotfiles.yaml in system editor:
- Uses
xdg-openfor default application - Direct editing without file navigation
- Immediate configuration updates
- Reload option after edits
Validates configuration files for errors:
- Checks YAML syntax in
settings.yamlanddotfiles.yaml - Verifies required fields
- Reports specific error locations
- Option to reload after fixes
Validation Output:
Configuration Validation
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✓ settings.yaml: Valid
✓ dotfiles.yaml: Valid
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Status: PASSED
Export configuration files for backup:
- Prompts for destination directory
- Exports
settings.yamlanddotfiles.yaml - Preserves comments and formatting
- Safekeeping before major changes
Efficient operation via keyboard:
| Shortcut | Action |
|---|---|
Ctrl+B |
Start Backup |
Ctrl+R |
Start Restore |
Ctrl+V |
Verify Backup |
F1 |
Open Help |
Ctrl+Q |
Quit Application |
Customization:
- Standard Qt shortcuts
- Mnemonics in menus
- Toolbar tooltips with shortcuts
Unified file/directory selection (v1.2.0+):
Unified Picker:
- Single dialog for files and directories
- No separate file/folder mode prompt
- Qt QFileDialog with custom options
- Native look and feel
Previous Behavior (v1.1.x):
[Dialog] Select type:
[ ] File
[ ] Directory
Current Behavior (v1.2.0+):
[File Picker]
File name: ___________________
Files of type: All Files (*)
[Open] [Cancel]
# Accepts both files and directories
Browse and restore backed-up files:
Restore Interface:
- Tree view of backed-up dotfiles
- Source and destination path display
- Select individual files or categories
- Restore to original locations
Restore Operations:
- Scan mirror or archive backup
- Present files available for restoration
- User selects files to restore
- Create pre-restore safety backup
- Execute restoration
- Verify restoration success
Safety Measures:
- Pre-restore backup creation
- Confirmation before overwrite
- Option to abort mid-restoration
- Restore verification
Restore from compressed archives:
Archive Restoration:
- Automatic archive extraction
- Temporary extraction location
- File selection from extracted contents
- Cleanup after restoration
Archive Selection:
- List available archives by timestamp
- Preview archive contents
- Select specific archive version
- Restore entire archive or selective files
Track backup operations over time (v1.0.0+):
History Storage:
- Backup operation timestamps
- Files backed up per operation
- Operation duration
- Success/failure status
- Size information
History Display:
- Chronological operation list
- Filter by date range
- Search by file or operation
- Export history report
History File: backup_history.yaml
- timestamp: "2026-02-07T08:30:15"
operation: "mirror_backup"
files_processed: 42
files_skipped: 8
total_size: 52428800
duration: 2.5
status: "success"Real-time and post-operation statistics:
Statistics Display:
- Files processed count
- Files skipped count
- Files failed count
- Total size backed up
- Operation duration
- Average file size
Statistics Panel:
Backup Statistics
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Processed: 42 files
Skipped: 8 files (unchanged)
Failed: 0 files
Total Size: 50.0 MB
Duration: 2.5 seconds
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Navigation: Home | Installation | User Guide | Configuration