anchor.diff:            Location of Hydra mirror data
           '';
         };
  +
  +      enableBinaryPatches = mkOption {
  +        default = false;
  +        description = ''
  +          Whether to enable generating binary patches for the mirrored channels.
  +        '';
  +      };
       };
   
     };
   
     config = mkIf cfg.enable {
     
  -    services.cron.systemCronJobs = map cronjob cfg.jobsets ;
  +    users.extraUsers = singleton
  +      { name = cfg.user; };
  +
  +    services.cron.systemCronJobs = map cronjob cfg.jobsets;
   
       system.activationScripts.hydraChannelMirror = stringAfter [ "stdio" "users" ]
         ''
           mkdir -m 0755 -p ${cfg.dataDir}
  +        chown ${cfg.user} ${cfg.dataDir}
  +
           mkdir -m 0755 -p ${cfg.dataDir}/nars
  +        chown ${cfg.user} ${cfg.dataDir}/nars
  +
           mkdir -m 0755 -p ${cfg.dataDir}/patches
  -        mkdir -m 0755 -p ${cfg.dataDir}/channels
  -        ln -fs ${cfg.dataDir}/nars ${cfg.dataDir}/channels/nars 
  -        ln -fs ${cfg.dataDir}/patches ${cfg.dataDir}/channels/patches 
  +        chown ${cfg.user} ${cfg.dataDir}/patches
  +
           mkdir -m 0755 -p ${cfg.dataDir}/logs
  +        chown ${cfg.user} ${cfg.dataDir}/logs
  +
           ${concatMapStrings (j : ''
  -        mkdir -m 0755 -p ${cfg.dataDir}/channels/${j.relURL}
  +          mkdir -m 0755 -p ${cfg.dataDir}/{j.project}/channels/${j.name}
  +          chown ${cfg.user} ${cfg.dataDir}/{j.project}/channels/${j.name}
           '') cfg.jobsets}
         '';
       
  
positive.code: with pkgs.lib;
  
  let 
    cfg = config.services.hydraChannelMirror ;
    mirrorChannel = pkgs.fetchsvn {
      url = https://svn.nixos.org/repos/nix/release/trunk/channels/mirror-channel.pl;
      rev = 24132;
      sha256 = "02xvswbbr2sj9k1wfraa0j9053vf6w88nhk15qwzs8nkm180n820";
    };
    cronjob = jobset : ''
      ${cfg.period} root ENABLE_PATCHES=1 PATH=${config.environment.nix}/libexec/nix:$PATH perl -I${config.environment.nix}/libexec/nix ${mirrorChannel} ${cfg.hydraURL}/jobset/${jobset.project}/${jobset.jobset}/channel/latest ${cfg.dataDir}/channels/${jobset.relURL} ${cfg.dataDir}/nars ${cfg.mirrorURL}/nars ${cfg.dataDir}/patches ${cfg.mirrorURL}/patches ${if jobset.nixexprs == "" then "" else "${cfg.hydraURL}/job/${jobset.project}/${jobset.jobset}/${jobset.nixexprs}/latest/download-by-type/file/source-dist"} >> ${cfg.dataDir}/logs/${jobset.name}.log
    '';
  in
  {
    options = {
    
  
negative.code:         '';
        };
  
        user = mkOption {
          default = "hydra-mirror";
          description = ''
            User running the Hydra mirror script.
          '';
        };
  
        jobsets = mkOption {
          default = [ { name = "nixpkgs-unstable"; project = "nixpkgs"; jobset = "trunk"; nixexprs = "tarball"; } ];
          description = ''
            List of jobsets to mirror.
          '';
  