diff options
-rw-r--r-- | custom/borgbackup.nix | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/custom/borgbackup.nix b/custom/borgbackup.nix index 28dbba16..47714e83 100644 --- a/custom/borgbackup.nix +++ b/custom/borgbackup.nix | |||
@@ -54,14 +54,15 @@ in { | |||
54 | config = mkIf (any (t: t.paths != []) (attrValues cfg.targets)) { | 54 | config = mkIf (any (t: t.paths != []) (attrValues cfg.targets)) { |
55 | services.btrfs-snapshots.enable = mkIf (cfg.snapshots == "btrfs") true; | 55 | services.btrfs-snapshots.enable = mkIf (cfg.snapshots == "btrfs") true; |
56 | 56 | ||
57 | systemd.timers = listToAttrs (map ({ target, path }: nameValuePair "borgbackup-${target}@${path}" { | 57 | systemd.timers = listToAttrs (map ({ target, path, tCfg }: nameValuePair "borgbackup-${target}@${path}" { |
58 | wantedBy = [ "timers.target" ]; | 58 | wantedBy = [ "timers.target" ]; |
59 | 59 | ||
60 | timerConfig = { | 60 | timerConfig = { |
61 | Persistent = true; | 61 | Persistent = false; |
62 | OnUnitInactiveSec = "6h"; | 62 | OnBootSec = tCfg.interval; |
63 | OnUnitInactiveSec = tCfg.interval; | ||
63 | }; | 64 | }; |
64 | }) (flatten (mapAttrsToList (target: tCfg: map (path: { inherit target path; }) tCfg.paths) cfg.targets))); | 65 | }) (flatten (mapAttrsToList (target: tCfg: map (path: { inherit target path tCfg; }) tCfg.paths) cfg.targets))); |
65 | 66 | ||
66 | systemd.services = mapAttrs' (target: tCfg: nameValuePair "borgbackup-${target}@" (let | 67 | systemd.services = mapAttrs' (target: tCfg: nameValuePair "borgbackup-${target}@" (let |
67 | deps = flatten [ | 68 | deps = flatten [ |
@@ -74,20 +75,26 @@ in { | |||
74 | 75 | ||
75 | path = with pkgs; [borgbackup]; | 76 | path = with pkgs; [borgbackup]; |
76 | 77 | ||
77 | script = '' | 78 | script = let |
78 | borg create \ | 79 | borgCmd = '' |
79 | --stats \ | 80 | borg create \ |
80 | --list \ | 81 | --stats \ |
81 | --filter 'AME' \ | 82 | --list \ |
82 | --exclude-caches \ | 83 | --filter 'AME' \ |
83 | --keep-exclude-tags \ | 84 | --exclude-caches \ |
84 | --patterns-from .backup \ | 85 | --keep-exclude-tags \ |
85 | --one-file-system \ | 86 | --patterns-from .backup \ |
86 | --compression auto,lzma \ | 87 | --one-file-system \ |
87 | ${target}::${cfg.prefix}$1-{utcnow} | 88 | --compression auto,lzma \ |
88 | ''; | 89 | ${target}::${cfg.prefix}$1-{utcnow} |
90 | ''; | ||
91 | in if tCfg.lock == null then borgCmd else "flock -xo /var/lock/${tCfg.lock} ${borgCmd}"; | ||
89 | scriptArgs = "%i"; | 92 | scriptArgs = "%i"; |
90 | 93 | ||
94 | unitConfig = { | ||
95 | AssertPathIsDirectory = mkIf (tCfg.lock != null) "/var/lock"; | ||
96 | }; | ||
97 | |||
91 | serviceConfig = { | 98 | serviceConfig = { |
92 | Type = "oneshot"; | 99 | Type = "oneshot"; |
93 | WorkingDirectory = if (cfg.snapshots == null) then "%p" else "/mnt/snapshot-%i"; | 100 | WorkingDirectory = if (cfg.snapshots == null) then "%p" else "/mnt/snapshot-%i"; |