anchor.diff:  
     config = mkIf cfg.enable {
       assertions =
  -      [ { assertion = cfg.directories != [];
  +      (mapAttrsToList (name: cfg:
  +        { assertion = cfg.directories != [];
             message = "Must specify directories for Tarsnap to back up";
  -        }
  +        }) cfg.config) ++
  +      (mapAttrsToList (name: cfg:
           { assertion = cfg.lowmem -> !cfg.verylowmem && (cfg.verylowmem -> !cfg.lowmem);
             message = "You cannot set both lowmem and verylowmem";
  -        }
  -      ];
  -
  -    systemd.services.tarsnap-backup = {
  -      description = "Tarsnap Backup process";
  +        }) cfg.config);
  +
  +    systemd.services."tarsnap@" = {
  +      description = "Tarsnap Backup of '%i'";
  +      requires    = [ "network.target" ];
  +
         path = [ pkgs.tarsnap pkgs.coreutils ];
  +      scriptArgs = "%i";
         script = ''
           mkdir -p -m 0755 $(dirname ${cfg.cachedir})
           mkdir -p -m 0600 ${cfg.cachedir}
  -        exec tarsnap --configfile ${configFile} -c -f ${cfg.label}-$(date +"%Y%m%d%H%M%S") ${concatStringsSep " " cfg.directories}
  +        DIRS=`cat /etc/tarsnap/$1.dirs`
  +        exec tarsnap --configfile /etc/tarsnap/$1.conf -c -f $1-$(date +"%Y%m%d%H%M%S") $DIRS
         '';
       };
   
  -    services.cron.systemCronJobs = optional cfg.enable
  -      "${cfg.period} root ${config.systemd.package}/bin/systemctl start tarsnap-backup.service";
  +    services.cron.systemCronJobs = mapAttrsToList (name: cfg:
  +      "${cfg.period} root ${config.systemd.package}/bin/systemctl start tarsnap@${name}"
  +    ) cfg.config;
  +
  +    environment.etc =
  +      (mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.conf"
  +        { text = configFile cfg;
  +        }) cfg.config) //
  +      (mapAttrs' (name: cfg: nameValuePair "tarsnap/${name}.dirs"
  +        { text = concatStringsSep " " cfg.directories;
  +        }) cfg.config);
   
       environment.systemPackages = [ pkgs.tarsnap ];
     };
  
positive.code:         '';
        };
  
        label = mkOption {
          type = types.str;
          default = "nixos";
          description = ''
            Specifies the label for archives created by Tarsnap. The
            full name will be
            <literal>label-$(date+"%Y%m%d%H%M%S")</literal>. For
            example, by default your backups will look similar to
            <literal>nixos-20140301011501</literal>.
          '';
        };
  
  
negative.code: 
    optionalNullStr = e: v: if e == null then "" else v;
  
    configFile = cfg: ''
      cachedir ${config.services.tarsnap.cachedir}
      keyfile  ${config.services.tarsnap.keyfile}
      ${optionalString cfg.nodump "nodump"}
      ${optionalString cfg.printStats "print-stats"}
      ${optionalNullStr cfg.checkpointBytes "checkpoint-bytes "+cfg.checkpointBytes}
  