dotfiles/curacao/backup/default.nix

82 lines
2 KiB
Nix
Raw Normal View History

2023-12-16 22:22:14 +01:00
{ pkgs, lib, ... }:
# MANU Snapper is not able to create the snapshot directory, so you'll need to do this after eventually running the backup script:
# sudo btrfs subvol create /mnt/razmo/$subvolume/.snapshots
let
2024-12-15 00:29:51 +01:00
backup_subvolumes = [
"nixos"
"home.rapido"
"home.nixos"
];
2023-12-16 22:22:14 +01:00
backup_app = pkgs.writeShellApplication {
name = "backup-subvolume";
2024-12-15 00:29:51 +01:00
runtimeInputs = with pkgs; [
coreutils
btrfs-progs
];
2023-12-16 22:22:14 +01:00
text = builtins.readFile ./backup.sh;
};
2024-12-15 00:29:51 +01:00
snapper_subvolumes = [
"nixos"
"home.rapido"
"home.razmo"
"home.nixos"
];
2023-12-16 22:22:14 +01:00
in
{
services =
let
default = {
# filesystem type
FSTYPE = "btrfs";
# run daily number cleanup
NUMBER_CLEANUP = true;
NUMBER_MIN_AGE = 1800;
NUMBER_LIMIT = 25;
# create hourly snapshots
TIMELINE_CREATE = true;
# cleanup hourly snapshots after some time
TIMELINE_CLEANUP = true;
TIMELINE_MIN_AGE = 1800;
2024-06-29 18:10:50 +02:00
TIMELINE_LIMIT_HOURLY = "24";
TIMELINE_LIMIT_DAILY = "31";
TIMELINE_LIMIT_WEEKLY = "8";
TIMELINE_LIMIT_MONTHLY = "0";
TIMELINE_LIMIT_YEARLY = "0";
2023-12-16 22:22:14 +01:00
# cleanup empty pre-post-pairs
EMPTY_PRE_POST_CLEANUP = true;
};
in
{
2024-12-15 00:29:51 +01:00
snapper.configs = lib.attrsets.mergeAttrsList (
map (s: {
"${s}" = default // {
SUBVOLUME = "/mnt/razmo/${s}";
};
}) snapper_subvolumes
);
2023-12-16 22:22:14 +01:00
};
systemd = {
services.bkp_rapido = {
description = "Make a snapshot of the SSD to the HDD";
before = [ "snapper-timeline.service" ];
serviceConfig = {
Type = "oneshot";
ExecStart = map (s: "${backup_app}/bin/backup-subvolume ${s}") backup_subvolumes;
};
# TODO Harden
};
timers.bkp_rapido = {
description = "Regular snapshot of SSD to HDD";
timerConfig = {
OnCalendar = "hourly";
};
wantedBy = [ "timers.target" ];
};
};
}