anchor.diff:          '';
         };
   
  +      user = mkOption {
  +        default = "hydra-mirror";
  +        description = ''
  +          User running the Hydra mirror script.
  +        '';
  +      };
  +
         jobsets = mkOption {
  -        default = [ rec { name = "nixpkgs-unstable"; project = "nixpkgs"; jobset = "trunk"; nixexprs = "tarball"; relURL = "nixpkgs/channels/${name}"; } ];
  +        default = [ { name = "nixpkgs-unstable"; project = "nixpkgs"; jobset = "trunk"; nixexprs = "tarball"; } ];
           description = ''
             List of jobsets to mirror.
           '';
  
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:           Location of Hydra mirror data
          '';
        };
  
        enableBinaryPatches = mkOption {
          default = false;
          description = ''
            Whether to enable generating binary patches for the mirrored channels.
          '';
        };
      };
  
    };
  
    config = mkIf cfg.enable {
    
      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
          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}/{j.project}/channels/${j.name}
            chown ${cfg.user} ${cfg.dataDir}/{j.project}/channels/${j.name}
          '') cfg.jobsets}
        '';
      
  