at master 1.3 kB view raw
1{ pkgs, lib, ... }: 2 3{ 4 listFilesInDir = 5 src: lib.attrsets.mapAttrsToList (name: value: "${src}/${name}") (builtins.readDir src); 6 inDirReplace = 7 src: dst: replacements: 8 lib.pipe src [ 9 # get filenames in src directory 10 builtins.readDir 11 (lib.attrsets.mapAttrsToList (name: value: "${name}")) 12 # call `substituteAll` on all files 13 ( 14 let 15 substitutedSource = file: { 16 source = ( 17 pkgs.substituteAll ( 18 { 19 src = "/${src}/${file}"; 20 isExecutable = true; 21 } 22 // replacements 23 ) 24 ); 25 }; 26 in 27 builtins.map (file: lib.attrsets.nameValuePair "${dst}/${file}" (substitutedSource file)) 28 ) 29 builtins.listToAttrs 30 ]; 31 concatFilesReplace = 32 filenames: replacements: 33 let 34 fromStrings = lib.attrsets.mapAttrsToList (name: value: "@${name}@") replacements; 35 in 36 let 37 toStrings = lib.attrsets.mapAttrsToList (name: value: "${value}") replacements; 38 in 39 let 40 fileToString = file: builtins.replaceStrings fromStrings toStrings (builtins.readFile file); 41 in 42 builtins.concatStringsSep "\n" (builtins.map fileToString filenames); 43}