{ lib, config, ... }: let enabled = config.mod.restic.enable; in { options.mod.restic.enable = lib.mkEnableOption "Enable restic"; config = lib.mkIf enabled { fileSystems."/mnt/backup" = { device = "/dev/disk/by-uuid/34601701-65e6-4b2c-ac4d-8bef3dfd743f"; fsType = "ext4"; options = [ "nofail" ]; }; services.restic.backups = { "sync-to-external" = { initialize = true; passwordFile = config.age.secrets.restic-password.path; paths = [ "/mnt/sync/public" ]; repository = "/mnt/backup/restic"; timerConfig = { OnCalendar = "*-*-* 0/12:00:00"; Persistent = true; }; pruneOpts = [ "--keep-daily 1" "--keep-weekly 7" "--keep-yearly 12" ]; }; "sync-to-cloud" = { initialize = true; passwordFile = config.age.secrets.restic-password.path; environmentFile = config.age.secrets.restic-cloud-sync-key.path; repositoryFile = config.age.secrets.restic-cloud-sync-repository.path; paths = [ "/mnt/sync/public" ]; timerConfig = { OnCalendar = "*-*-* 0/12:00:00"; Persistent = true; }; pruneOpts = [ "--keep-daily 1" "--keep-weekly 7" "--keep-yearly 12" ]; }; }; age.secrets = { "restic-password".file = ../../../../secrets/manatee/restic-password.age; "restic-cloud-sync-key".file = ../../../../secrets/manatee/restic-cloud-sync-key.age; "restic-cloud-sync-repository".file = ../../../../secrets/manatee/restic-cloud-sync-repository.age; }; }; }