From 0df6a64304b278f60e8960c6f7ab9b4202acb947 Mon Sep 17 00:00:00 2001
From: Florian Sesser <florian@private.storage>
Date: Fri, 29 Apr 2022 18:18:47 +0000
Subject: [PATCH] Borgbackup: Make folders configurable

---
 morph/grid/local/grid.nix |  1 -
 morph/lib/borgbackup.nix  | 17 +++++++++++++++--
 morph/lib/storage.nix     |  3 +++
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/morph/grid/local/grid.nix b/morph/grid/local/grid.nix
index 892f6dee..088d9e8c 100644
--- a/morph/grid/local/grid.nix
+++ b/morph/grid/local/grid.nix
@@ -84,7 +84,6 @@ let
     imports = [
       gridlib.storage
       grid-module
-      gridlib.borgbackup
     ];
     config = {
       grid.monitoringvpnIPv4 = "172.23.23.12";
diff --git a/morph/lib/borgbackup.nix b/morph/lib/borgbackup.nix
index e0655d59..1dc48dd1 100644
--- a/morph/lib/borgbackup.nix
+++ b/morph/lib/borgbackup.nix
@@ -5,9 +5,22 @@
 
 { lib, config, ...}:
 let
+  cfg = config.services.private-storage.borgbackup;
   inherit (config.grid) publicKeyPath privateKeyPath;
+
 in {
-  config = {
+  options.services.private-storage.borgbackup = {
+    enable = lib.mkEnableOption "Borgbackup daily backup job";
+    paths = lib.mkOption {
+      type = lib.types.listOf lib.types.str;
+      description = ''
+        A list of directories to back up using Borg.
+      '';
+      default = [ "/storage" ];
+    };
+  };
+
+  config = lib.mkIf cfg.enable {
     deployment = {
       secrets = {
         "borgbackup-repopath" = {
@@ -33,7 +46,7 @@ in {
 
     services.borgbackup.jobs = {
       daily = {
-        paths = [ "/storage" ];
+        paths = cfg.paths;
         repo = lib.fileContents config.deployment.secrets.borgbackup-repopath.source;
         encryption = {
           mode = "repokey-blake2";
diff --git a/morph/lib/storage.nix b/morph/lib/storage.nix
index 83c12f55..1fd8c26c 100644
--- a/morph/lib/storage.nix
+++ b/morph/lib/storage.nix
@@ -7,6 +7,7 @@ in {
   # Any extra NixOS modules to load on this server.
   imports = [
     ./monitoringvpn-client.nix
+    ./borgbackup.nix
   ];
 
   options.grid.storage = {
@@ -46,6 +47,8 @@ in {
     services.private-storage.monitoring.exporters.node.enable = true;
     services.private-storage.monitoring.exporters.tahoe.enable = true;
 
+    services.private-storage.borgbackup.enable = true;
+
     # Turn on the Private Storage (Tahoe-LAFS) service.
     services.private-storage = {
       # Yep.  Turn it on.
-- 
GitLab