{ 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"; }; }; }; }