{#
Backups.
A backup is only worth anything at the moment someone is frightened, so the
three facts that decide whether this is the right archive are in the row
itself: when it was taken, how big it is, and what is inside it. Nothing has
to be opened to choose.
Restoring is the most destructive thing this panel can do. Its question names
the archive, names the domain it lands on, and says in plain words that what
is deployed there now is overwritten.
#}
{% extends "base.html" %}
{% import "_macros.html" as m %}
{% block title %}Backups{% endblock %}
{% block content %}
{{ m.page_head("Backups", storage.summary if rows else none) }}
{#
Loaded over htmx rather than rendered inline, so it lives entirely in
views/backup_schedules.py and this page's handler does not have to know it
exists. Listing the timers also runs two systemctl calls per schedule,
which is work the first paint should not wait on.
#}
Scheduled backups