{ lib, runCommand, fetchDepotFile }: { name , caches , postScript ? "" }: with lib; let emitStep = { FileName, Flags, Chunks, ... }@file: if bitAnd Flags 64 != 0 || Chunks == [] then '' mkdir -p $out/'${FileName}' '' else let drv = fetchDepotFile file; in '' mkdir -p $out/'${drv.passthru.dirname}' ln -s '${drv}' $out/'${FileName}' ''; emitManifest = cache: with cache.passthru; let sillyPathComponent = if lib.versionAtLeast depotdownloader.version "3.1.0" then "manifest_" else ".DepotDownloader/"; json = "${cache}/${sillyPathComponent}${toString depot}_${manifest}.json"; mkStep = file: emitStep (file // { inherit cache; }); in concatMapStrings mkStep (importJSON json).Files; in runCommand name {} '' ${concatMapStringsSep "\n" emitManifest caches} ${postScript} ''