/Baxzup

Create backups using XZ compression

Primary LanguageRustzlib LicenseZlib

Baxzup

Baxzup is a program that creates backups (or any archive, really) using XZ compression.
The backup can be configured from a simple TOML.

Installation & Usage

cargo install baxzup

When Baxzup is first run, it will generate the default configuration and wait for an input before proceeding (To allow for the configuration to be edited first).
Every next time Baxzup is run, unless the configuration goes missing, it will automatically start creating the backup.
The path to the configuration can be changed using the --config-path flag. To skip reading the configuration from a file altogether and just using the default one, --default-config can be used.

Configuration

Field Type Description Default
backup.paths [String, ...] Paths to the directories/files to add to the backup. Windows:
['C:\']

Linux:
["/etc", "/home", "/root", "/var"]

MacOS:
["/Users", "/Applications", "/Library"]
backup.exclude [String, ...] List of patterns to exclude.
If the path the program is currently checking contains any of the patterns, it will skip it.
The pattern can be a regex by typing ?/pattern/flags.
Windows:
["?/cache/i", 'C:\Program Files', 'C:\Program Files (x86)', 'C:\Windows']

Linux and MacOS:
["?/cache/i"]
backup.exclude_tags Table<String> List of tags to exclude.
If a directory contains any file named like the tag (the table's keys) it will be skipped.
The tag mode (the keys' value) defines how to skip the directory:

keep-tag:
Keep the directory and the tag file, but skip every other file in the directory.

keep-dir:
Keep the directory, but leave it empty.

keep-none:
Don't keep anything.
{ "CACHEDIR.TAG" = "keep-tag" }
backup.follow_symlinks bool The program will archive whatever the symlink is linking to rather than the symlink itself.
Following symlinks may cause the program to get stuck in a loop, use carefully.
false
backup.ignore_unreadable_files bool When unable to read a file, the program will skip it immediately instead of asking the user. false
backup.force_overwrite bool If a file with the same name as the backup already exists the program will automatically overwrite it instead of asking the user. false
backup.name String The name (or path) to the backup file, supports strftime-like formatting with some extra specifiers:

%!hostname:
The system's hostname, or "unknown" if it couldn't be obtained.

%!systemname:
The system's name or "unknown" if it couldn't be obtained.

%!systemid:
The system's distribution id.

%!username:
The username, or "unknown" if it couldn't be obtained.

%!groupname:
The user's group name, or "unknown" if it couldn't be obtained (unobtainable on Windows).
%!hostname (%F).tar.xz
progress_bars.enable bool The program will show 2 progress bars displaying how much was archived and how much was compressed.
The progress bars aren't accurate, and are simply for having a rough idea of how much was done and how much is left.
true
progress_bars.spinner_chars String The characters used in the spinner's animation, the last character is used when the progress bar is completed.
Must contain at least 2 characters.
Unicode supported:
⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏

ASCII only:
|/-\
progress_bars.progress_chars String The characters used in the progress bar, the first character is used for the filled part of the bar, while the last character is used for the empty part of the bar.
Any other character, if present, will be used for the character in the progress bar that is going to be filled next.
Must contain at least 2 characters.
█░
progress_bars.tar_bar_color String The color to be used for the "Archiving" progress bar, the string must contain either the color's name or its number.
The color of only the empty part of the bar can be additionally added using / to separate it from the filled part's color.
If only one color is given, it will be used for both parts.
yellow
progress_bars.xz_bar_color String The color to be used for the "Compressing" progress bar, the string must contain either the color's name or its number.
The color of only the empty part of the bar can be additionally added using / to separate it from the filled part's color.
If only one color is given, it will be used for both parts.
magenta
xz.level u32 (0-9) The compression level for XZ, smaller levels are faster and use less memory, but will compress less. 8
xz.threads u32 Amount of threads used by XZ. Amount of cores in the CPU.
xz.block_size u64 The size of each uncompressed block in bytes, every thread will allocate around 3 times the block size in bytes.
Set this to 0 to let XZ choose the block size.
0
auto_update_config bool If defined and set to true, the configuration will be automatically updated if any outdated field is detected. None.

When the configuration file isn't present a new one will be automatically created using the default values.
Additionally, from the CLI, flags can be used to modify most of the configuration.