Add local game save backups

This commit is contained in:
ltadeu6 2026-05-28 19:47:19 -03:00
parent f84fb73183
commit 511d0c5309
No known key found for this signature in database
GPG key ID: FB9FDAB6B6F3418D
2 changed files with 56 additions and 0 deletions

View file

@ -341,6 +341,7 @@ Pacotes de sessao e desktop usados diretamente pelos configs:
- `slurp`
- `wl-clipboard`
- `networkmanager`
- `ludusavi`
- `hyprpicker`
- `papirus-icon-theme`
- `mpv`
@ -574,6 +575,26 @@ Estado atual:
- aponta o provider Ollama para `http://127.0.0.1:11434`
- usa modelo `ollama/gemma4:e4b`
### Backups locais de saves de jogos
Fonte principal:
- `home/ltadeu6.nix`
Estado atual:
- O Home Manager instala `ludusavi`.
- O timer de usuario `game-save-ludusavi-backup.timer` roda de hora em hora.
- O servico `game-save-ludusavi-backup.service` executa Ludusavi em modo CLI.
- Os backups locais ficam em `~/Backups/game-saves/ludusavi`.
- O formato usado e `simple`, com retencao de 14 backups completos e 14 diferenciais por jogo.
Cuidados:
- Este fluxo e apenas local; nao ha Restic, OCI ou outro destino remoto para saves de jogos no estado atual.
- Se adicionar backup remoto depois, mantenha segredos fora do repo e prefira um repo separado dos backups do VPS.
- Nao faca backup bruto de `~/.local/share/Steam/steamapps`; prefira Ludusavi e excecoes pontuais para jogos nao detectados.
## Secrets e variaveis de ambiente
### Segredos versionados hoje

View file

@ -1,6 +1,22 @@
{ config, pkgs, lib, ... }:
let
gameSaveBackupRoot = "${config.home.homeDirectory}/Backups/game-saves";
gameSaveLudusaviPath = "${gameSaveBackupRoot}/ludusavi";
gameSaveLudusaviBackup = pkgs.writeShellScript "game-save-ludusavi-backup" ''
set -eu
${pkgs.coreutils}/bin/mkdir -p ${lib.escapeShellArg gameSaveLudusaviPath}
exec ${pkgs.ludusavi}/bin/ludusavi \
--try-manifest-update \
backup \
--path ${lib.escapeShellArg gameSaveLudusaviPath} \
--format simple \
--full-limit 14 \
--differential-limit 14 \
--force
'';
opencodeWithLibstdcxx = pkgs.symlinkJoin {
name = "opencode";
paths = [ pkgs.unstable.opencode ];
@ -247,6 +263,7 @@ in
man
hyprpicker
networkmanager
ludusavi
prismlauncher
gimp
inkscape
@ -375,6 +392,24 @@ in
".config/wofi/menu.css".source = ../configs/wofi/menu.css;
};
systemd.user.services.game-save-ludusavi-backup = {
Unit.Description = "Back up game saves with Ludusavi";
Service = {
Type = "oneshot";
ExecStart = "${gameSaveLudusaviBackup}";
};
};
systemd.user.timers.game-save-ludusavi-backup = {
Unit.Description = "Run Ludusavi game-save backup";
Timer = {
OnCalendar = "hourly";
Persistent = true;
RandomizedDelaySec = "10min";
};
Install.WantedBy = [ "timers.target" ];
};
home.activation.ociCredentials = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
set -euo pipefail
key_file="/run/agenix/oci_key"