diff --git a/.config/systemd/user/library-dump.service b/.config/systemd/user/library-dump.service new file mode 100644 index 0000000..261513e --- /dev/null +++ b/.config/systemd/user/library-dump.service @@ -0,0 +1,11 @@ +[Unit] +Description=Dump the Library database to ~/.local/share/library_manager/dumps +StartLimitIntervalSec=2h +StartLimitBurst=4 + +[Service] +Type=oneshot +ExecStart=%h/.local/bin/library-dump +# MariaDB not up yet (e.g. caught up right after boot)? retry a few times +Restart=on-failure +RestartSec=5min diff --git a/.config/systemd/user/library-dump.timer b/.config/systemd/user/library-dump.timer new file mode 100644 index 0000000..b928572 --- /dev/null +++ b/.config/systemd/user/library-dump.timer @@ -0,0 +1,9 @@ +[Unit] +Description=Dump the Library database daily + +[Timer] +OnCalendar=daily +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/.github/README.md b/.github/README.md index f1ef9f1..071eb7c 100644 --- a/.github/README.md +++ b/.github/README.md @@ -17,7 +17,7 @@ install script. This README lives in `.github/` to keep it out of the home direc | Audio / media | mpd, ncmpcpp, mpDris2, mpv, beets, pipewire | | Packaging | `.config/aurutils-makepkg.conf`, `.config/aurb/`, `.local/bin/aurb` / `aurs` (aurutils wrappers) | | Services | `.config/systemd/user/` (timers and overrides) | -| Scripts | `.local/bin/` (screen layout, phone mount, video helpers) | +| Scripts | `.local/bin/` (screen layout, phone mount, video helpers, Library database dump) | Note: `config.fish` sources `~/.bash_aliases`, so the aliases apply in both shells. diff --git a/.local/bin/library-dump b/.local/bin/library-dump new file mode 100755 index 0000000..7abffcd --- /dev/null +++ b/.local/bin/library-dump @@ -0,0 +1,17 @@ +#!/bin/bash +# Dump the Library database to a per-weekday file (seven self-rotating copies). +set -euo pipefail + +cnf=${XDG_CONFIG_HOME:-$HOME/.config}/library_manager/dump.cnf +dir=${XDG_DATA_HOME:-$HOME/.local/share}/library_manager/dumps +out=$dir/Library-$(LC_ALL=C date +%a).sql.gz + +umask 077 +mkdir -p "$dir" + +# Write to a temporary file so a failed dump never replaces a good one +tmp=$(mktemp "$dir/.dump.XXXXXX") +trap 'rm -f "$tmp"' EXIT + +mariadb-dump --defaults-extra-file="$cnf" --single-transaction --databases Library | gzip > "$tmp" +mv "$tmp" "$out"