63 lines
1.4 KiB
Nix
63 lines
1.4 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with lib; let
|
|
cfg = config.local.sys.borgsync;
|
|
in {
|
|
options.local.sys.borgsync = {
|
|
enable = mkEnableOption "borg backup to an rsync.net repo";
|
|
paths = mkOption {
|
|
type = with types; nullOr (coercedTo str singleton (listOf str));
|
|
default = null;
|
|
description = "Paths to back up.";
|
|
};
|
|
exclude = mkOption {
|
|
type = with types; listOf str;
|
|
description = "Exclude paths.";
|
|
default = [];
|
|
};
|
|
repoName = mkOption {
|
|
type = types.str;
|
|
description = "Remote rsync repository to back up to.";
|
|
};
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
services.borgbackup.jobs.rsync = {
|
|
paths = cfg.paths;
|
|
exclude = cfg.exclude;
|
|
user = "root";
|
|
group = "root";
|
|
doInit = true;
|
|
startAt = [
|
|
"hourly"
|
|
];
|
|
inhibitsSleep = true;
|
|
persistentTimer = true;
|
|
|
|
repo = "zh5777@zh5777.rsync.net:${cfg.repoName}";
|
|
encryption = {
|
|
mode = "repokey-blake2";
|
|
passCommand = "cat /var/trust/borg/${cfg.repoName}_passphrase";
|
|
};
|
|
compression = "auto,lz4";
|
|
prune = {
|
|
keep = {
|
|
hourly = 24;
|
|
daily = 7;
|
|
weekly = 4;
|
|
monthly = 12;
|
|
yearly = 99;
|
|
};
|
|
};
|
|
extraArgs = [
|
|
"--remote-path=borg14"
|
|
];
|
|
};
|
|
|
|
environment.sessionVariables.BORG_REMOTE_PATH = "borg14";
|
|
};
|
|
}
|