diff options
| author | Gregor Kleen <gkleen@yggdrasil.li> | 2023-03-13 15:42:35 +0100 |
|---|---|---|
| committer | Gregor Kleen <gkleen@yggdrasil.li> | 2023-03-13 15:42:35 +0100 |
| commit | 6e820741126c9c8b156cf8f9fe285e96cafb3138 (patch) | |
| tree | de2b4aeaff584420f2410ce47e0f906f68e79387 /modules/borgsnap/default.nix | |
| parent | b9e6f77db0871da3c72928619395590b28ea0181 (diff) | |
| download | nixos-6e820741126c9c8b156cf8f9fe285e96cafb3138.tar nixos-6e820741126c9c8b156cf8f9fe285e96cafb3138.tar.gz nixos-6e820741126c9c8b156cf8f9fe285e96cafb3138.tar.bz2 nixos-6e820741126c9c8b156cf8f9fe285e96cafb3138.tar.xz nixos-6e820741126c9c8b156cf8f9fe285e96cafb3138.zip | |
spin off backup-utils
Diffstat (limited to 'modules/borgsnap/default.nix')
| -rw-r--r-- | modules/borgsnap/default.nix | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/modules/borgsnap/default.nix b/modules/borgsnap/default.nix deleted file mode 100644 index 0a674e64..00000000 --- a/modules/borgsnap/default.nix +++ /dev/null | |||
| @@ -1,116 +0,0 @@ | |||
| 1 | { config, pkgs, lib, flakeInputs, hostName, ... }: | ||
| 2 | |||
| 3 | with lib; | ||
| 4 | |||
| 5 | let | ||
| 6 | borgsnap = flakeInputs.mach-nix.lib.${config.nixpkgs.system}.buildPythonPackage rec { | ||
| 7 | pname = "borgsnap"; | ||
| 8 | src = ./borgsnap; | ||
| 9 | version = "0.0.0"; | ||
| 10 | ignoreDataOutdated = true; | ||
| 11 | |||
| 12 | requirements = '' | ||
| 13 | atomicwrites | ||
| 14 | pyprctl | ||
| 15 | python-unshare | ||
| 16 | python-dateutil | ||
| 17 | ''; | ||
| 18 | postInstall = '' | ||
| 19 | wrapProgram $out/bin/borgsnap \ | ||
| 20 | --prefix PATH : ${makeBinPath (with pkgs; [config.boot.zfs.package util-linux borgbackup])}:${config.security.wrapperDir} | ||
| 21 | ''; | ||
| 22 | |||
| 23 | providers.python-unshare = "nixpkgs"; | ||
| 24 | overridesPre = [ | ||
| 25 | (self: super: { python-unshare = super.python-unshare.overrideAttrs (oldAttrs: { name = "python-unshare-0.2.1"; version = "0.2.1"; }); }) | ||
| 26 | ]; | ||
| 27 | |||
| 28 | _.tomli.buildInputs.add = with pkgs."python3Packages"; [ flit-core ]; | ||
| 29 | }; | ||
| 30 | |||
| 31 | cfg = config.services.borgsnap; | ||
| 32 | in { | ||
| 33 | options = { | ||
| 34 | services.borgsnap = { | ||
| 35 | enable = mkEnableOption "borgsnap service"; | ||
| 36 | |||
| 37 | target = mkOption { | ||
| 38 | type = types.str; | ||
| 39 | }; | ||
| 40 | |||
| 41 | archive-prefix = mkOption { | ||
| 42 | type = types.str; | ||
| 43 | default = "yggdrasil.${hostName}."; | ||
| 44 | }; | ||
| 45 | |||
| 46 | extraConfig = mkOption { | ||
| 47 | type = with types; attrsOf str; | ||
| 48 | default = { | ||
| 49 | halfweekly = "8"; | ||
| 50 | monthly = "-1"; | ||
| 51 | }; | ||
| 52 | }; | ||
| 53 | |||
| 54 | verbosity = mkOption { | ||
| 55 | type = types.int; | ||
| 56 | default = config.services.zfssnap.verbosity; | ||
| 57 | }; | ||
| 58 | |||
| 59 | sshConfig = mkOption { | ||
| 60 | type = with types; nullOr str; | ||
| 61 | default = null; | ||
| 62 | }; | ||
| 63 | |||
| 64 | keyfile = mkOption { | ||
| 65 | type = with types; nullOr str; | ||
| 66 | default = null; | ||
| 67 | }; | ||
| 68 | |||
| 69 | extraCreateArgs = mkOption { | ||
| 70 | type = with types; listOf str; | ||
| 71 | default = []; | ||
| 72 | }; | ||
| 73 | extraCheckArgs = mkOption { | ||
| 74 | type = with types; listOf str; | ||
| 75 | default = []; | ||
| 76 | }; | ||
| 77 | |||
| 78 | unknownUnencryptedRepoAccessOk = mkOption { | ||
| 79 | type = types.bool; | ||
| 80 | default = false; | ||
| 81 | }; | ||
| 82 | hostnameIsUnique = mkOption { | ||
| 83 | type = types.bool; | ||
| 84 | default = true; | ||
| 85 | }; | ||
| 86 | }; | ||
| 87 | }; | ||
| 88 | |||
| 89 | config = mkIf cfg.enable { | ||
| 90 | warnings = mkIf (!config.services.zfssnap.enable) [ | ||
| 91 | "borgsnap will do nothing if zfssnap is not enabled" | ||
| 92 | ]; | ||
| 93 | |||
| 94 | services.zfssnap.config.exec = { | ||
| 95 | check = "${borgsnap}/bin/borgsnap --verbosity=${toString cfg.verbosity} --target ${escapeShellArg cfg.target} --archive-prefix ${escapeShellArg cfg.archive-prefix} check --cache-file /run/zfssnap-prune/archives-cache.json ${escapeShellArgs cfg.extraCheckArgs}"; | ||
| 96 | cmd = "${borgsnap}/bin/borgsnap --verbosity=${toString cfg.verbosity} --target ${escapeShellArg cfg.target} --archive-prefix ${escapeShellArg cfg.archive-prefix} create ${escapeShellArgs cfg.extraCreateArgs}"; | ||
| 97 | } // cfg.extraConfig; | ||
| 98 | |||
| 99 | systemd.services."zfssnap-prune" = { | ||
| 100 | serviceConfig = { | ||
| 101 | Environment = [ | ||
| 102 | "BORG_BASE_DIR=/var/lib/borg" | ||
| 103 | "BORG_CONFIG_DIR=/var/lib/borg/config" | ||
| 104 | "BORG_CACHE_DIR=/var/lib/borg/cache" | ||
| 105 | "BORG_SECURITY_DIR=/var/lib/borg/security" | ||
| 106 | "BORG_KEYS_DIR=/var/lib/borg/keys" | ||
| 107 | ] | ||
| 108 | ++ optional cfg.unknownUnencryptedRepoAccessOk "BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes" | ||
| 109 | ++ optional cfg.hostnameIsUnique "BORG_HOSTNAME_IS_UNIQUE=yes" | ||
| 110 | ++ optional (!(isNull cfg.sshConfig)) "BORG_RSH=\"${pkgs.openssh}/bin/ssh -F ${pkgs.writeText "config" cfg.sshConfig}\"" | ||
| 111 | ++ optional (!(isNull cfg.keyfile)) "BORG_KEY_FILE=${cfg.keyfile}"; | ||
| 112 | RuntimeDirectory = "zfssnap-prune"; | ||
| 113 | }; | ||
| 114 | }; | ||
| 115 | }; | ||
| 116 | } | ||
