From 8a63f8aac4211388c6bd709bfa7b3ca50265421e Mon Sep 17 00:00:00 2001 From: Simon Bruder Date: Sat, 5 Dec 2020 14:19:34 +0100 Subject: [PATCH] Parameterise restic --- machines/nunotaba/configuration.nix | 2 +- machines/sayuri/configuration.nix | 2 +- modules/default.nix | 1 + modules/restic.nix | 74 +++++++++++++++++++---------- 4 files changed, 51 insertions(+), 28 deletions(-) diff --git a/machines/nunotaba/configuration.nix b/machines/nunotaba/configuration.nix index 19cac9b..a200422 100644 --- a/machines/nunotaba/configuration.nix +++ b/machines/nunotaba/configuration.nix @@ -6,7 +6,6 @@ ./hardware-configuration.nix ../../modules/cpu/intel.nix ../../modules/gpu/intel.nix - ../../modules/restic.nix ../../modules/ssd.nix ../../modules/libvirt.nix ../../modules @@ -16,6 +15,7 @@ sbruder = { gui = true; + restic.enable = true; }; boot.loader.grub.device = "/dev/disk/by-id/ata-INTEL_SSDSC2KB480G7_PHYS749202D6480BGN"; diff --git a/machines/sayuri/configuration.nix b/machines/sayuri/configuration.nix index 7da6bf8..e4554a6 100644 --- a/machines/sayuri/configuration.nix +++ b/machines/sayuri/configuration.nix @@ -7,7 +7,6 @@ ../../modules/cpu/intel.nix ../../modules/gpu/amd.nix ../../modules/libvirt.nix - ../../modules/restic.nix ../../modules/ssd.nix ../../modules ../../profiles/dev.nix @@ -16,6 +15,7 @@ sbruder = { gui = true; + restic.enable = true; }; boot.loader.grub.device = "/dev/disk/by-id/ata-MTFDDAK256TBN-1AR15ABHA_UFZMQ01ZR50NMM"; diff --git a/modules/default.nix b/modules/default.nix index 23df285..ea4f999 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -21,6 +21,7 @@ ./office.nix ./prometheus/node_exporter.nix ./pulseaudio.nix + ./restic.nix ./ssh.nix ./sway.nix ./tools.nix diff --git a/modules/restic.nix b/modules/restic.nix index d46c46a..44c9b12 100644 --- a/modules/restic.nix +++ b/modules/restic.nix @@ -1,5 +1,7 @@ -{ pkgs, config, lib, ... }: +{ pkgs, config, lib, options, ... }: let + cfg = config.sbruder.restic; + name = "${config.networking.hostName}-system"; excludes = [ # General @@ -44,32 +46,52 @@ let maybePath = path: (lib.optional (builtins.pathExists path) (toString path)); in { - services.restic.backups."${name}" = { - passwordFile = toString (../secrets/restic_password); - s3CredentialsFile = toString ../secrets/s3_credentials; - repository = "s3:https://s3.eu-central-1.wasabisys.com/sbruder-restic"; - paths = lib.mkDefault ( - [ ] - ++ maybePath /data - ++ maybePath /home - ++ maybePath /srv - ++ maybePath /var - ); - initialize = true; - extraBackupArgs = [ - "--exclude-caches" - "--exclude-file=${excludesFile}" - "--verbose" - ]; - timerConfig = { - OnCalendar = "20:00"; - RandomizedDelaySec = "2h"; - }; + options.sbruder.restic = { + enable = lib.mkEnableOption "restic"; + timerConfig = + lib.recursiveUpdate + ( + (builtins.elemAt + (builtins.elemAt + options.services.restic.backups.type.getSubModules + 0 + ).imports + 0) + { name = ""; } + ).options.timerConfig + { + default = { + OnCalendar = "20:00"; + RandomizedDelaySec = "2h"; + }; + }; }; - systemd.services."restic-backups-${name}".serviceConfig = { - "Nice" = 10; - "IOSchedulingClass" = "best-effort"; - "IOSchedulingPriority" = 7; + config = lib.mkIf cfg.enable { + services.restic.backups."${name}" = { + passwordFile = toString (../secrets/restic_password); + s3CredentialsFile = toString ../secrets/s3_credentials; + repository = "s3:https://s3.eu-central-1.wasabisys.com/sbruder-restic"; + paths = lib.mkDefault ( + [ ] + ++ maybePath /data + ++ maybePath /home + ++ maybePath /srv + ++ maybePath /var + ); + initialize = true; + extraBackupArgs = [ + "--exclude-caches" + "--exclude-file=${excludesFile}" + "--verbose" + ]; + timerConfig = cfg.timerConfig; + }; + + systemd.services."restic-backups-${name}".serviceConfig = { + "Nice" = 10; + "IOSchedulingClass" = "best-effort"; + "IOSchedulingPriority" = 7; + }; }; }