nix/nixos/common/services/snapper.nix
2025-01-16 08:33:23 -08:00

62 lines
2.1 KiB
Nix

{ lib, pkgs, desktop, ... }:
let
btrfs-backup = pkgs.writeScriptBin "btrfs-backup" "${builtins.readFile ../software/cli/scripts/btrfs-backup.sh}";
in {
environment.systemPackages = [
pkgs.snapper
btrfs-backup
] ++ lib.optional (builtins.isString desktop) pkgs.btrfs-assistant;
# SSH key for btrfs-backups
sops.secrets."btrfs-backups/ssh_key" = {
sopsFile = ../../../secrets/secrets.yaml;
owner = "root";
};
sops.secrets."btrfs-backups/gotify_token" = {
sopsFile = ../../../secrets/secrets.yaml;
owner = "root";
};
services.snapper = {
snapshotRootOnBoot = true;
cleanupInterval = "1h";
snapshotInterval = "hourly";
configs = {
root = {
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
NUMBER_LIMIT = 10; # snapshotRootOnBoot cleanup
TIMELINE_LIMIT_YEARLY = 0;
TIMELINE_LIMIT_QUARTERLY = 2;
TIMELINE_LIMIT_MONTHLY = 3;
TIMELINE_LIMIT_WEEKLY = 4;
TIMELINE_LIMIT_DAILY = 7;
TIMELINE_LIMIT_HOURLY = 24;
SUBVOLUME = "/";
};
home = {
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
TIMELINE_LIMIT_YEARLY = 0;
TIMELINE_LIMIT_QUARTERLY = 2;
TIMELINE_LIMIT_MONTHLY = 3;
TIMELINE_LIMIT_WEEKLY = 4;
TIMELINE_LIMIT_DAILY = 7;
TIMELINE_LIMIT_HOURLY = 24;
SUBVOLUME = "/home";
};
nix = {
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
TIMELINE_LIMIT_YEARLY = 0;
TIMELINE_LIMIT_QUARTERLY = 2;
TIMELINE_LIMIT_MONTHLY = 3;
TIMELINE_LIMIT_WEEKLY = 4;
TIMELINE_LIMIT_DAILY = 7;
TIMELINE_LIMIT_HOURLY = 24;
SUBVOLUME = "/nix";
};
};
};
}