Skip to content

Commit

Permalink
Merge pull request NixOS#70070 from Ma27/borgbackup-removable-devices
Browse files Browse the repository at this point in the history
nixos/borgbackup: add option to allow removable devices
  • Loading branch information
WilliButz committed Oct 14, 2019
2 parents 0ea34f7 + 2dfc675 commit 104b93e
Showing 1 changed file with 19 additions and 6 deletions.
25 changes: 19 additions & 6 deletions nixos/modules/services/backup/borgbackup.nix
Expand Up @@ -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);
Expand Down Expand Up @@ -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}
''));

Expand Down Expand Up @@ -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 ];

Expand Down Expand Up @@ -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}";
Expand Down Expand Up @@ -511,7 +524,6 @@ in {
type = types.attrsOf (types.submodule (
{ ... }: {
options = {

path = mkOption {
type = types.path;
description = ''
Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 104b93e

Please sign in to comment.