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