summary refs log tree commit diff
path: root/nixos/modules/services/backup/borgmatic.nix
blob: 5e5c0bbecccaac16d3729e5556afc461ff132928 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{ config, lib, pkgs, ... }:

with lib;

let
  cfg = config.services.borgmatic;
  cfgfile = pkgs.writeText "config.yaml" (builtins.toJSON cfg.settings);
in {
  options.services.borgmatic = {
    enable = mkEnableOption "borgmatic";

    settings = mkOption {
      description = ''
        See https://torsion.org/borgmatic/docs/reference/configuration/
      '';
      type = types.submodule {
        freeformType = with lib.types; attrsOf anything;
        options.location = {
          source_directories = mkOption {
            type = types.listOf types.str;
            description = ''
              List of source directories to backup (required). Globs and
              tildes are expanded.
            '';
            example = [ "/home" "/etc" "/var/log/syslog*" ];
          };
          repositories = mkOption {
            type = types.listOf types.str;
            description = ''
              Paths to local or remote repositories (required). Tildes are
              expanded. Multiple repositories are backed up to in
              sequence. Borg placeholders can be used. See the output of
              "borg help placeholders" for details. See ssh_command for
              SSH options like identity file or port. If systemd service
              is used, then add local repository paths in the systemd
              service file to the ReadWritePaths list.
            '';
            example = [
              "user@backupserver:sourcehostname.borg"
              "user@backupserver:{fqdn}"
            ];
          };
        };
      };
    };
  };

  config = mkIf cfg.enable {

    environment.systemPackages = [ pkgs.borgmatic ];

    environment.etc."borgmatic/config.yaml".source = cfgfile;

    systemd.packages = [ pkgs.borgmatic ];

  };
}