- backup-env-files.sh: Main backup script with Gitea integration - validate-env-backups.sh: Validation and integrity checking - env-backup-integration.sh: Integration with existing backup system - completions/env-backup-completion.bash: Tab completion support - docs/env-backup-system.md: Documentation for the backup system These scripts provide secure backup of .env files to private Gitea repository.
Bash Completion for Shell Scripts
This directory contains bash completion scripts for various shell utilities in this repository.
Overview
The completion system provides intelligent tab completion for command-line flags and options for all backup scripts in this repository. It's automatically installed and configured by the setup scripts.
Supported Scripts
backup-immich.sh
--help,-h- Show help message--dry-run- Preview backup without executing--no-upload- Skip B2 upload (local backup only)--verbose- Enable verbose logging
backup-plex.sh
--help,-h- Show help message--auto-repair- Automatically attempt to repair corrupted databases--check-integrity- Only check database integrity, don't backup--non-interactive- Run in non-interactive mode (for automation)--no-parallel- Disable parallel verification (slower but safer)--no-performance- Disable performance monitoring--webhook=URL- Send notifications to webhook URL--email=ADDRESS- Send notifications to email address
backup-media.sh
--help,-h- Show help message--dry-run- Show what would be backed up without actually doing it--no-verify- Skip backup verification--sequential- Run backups sequentially instead of in parallel--interactive- Ask for confirmation before each backup--webhook URL- Custom webhook URL for notifications
Generic backup scripts (backup-docker.sh, etc.)
--help,-h- Show help message--dry-run- Preview mode--verbose- Verbose output--no-upload- Skip upload operations--webhook- Webhook URL for notifications
Installation
The completion system is automatically installed when you run the setup scripts:
- bootstrap.sh - Makes completion scripts executable
- setup.sh - Copies completion scripts to the user's local completion directory (
~/.local/share/bash-completion/completions/) - .zshrc - Sources the completion scripts in zsh with bash compatibility mode
Automatic Setup Process
When you run ./setup/bootstrap.sh or ./setup/setup.sh, the system will:
- Install bash completion support in zsh
- Copy completion scripts to the standard completion directory
- Ensure completion scripts are executable
- Source the completion in your shell configuration
Manual Installation
If you need to install manually or re-install:
# Enable bash completion compatibility in zsh
autoload -U +X bashcompinit && bashcompinit
autoload -U compinit && compinit -u
# Load custom backup scripts completion
if [ -f "$HOME/shell/completions/backup-scripts-completion.bash" ]; then
source "$HOME/shell/completions/backup-scripts-completion.bash"
fi
Usage Examples
Basic Tab Completion
# Type the script name and start typing an option
$ backup-immich.sh --<TAB>
--help --dry-run --no-upload --verbose
# Continue typing to filter
$ backup-immich.sh --d<TAB>
$ backup-immich.sh --dry-run
Webhook URL Completion
# For scripts that support webhook URLs
$ backup-plex.sh --webhook <TAB>
https://notify.peterwood.rocks/lab
# Or for inline webhook options
$ backup-plex.sh --webhook=<TAB>
https://notify.peterwood.rocks/lab
Path-based Completion
Completion works with various invocation methods:
# Direct script name (if in PATH)
backup-immich.sh --<TAB>
# Relative path
./backup-immich.sh --<TAB>
# Absolute path
/home/acedanger/shell/immich/backup-immich.sh --<TAB>
Features
Intelligent Argument Completion
- Flag completion: All available flags for each script
- Value completion: Suggests common values for specific options
- Context-aware: Different completions based on script type
Cross-Script Support
- Specific completions: Tailored for each backup script
- Generic fallback: Common options for any backup script
- Pattern matching: Automatic completion for
*backup*.shscripts
Advanced Features
- Webhook URL suggestions: Common webhook endpoints
- Email address completion: For notification options
- Multi-word option support: Handles
--option valueand--option=value
Troubleshooting
Completion Not Working
-
Verify the completion script is sourced:
complete -p | grep backup -
Reload your shell configuration:
source ~/.zshrc -
Check if bashcompinit is enabled:
# Should be in your .zshrc autoload -U +X bashcompinit && bashcompinit
Adding New Scripts
To add completion for a new backup script:
- Add the script patterns to the completion file
- Define specific options for the script
- Register the completion function
Example:
# Add to backup-scripts-completion.bash
complete -F _backup_generic_completion your-new-backup-script.sh
Development
Testing Completions
Use the test script to verify completions work:
./test-completion.sh
Adding New Options
- Update the relevant completion function in
backup-scripts-completion.bash - Add the new option to the
optsvariable - Handle any special argument completion if needed
- Test the completion with
compgen -W "options" -- "prefix"
Custom Completion Functions
Each script can have its own completion function following this pattern:
_script_name_completion() {
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--option1 --option2 --option3"
# Handle special cases
case "${prev}" in
--special-option)
COMPREPLY=( $(compgen -W "value1 value2" -- ${cur}) )
return 0
;;
esac
# Standard flag completion
if [[ ${cur} == -* ]]; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
fi
}