diff --git a/modules/system/backups.nix b/modules/system/backups.nix index 6d81eda..3030cdf 100644 --- a/modules/system/backups.nix +++ b/modules/system/backups.nix @@ -1,15 +1,15 @@ -{ config, lib, pkgs, ... }: +u config, lib, pkgs, ... }: let cfg = config.modules.system.backups; borg = "${pkgs.borgbackup}/bin/borg"; backup_paths = lib.unique config.modules.system.backups.paths; passwd_file = config.sops.secrets."borg_passwd".path; - jobs = { - sungger = { paths = [ "/var/lib/radarr" "/var/lib/sonarr" ]; }; - hoass = { paths = [ "/var/lib/zigbee2mqtt" "/var/lib/hass" "/var/lib/mosquitto" ]; }; - huh = { paths = [ "/home/blake/.nix" ]; }; - }; +# jobs = { +# sungger = { paths = [ "/var/lib/radarr" "/var/lib/sonarr" ]; }; +# hoass = { paths = [ "/var/lib/zigbee2mqtt" "/var/lib/hass" "/var/lib/mosquitto" ]; }; +# huh = { paths = [ "/home/blake/.nix" ]; }; +# }; in { options.modules.system.backups = { @@ -19,6 +19,11 @@ in default = []; description = "list of directories to back up"; }; + jobs = lib.mkOption { + type = lib.types.attrsOf ( lib.types.attrsOf (lib.types.listOf lib.types.path) ); + default = {}; + description = "Borg backup jobs; each job has a list of paths."; + }; repo = lib.mkOption { type = lib.types.path; default = "/holocron/borg"; @@ -33,10 +38,6 @@ in config = lib.mkIf (cfg.enable && backup_paths != []) { -# systemd.tmpfiles.rules = [ -# "d ${cfg.repo} 0755 root root" -# ]; - systemd.services.backups = { description = "backup service with borg!"; path = [ pkgs.borgbackup ]; @@ -58,11 +59,11 @@ in echo "Starting backup run at $timestamp" # Loop over all jobs (attribute set keys) - ${lib.concatStringsSep "\n\n" (lib.mapAttrsToList (jobName: jobCfg: + ${lib.concatStringsSep "\n\n" (lib.mapAttrsToList (bak_name: bak_paths: '' - echo "=== Backing up ${jobName} ===" - archive="${jobName}-$timestamp" - echo "Backing up paths: ${lib.concatStringsSep " " jobCfg.paths} → $archive" + echo "=== Backing up ${bak_name} ===" + archive="${bak_name}-$timestamp" + echo "Backing up paths: ${lib.concatStringsSep " " bak_paths.paths} → $archive" borg create \ --verbose \ --filter AME \ @@ -71,18 +72,18 @@ in --show-rc \ --compression lzma,9 \ "$BORG_REPO::$archive" \ - ${lib.concatStringsSep " " jobCfg.paths} + ${lib.concatStringsSep " " bak_paths.paths} - echo "Pruning old backups for ${jobName}..." + echo "Pruning old backups for ${bak_name}..." borg prune -v --list "$BORG_REPO" \ - --prefix "${jobName}-" \ + --prefix "${bak_name}-" \ --keep-daily=7 \ --keep-weekly=52 \ --keep-monthly=-1 '' - ) jobs)} + ) cfg.jobs)} - echo "Backup run complete at $timestamp." + echo "backup run complete at $BORG_REPO::$archive" ''; }; }; diff --git a/modules/system/default.nix b/modules/system/default.nix index c5f8ecb..fdb4f80 100644 --- a/modules/system/default.nix +++ b/modules/system/default.nix @@ -26,9 +26,9 @@ -# modules.system.backups.jobs = { -# sungger = { paths = [ "/var/lib/radarr" "/var/lib/sonarr" ]; }; -# hoass = { paths = [ "/var/lib/zigbee2mqtt" "/var/lib/hass" "/var/lib/mosquitto" ]; }; -# huh = { paths = [ "/home/blake/.nix" ]; }; -# }; + modules.system.backups.jobs = { + sungger = { paths = [ "/var/lib/radarr" "/var/lib/sonarr" ]; }; + hoass = { paths = [ "/var/lib/zigbee2mqtt" "/var/lib/hass" "/var/lib/mosquitto" ]; }; + huh = { paths = [ "/home/blake/.nix" ]; }; + }; }