{
  config,
  pkgs,
  ...
}: let
  genericBackupPath = "/var/lib/backups/";
  nixosContainersBackupPath = "/var/lib/nixos-containers/";
in rec {
  environment.systemPackages = with pkgs; [restic];

  sops.secrets."restic-backups-b2-repo-password" = {
    sopsFile = ./restic.sops.yaml;
  };
  sops.secrets."restic-backups-b2-environment" = {
    sopsFile = ./restic-environment.sops;
    format = "binary";
    path = "/etc/nixos/secrets/b2-env";
  };
  services = {
    restic.backups.b2 = {
      passwordFile = "/run/secrets/restic-backups-b2-repo-password";
      paths = [
        "/var/lib/foundryvtt"
        "/var/lib/gitea"
        "/var/lib/mastodon"
        "${nixosContainersBackupPath}"
      ];
      repository = "b2:cyplo-restic-vpsfree";
      backupPrepareCommand = ''
        systemctl stop container@mastodon.service
      '';
      backupCleanupCommand = ''
        systemctl start container@mastodon.service
      '';
      timerConfig = {OnCalendar = "daily";};
      environmentFile = "${config.sops.secrets.restic-backups-b2-environment.path}";
      exclude = ["cache"];
      pruneOpts = [
        "--keep-hourly 25"
        "--keep-daily 8"
        "--keep-weekly 5"
        "--keep-monthly 13"
        "--keep-yearly 2"
      ];
      checkOpts = [
        "--with-cache"
      ];
    };
  };

  systemd.services.restic-backups-b2 = {
    environment = {
      GOMAXPROCS = "1";
      GOGC = "20";
    };
    serviceConfig = {
      Nice = 19;
      IOSchedulingClass = "idle";
    };
  };
}
