Compare commits
2 Commits
162c35769c
...
8722afe2c8
Author | SHA1 | Date | |
---|---|---|---|
8722afe2c8 | |||
5b9b65bc1f |
33
backup.nix
33
backup.nix
@ -11,30 +11,7 @@ let
|
|||||||
runtimeInputs = [
|
runtimeInputs = [
|
||||||
pkgs.restic
|
pkgs.restic
|
||||||
];
|
];
|
||||||
text = ''
|
text = (builtins.readFile ./backup.sh);
|
||||||
if [ -z "$BACKUP_HELPER_DIRS" ]; then
|
|
||||||
echo "BACKUP_HELPER_DIRS is not set"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
exit_code=0;
|
|
||||||
for i in ''${BACKUP_HELPER_DIRS//,/ }; do
|
|
||||||
echo "Starting backup of $i";
|
|
||||||
if ! output=$(restic backup "$i"); then
|
|
||||||
exit_code=1;
|
|
||||||
echo "Backup of $i failed with exit code $?:"
|
|
||||||
echo "$output"
|
|
||||||
else
|
|
||||||
echo "Backup of $i successful:"
|
|
||||||
echo "$output"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ "$BACKUP_FORGET" -eq 1 ]; then
|
|
||||||
echo "Removing old backups"
|
|
||||||
output=$(restic forget -d 7 -w 4 -m 6 --keep-within 1d --prune)
|
|
||||||
echo "$output"
|
|
||||||
fi
|
|
||||||
exit "$exit_code";
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@ -50,6 +27,11 @@ in
|
|||||||
default = [ ];
|
default = [ ];
|
||||||
description = "Directories to be backed up.";
|
description = "Directories to be backed up.";
|
||||||
};
|
};
|
||||||
|
backup-commands = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
default = [ ];
|
||||||
|
description = "Backup the stdout of commands. Format strings like key:command";
|
||||||
|
};
|
||||||
schedule = lib.mkOption {
|
schedule = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "*-*-* 00:00:00";
|
default = "*-*-* 00:00:00";
|
||||||
@ -83,6 +65,9 @@ in
|
|||||||
}
|
}
|
||||||
// lib.attrsets.optionalAttrs (builtins.hasAttr "password-file" cfg) {
|
// lib.attrsets.optionalAttrs (builtins.hasAttr "password-file" cfg) {
|
||||||
RESTIC_PASSWORD_FILE = cfg.password-file;
|
RESTIC_PASSWORD_FILE = cfg.password-file;
|
||||||
|
}
|
||||||
|
// lib.attrsets.optionalAttrs (cfg.backup-commands != [ ]) {
|
||||||
|
BACKUP_HELPER_COMMANDS = lib.strings.concatStringsSep ";" cfg.backup-commands;
|
||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
49
backup.sh
Normal file
49
backup.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# If neither of BACKUP_HELPER_DIRS and BACKUP_HELPER_COMMANDS not set. Exit
|
||||||
|
if [ -z "$BACKUP_HELPER_DIRS" ] && [ -z "$BACKUP_HELPER_COMMANDS" ]; then
|
||||||
|
echo "BACKUP_HELPER_DIRS is not set"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
exit_code=0;
|
||||||
|
|
||||||
|
# Backup directories
|
||||||
|
if [ -n "$BACKUP_HELPER_DIRS" ]; then
|
||||||
|
for i in ${BACKUP_HELPER_DIRS//,/ }; do
|
||||||
|
echo "Starting backup of $i";
|
||||||
|
if ! output=$(restic backup "$i"); then
|
||||||
|
exit_code=1;
|
||||||
|
echo "Backup of $i failed with exit code $?:"
|
||||||
|
echo "$output"
|
||||||
|
else
|
||||||
|
echo "Backup of $i successful:"
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Backup command outputs
|
||||||
|
if [ -n "$BACKUP_HELPER_COMMANDS" ]; then
|
||||||
|
IFS=";" read -r -a pairs <<< "$BACKUP_HELPER_COMMANDS"
|
||||||
|
|
||||||
|
for pair in "${pairs[@]}"; do
|
||||||
|
IFS=":" read -r key value <<< "$pair"
|
||||||
|
|
||||||
|
if ! output=$(restic backup --stdin-filename "$key" --stdin-from-command -- "$value"); then
|
||||||
|
exit_code=1;
|
||||||
|
echo "Backup of $i failed with exit code $?:"
|
||||||
|
echo "$output"
|
||||||
|
else
|
||||||
|
echo "Backup of $i successful:"
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$BACKUP_FORGET" -eq 1 ]; then
|
||||||
|
echo "Removing old backups"
|
||||||
|
output=$(restic forget -d 7 -w 4 -m 6 --keep-within 1d --prune)
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
exit "$exit_code"
|
22
flake.nix
22
flake.nix
@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
outputs = { self, nixpkgs }:
|
outputs =
|
||||||
|
{ self, nixpkgs }:
|
||||||
let
|
let
|
||||||
allSystems = [
|
allSystems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
@ -11,24 +12,31 @@
|
|||||||
"x86_64-darwin"
|
"x86_64-darwin"
|
||||||
"aarch64-darwin"
|
"aarch64-darwin"
|
||||||
];
|
];
|
||||||
forAllSystems = f: nixpkgs.lib.genAttrs allSystems (system: f {
|
forAllSystems =
|
||||||
|
f:
|
||||||
|
nixpkgs.lib.genAttrs allSystems (
|
||||||
|
system:
|
||||||
|
f {
|
||||||
pkgs = import nixpkgs { inherit system; };
|
pkgs = import nixpkgs { inherit system; };
|
||||||
});
|
}
|
||||||
|
);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
nixosModules.backup-helper = import ./backup.nix;
|
nixosModules.backup-helper = import ./backup.nix;
|
||||||
nixosModules.default = self.nixosModules.backup-helper;
|
nixosModules.default = self.nixosModules.backup-helper;
|
||||||
|
|
||||||
devShells = forAllSystems ({ pkgs }: {
|
devShells = forAllSystems (
|
||||||
|
{ pkgs }:
|
||||||
|
{
|
||||||
default = pkgs.mkShell {
|
default = pkgs.mkShell {
|
||||||
packages = with pkgs;
|
packages = with pkgs; [
|
||||||
[
|
|
||||||
restic
|
restic
|
||||||
bash
|
bash
|
||||||
jq
|
jq
|
||||||
curl
|
curl
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
}
|
||||||
|
);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user