10   inherit (config.users) users;
 
  11   pumpkinBackupDataset = "off4";
 
  14     lib.mapAttrs (_n: v: lib.recursiveUpdate v conf) {
 
  17           targetHost = "aubergine.local";
 
  20           target = "backup@${targetHost}:${pumpkinBackupDataset}/julm/backup/pumpkin";
 
  26             "--no-privilege-elevation"
 
  27             "--preserve-properties"
 
  28             "--preserve-recordsize"
 
  35             "pumpkin/root/var/cache"
 
  37             "pumpkin/root/var/log"
 
  39             "pumpkin/root/home/julm/.cache"
 
  41             "pumpkin/root/home/julm/games"
 
  43             "pumpkin/root/home/julm/Downloads"
 
  45             "${pkgs.writeText "ssh-config" ''
 
  47                 Ciphers aes128-gcm@openssh.com
 
  49                 StrictHostKeyChecking yes
 
  50                 UserKnownHostsFile ${pkgs.writeText "known_hosts" ''
 
  51                   ${targetHost} ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN/cT/L3dF7uoR3s7NB59NiKjuk35I6x+7MK5zhwOy6k
 
  59   networking.nftables.ruleset = lib.mkAfter ''
 
  62         skuid @nixos_syncoid_uids \
 
  65           comment "syncoid: SSH"
 
  69   systemd.tmpfiles.rules = [
 
  70     "z /dev/zfs 0660 - ${config.users.groups."disk".name}  -"
 
  72   # ExplanationNote: give access to /var/run/avahi-daemon/socket
 
  73   # Using /var/run is not working due to RootDirectoryStartOnly=true
 
  74   systemd.services.syncoid-pumpkin-root.serviceConfig.BindReadOnlyPaths = [ "/var/run" ];
 
  75   systemd.services.syncoid-pumpkin-root.serviceConfig.RootDirectoryStartOnly = lib.mkForce false;
 
  76   systemd.services.syncoid-pumpkin-root.serviceConfig.ExecStartPost =
 
  77     pkgs.writeShellScript "zfs-fix-bookmarks" ''
 
  79       for s in $(zfs list -Hrpt snapshot -o name pumpkin); do
 
  80         zfs bookmark "$s" "''${s//@/#}" || true
 
  85     interval = "*-*-* *:05:00";
 
  87     sshKey = "ssh.key:${syncoid/ssh.key.cred}";
 
  92       #"--no-privilege-elevation"
 
  94       #"--preserve-recordsize"
 
  95       #"--preserve-properties"
 
  98       serviceConfig.Group = config.users.groups."disk".name;
 
 100     commands = { } // pumpkin2off { };
 
 102   programs.bash.interactiveShellInit = ''
 
 107       if ! zpool list ${pumpkinBackupDataset}
 
 108         then dst=aubergine.sp:
 
 110       sudo syncoid --sshkey ~julm/.ssh/id_ed25519 \
 
 111         --create-bookmark --no-sync-snap --no-privilege-elevation \
 
 112         --preserve-properties --preserve-recordsize \
 
 113         --recursive --sendoptions=w --recvoptions=u \
 
 114         --exclude pumpkin/root/nix \
 
 115         --exclude pumpkin/root/var/cache \
 
 116         --exclude pumpkin/root/var/log \
 
 117         --exclude pumpkin/root/home/julm/.cache \
 
 118         --exclude pumpkin/root/home/julm/games \
 
 119         --exclude pumpkin/root/home/julm/Downloads \
 
 121         ''${dst}${pumpkinBackupDataset}/julm/backup/pumpkin
 
 122       zfs-fix-bookmarks pumpkin 2>/dev/null