{ pkgs
, lib
, config
, ... }: with lib; let
  cfg = config.global.fs.zfs.replication;
in mkIf cfg.enable {
  services.syncoid = {
    enable = mkDefault true;
    interval = mkDefault "daily";
    sshKey = mkDefault "/var/lib/syncoid/.ssh/id_ed25519";
    commonArgs = [
      "--recursive"
      "--mbuffer-size=128M"
      "--delete-target-snapshots"
      "--sshport=${toString cfg.port}"
    ];
    localSourceAllow = mkOptionDefault [ "mount" ];

    commands = (lists.foldr (name: commands: commands // {
      "${config.global.fs.store}/${name}" = {
        inherit (cfg) sendOptions;
        target = "${cfg.remote}/${name}";
      };
    }) { }) cfg.datasets;
  };

  users.users.syncoid.uid = 82;
  users.groups.syncoid.gid = 82;
  environment.persistence."/nix/persist/fhs".directories = [ "/var/lib/syncoid" ];
}
