DFBU
A Linux desktop application for backing up and restoring configuration files, with mirror and archive modes, post-backup verification, and a safety backup before any restore.
Identification
Purpose
Configuration files accumulate. A working Linux desktop is the product of years of small edits to ~/.bashrc, ~/.config, and ~/.local/share, none of them individually memorable and all of them
expensive to reconstruct. Backing that up is easy; restoring it correctly, onto a machine that
already has files in those paths, is where it goes wrong.
DFBU is a desktop application for both halves, built around the position that the restore is the dangerous operation and should be treated as one.
Operating model
A backup runs in one or both of two modes. A mirror is a readable folder tree — inspectable
with any file manager, and recoverable by hand if the application is unavailable. An archive is
a compressed .tar.gz, for keeping a point in time. They answer different questions, so the choice
is offered rather than decided.
After a backup, verification is available as a distinct step, including hash verification, so “copied” and “copied correctly” stay separate claims.
A restore can take a safety backup of what is about to be overwritten, before it overwrites it. That is the operation the design is really about: it means a restore has a way back, so choosing the wrong profile is a recoverable mistake rather than a destructive one.
Profiles save a selection and its options, so a repeated backup is the same backup rather than a fresh set of decisions each time. Verbose logs and per-file skip logging make the result auditable: a file that was not copied says which one and why, rather than being absent from a summary.
Practices
Protect. The pre-restore safety backup is the protection, and it guards against the operator rather than against the machine — the failure this system expects is a person restoring the wrong thing over a working configuration.
Verify. Optional post-backup and hash verification exist because a backup nobody has checked is a belief. Keeping verification a separate step also means its absence is visible.
Recover. Both directions are first-class. Mirror mode in particular keeps recovery possible without the application: a readable tree can be copied back by hand, which is the right property for a tool whose job is to still work on a day when things are broken.
Control. Profiles, session exclusions, and hide-missing-sources handling make the set of files an explicit, reviewable selection rather than a wildcard that quietly grows.
Architecture
A PySide6/Qt desktop application in Python, distributed as an AppImage so it runs without an
install step or a package repository. Configuration is three YAML files with separate jobs: settings.yaml for paths and options, dotfiles.yaml for the library of entries, and session.yaml for temporary exclusions.
Splitting the third one out is deliberate. A temporary exclusion is not the same fact as a permanent preference, and storing them together is how a one-off decision silently becomes the configuration.
Evidence
The repository is public under MIT with published releases, and the AppImage is downloadable without an account. Its own verification gate — Ruff, mypy, and pytest — runs in CI.
It is a personal tool published openly, not a supported product. There is no warranty, no support arrangement, and no commitment to a release schedule.
Availability
Use directly open-source · free-download
Open source under MIT, with published AppImage releases. Download it or read the source.
Capabilities demonstrated
Repeatable work this system is evidence for. The relationship is authored on this record.
Reliability-oriented automation
established
Automation that checks whether the commanded state was actually reached, retries what failed, and leaves a way back.
Related records
Evidence
- public Canonical repository, MIT, opens in a new tab
- public Published AppImage releases, opens in a new tab
Systems
Stack
Python · PySide6 · Qt
There is no paid offering, price, or engagement on this site today. When one exists it will appear here as a record, with its scope and its exclusions.