33 lines
892 B
Nix
33 lines
892 B
Nix
{ 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)}
|
|
''
|