10   inherit (config.users) users;
 
  11   backupTarget = "off4";
 
  14     lib.mapAttrs (_n: v: lib.recursiveUpdate v conf) {
 
  17           targetHost = "aubergine.local";
 
  20           target = "backup@${targetHost}:${backupTarget}/julm/backup/${hostName}";
 
  26             "--no-privilege-elevation"
 
  27             "--preserve-properties"
 
  28             "--preserve-recordsize"
 
  33             "${hostName}/root/nix"
 
  35             "${hostName}/root/var/cache"
 
  37             "${hostName}/root/var/log"
 
  39             "${hostName}/root/home/julm/.cache"
 
  41             "${hostName}/root/home/julm/Downloads"
 
  43             "${pkgs.writeText "ssh-config" ''
 
  45                 Ciphers aes128-gcm@openssh.com
 
  47                 StrictHostKeyChecking yes
 
  48                 UserKnownHostsFile ${pkgs.writeText "known_hosts" ''
 
  49                   ${targetHost} ${lib.readFile ../aubergine/ssh/host.key.pub}
 
  57   networking.nftables.ruleset = lib.mkAfter ''
 
  60         skuid @nixos_syncoid_uids \
 
  63           comment "syncoid: SSH"
 
  67   systemd.tmpfiles.rules = [
 
  68     "z /dev/zfs 0660 - ${config.users.groups."disk".name}  -"
 
  70   # ExplanationNote: give access to /var/run/avahi-daemon/socket
 
  71   # Using /var/run is not working due to RootDirectoryStartOnly=true
 
  72   systemd.services."syncoid-${hostName}-root".serviceConfig = {
 
  73     BindReadOnlyPaths = [ "/var/run" ];
 
  74     RootDirectoryStartOnly = lib.mkForce false;
 
  75     ExecStartPost = pkgs.writeShellScript "zfs-fix-bookmarks" ''
 
  77       for s in $(zfs list -Hrpt snapshot -o name ${hostName}/root); do
 
  78         zfs bookmark "$s" "''${s//@/#}" || true
 
  84     interval = "*-*-* *:05:00";
 
  86     sshKey = "ssh.key:${syncoid/ssh.key.cred}";
 
  91       #"--no-privilege-elevation"
 
  93       #"--preserve-recordsize"
 
  94       #"--preserve-properties"
 
  97       serviceConfig.Group = config.users.groups."disk".name;
 
  99     commands = { } // backupConf { };
 
 101   programs.bash.interactiveShellInit = ''
 
 106       if ! zpool list ${backupTarget}
 
 107         then dst=aubergine.sp:
 
 109       sudo syncoid --sshkey ~julm/.ssh/id_ed25519 \
 
 110         --create-bookmark --no-sync-snap --no-privilege-elevation \
 
 111         --preserve-properties --preserve-recordsize \
 
 112         --recursive --sendoptions=w --recvoptions=u \
 
 113         --exclude ${hostName}/root/nix \
 
 114         --exclude ${hostName}/root/var/cache \
 
 115         --exclude ${hostName}/root/var/log \
 
 116         --exclude ${hostName}/root/home/julm/.cache \
 
 117         --exclude ${hostName}/root/home/julm/Downloads \
 
 119         ''${dst}${backupTarget}/julm/backup/${hostName}
 
 120       zfs-fix-bookmarks ${hostName}/root 2>/dev/null