diff options
author | WilliButz <WilliButz@users.noreply.github.com> | 2019-10-14 18:02:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-14 18:02:30 +0200 |
commit | 104b93eef0089cfced0d392c21efcd333eceefdb (patch) | |
tree | 2feb81bf01d4b541e3537a7031a076b7e3a89a9b /nixos | |
parent | 0ea34f70c35c00c7a1196c26df0d030a61cd7f35 (diff) | |
parent | 2dfc67517a4d33d602b5c4a599470eaa3ddabac6 (diff) | |
download | nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar.gz nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar.bz2 nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar.lz nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar.xz nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.tar.zst nixlib-104b93eef0089cfced0d392c21efcd333eceefdb.zip |
Merge pull request #70070 from Ma27/borgbackup-removable-devices
nixos/borgbackup: add option to allow removable devices
Diffstat (limited to 'nixos')
-rw-r--r-- | nixos/modules/services/backup/borgbackup.nix | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/nixos/modules/services/backup/borgbackup.nix b/nixos/modules/services/backup/borgbackup.nix index 2ad116a7872a..10d42325a6b1 100644 --- a/nixos/modules/services/backup/borgbackup.nix +++ b/nixos/modules/services/backup/borgbackup.nix @@ -8,7 +8,7 @@ let builtins.substring 0 1 x == "/" # absolute path || builtins.substring 0 1 x == "." # relative path || builtins.match "[.*:.*]" == null; # not machine:path - + mkExcludeFile = cfg: # Write each exclude pattern to a new line pkgs.writeText "excludefile" (concatStringsSep "\n" cfg.exclude); @@ -104,12 +104,12 @@ let install = "install -o ${cfg.user} -g ${cfg.group}"; in nameValuePair "borgbackup-job-${name}" (stringAfter [ "users" ] ('' - # Eensure that the home directory already exists + # Ensure that the home directory already exists # We can't assert createHome == true because that's not the case for root - cd "${config.users.users.${cfg.user}.home}" + cd "${config.users.users.${cfg.user}.home}" ${install} -d .config/borg ${install} -d .cache/borg - '' + optionalString (isLocalPath cfg.repo) '' + '' + optionalString (isLocalPath cfg.repo && !cfg.removableDevice) '' ${install} -d ${escapeShellArg cfg.repo} '')); @@ -163,6 +163,13 @@ let + " without at least one public key"; }; + mkRemovableDeviceAssertions = name: cfg: { + assertion = !(isLocalPath cfg.repo) -> !cfg.removableDevice; + message = '' + borgbackup.repos.${name}: repo isn't a local path, thus it can't be a removable device! + ''; + }; + in { meta.maintainers = with maintainers; [ dotlambda ]; @@ -202,6 +209,12 @@ in { example = "user@machine:/path/to/repo"; }; + removableDevice = mkOption { + type = types.bool; + default = false; + description = "Whether the repo (which must be local) is a removable device."; + }; + archiveBaseName = mkOption { type = types.strMatching "[^/{}]+"; default = "${globalConfig.networking.hostName}-${name}"; @@ -511,7 +524,6 @@ in { type = types.attrsOf (types.submodule ( { ... }: { options = { - path = mkOption { type = types.path; description = '' @@ -598,7 +610,8 @@ in { (with config.services.borgbackup; { assertions = mapAttrsToList mkPassAssertion jobs - ++ mapAttrsToList mkKeysAssertion repos; + ++ mapAttrsToList mkKeysAssertion repos + ++ mapAttrsToList mkRemovableDeviceAssertions jobs; system.activationScripts = mapAttrs' mkActivationScript jobs; |