{ lib, fetchAsset, runCommandNoCC }:

rootDir: let

  prefix = (toString rootDir) + "/";

  files = lib.filesystem.listFilesRecursive rootDir;

  hydrate = index: fetchAsset { inherit index; };

  isDvc = file: lib.strings.hasSuffix ".dvc" (toString file);

  relative = file: lib.strings.removePrefix prefix (toString file);

  files' = builtins.partition isDvc files;

  filesRaw = map relative files'.wrong;

  filesDvc = map (file: rec {
    dvc = hydrate file;
    installPath = (builtins.dirOf (relative file)) + "/${dvc.name}";
  }) files'.right;

  installFile = file: "install -Dm644 ${file} $out/${file}";

  installDvc = dvc: "install -Dm644 ${dvc.dvc} $out/${dvc.installPath}";

in runCommandNoCC (builtins.baseNameOf rootDir) {} ''
  cd ${rootDir}
  mkdir $out
  ${lib.concatStringsSep "\n" (map installFile filesRaw)}
  ${lib.concatStringsSep "\n" (map installDvc filesDvc)}
''