summaryrefslogtreecommitdiffstats
path: root/nixos/modules/services/backup/borgbackup.nix
diff options
context:
space:
mode:
authorYorick van Pelt <yorick@yorickvanpelt.nl>2019-01-10 17:24:12 +0100
committerdanbst <abcz2.uprola@gmail.com>2019-12-26 07:50:03 +0200
commit470c8a2a36dc6c20762d8ba8fb206a88101b8bde (patch)
treebb23871d8c1ee626e3e7a9c65aa8a86cbc68eaca /nixos/modules/services/backup/borgbackup.nix
parentaa1a41b60b22c655fa47ddecff1514c772b995e1 (diff)
nixos/borgbackup: install job wrappers to systemPackages for easy borg access
Currently to run borg job manually, you have to use systemctl: ``` $ systemctl start borgbackup-job-jobname.service ``` This commit makes wrappers around borg jobs available in $PATH, which have BORG_REPO and connection args set correctly: ``` $ borg-job-jobname list $ borg-job-jobname mount ::jobname-archive-2019-12-25T00:01:29 /mnt/some-path $ borg-job-jobname create ::test /some/path ``` Closes: https://github.com/NixOS/nixpkgs/pull/64888 Co-authored-by: Danylo Hlynskyi <abcz2.uprola@gmail.com>
Diffstat (limited to 'nixos/modules/services/backup/borgbackup.nix')
-rw-r--r--nixos/modules/services/backup/borgbackup.nix27
1 files changed, 24 insertions, 3 deletions
diff --git a/nixos/modules/services/backup/borgbackup.nix b/nixos/modules/services/backup/borgbackup.nix
index 10d42325a6b1..a2eb80c55a8c 100644
--- a/nixos/modules/services/backup/borgbackup.nix
+++ b/nixos/modules/services/backup/borgbackup.nix
@@ -68,7 +68,7 @@ let
{ BORG_PASSPHRASE = passphrase; }
else { };
- mkBackupService = name: cfg:
+ mkBackupService = name: cfg:
let
userHome = config.users.users.${cfg.user}.home;
in nameValuePair "borgbackup-job-${name}" {
@@ -98,6 +98,23 @@ let
inherit (cfg) startAt;
};
+ # utility function around makeWrapper
+ mkWrapperDrv = {
+ original, name, set ? {}
+ }:
+ pkgs.runCommandNoCC "${name}-wrapper" {
+ buildInputs = [ pkgs.makeWrapper ];
+ } (with lib; ''
+ makeWrapper "${original}" "$out/bin/${name}" \
+ ${concatStringsSep " \\\n " (mapAttrsToList (name: value: ''--set ${name} "${value}"'') set)}
+ '');
+
+ mkBorgWrapper = name: cfg: mkWrapperDrv {
+ original = "${pkgs.borgbackup}/bin/borg";
+ name = "borg-job-${name}";
+ set = { BORG_REPO = cfg.repo; } // (mkPassEnv cfg) // cfg.environment;
+ };
+
# Paths listed in ReadWritePaths must exist before service is started
mkActivationScript = name: cfg:
let
@@ -176,7 +193,11 @@ in {
###### interface
options.services.borgbackup.jobs = mkOption {
- description = "Deduplicating backups using BorgBackup.";
+ description = ''
+ Deduplicating backups using BorgBackup.
+ Adding a job will cause a borg-job-NAME wrapper to be added
+ to your system path, so that you can perform maintenance easily.
+ '';
default = { };
example = literalExample ''
{
@@ -623,6 +644,6 @@ in {
users = mkMerge (mapAttrsToList mkUsersConfig repos);
- environment.systemPackages = with pkgs; [ borgbackup ];
+ environment.systemPackages = with pkgs; [ borgbackup ] ++ (mapAttrsToList mkBorgWrapper jobs);
});
}