puter/hosts/headless/vessel/backup.nix

62 lines
1.7 KiB
Nix
Raw Normal View History

2024-02-04 20:51:11 +00:00
{
2024-02-26 18:27:27 +00:00
attrName,
config,
2024-02-04 20:51:11 +00:00
lib,
2024-02-26 18:27:27 +00:00
pkgs,
2024-02-04 20:51:11 +00:00
...
2024-02-26 18:27:27 +00:00
}: let
2024-08-18 12:54:44 +00:00
backups = {
2024-09-15 12:16:32 +00:00
music = "/srv/music";
2024-08-18 12:54:44 +00:00
safe = "/srv/safe";
2024-09-15 12:16:32 +00:00
storage = "/srv/storage";
2024-08-18 12:54:44 +00:00
sync = config.services.syncthing.dataDir;
};
2024-08-18 00:55:37 +00:00
in {
systemd = lib.mkMerge (map (
2024-08-18 12:54:44 +00:00
backupName: let
systemdName = "${backupName}-backup";
in {
timers.${systemdName} = {
description = "Local rsync Backup ${backupName}";
wantedBy = ["timers.target"];
timerConfig = {
2025-01-05 00:06:14 +00:00
OnCalendar = "*-*-* 03:00:00"; # TODO
2024-08-18 12:54:44 +00:00
Persistent = true;
2025-01-05 00:06:14 +00:00
Unit = "${systemdName}.service"; # TODO
2024-08-18 00:55:37 +00:00
};
2024-08-18 12:54:44 +00:00
};
2024-02-04 20:51:11 +00:00
2024-08-18 12:54:44 +00:00
services.${systemdName} = {
description = "Local rsync Backup ${backupName}";
serviceConfig = {
Type = "oneshot";
User = "root";
Group = "root";
2024-08-18 00:55:37 +00:00
};
2025-01-05 00:06:14 +00:00
# TODO
2024-08-18 12:54:44 +00:00
script = ''
2024-09-15 12:16:32 +00:00
${lib.getExe pkgs.rsync} --verbose --verbose --archive --update --delete --mkpath -- ${backups.${backupName}}/ /srv/backup/${backupName}/
2024-08-18 12:54:44 +00:00
'';
};
}
) (lib.attrNames backups));
2024-02-04 20:51:11 +00:00
2024-12-01 03:05:16 +00:00
age.secrets = lib.mkSecrets {"restic-${attrName}" = {};};
2024-02-26 18:27:27 +00:00
services.restic.backups.${attrName} = {
2024-02-27 20:37:58 +00:00
repository = "sftp:u385962@u385962.your-storagebox.de:/restic/${attrName}";
2024-02-26 18:27:27 +00:00
initialize = true;
2024-08-18 12:54:44 +00:00
paths = [
backups.safe
backups.sync
];
2024-02-26 18:27:27 +00:00
passwordFile = config.age.secrets."restic-${attrName}".path;
pruneOpts = ["--keep-daily 7" "--keep-weekly 5" "--keep-monthly 12"];
2024-03-08 21:46:46 +00:00
timerConfig = {
2025-01-05 00:06:14 +00:00
OnCalendar = "*-*-* 03:00:00"; # TODO
2024-03-08 21:46:46 +00:00
Persistent = true;
2024-02-26 18:27:27 +00:00
};
2024-03-08 21:46:46 +00:00
extraOptions = ["sftp.args='-i /etc/ssh/ssh_host_ed25519_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'"];
2024-02-26 18:27:27 +00:00
};
2024-02-04 20:51:11 +00:00
}