blob: 186b7a0e1ff6f8e64d2a1f64faf3c54e9caff8ea [file] [log] [blame]
{ pkgs, utils }:
let
lib = pkgs.lib;
in
file: lib.pipe file [
builtins.readFile
(builtins.split "\\\$\\{\\{([^}]*)}}")
(map (part:
if builtins.typeOf part == "string"
then part
else
import
(
(
pkgs.writeText "generated.nix" ("pkgs: lib: " + (builtins.elemAt part 0))
).outPath
)
pkgs
lib
))
(map (part:
if builtins.typeOf part == "string" then part
else if builtins.typeOf part == "path" then
let
stringified = toString part;
in
builtins.toString (utils.interpolateFile (
file + "/.." + (builtins.substring
(builtins.stringLength "/nix/store")
(builtins.stringLength
stringified)
stringified)
# ^ Somewhat of a hack, works because we know that the file path
# is a text file (i.e. not a directory) as we read it earlier and
# relative paths end up in /nix/store due to the writeText. Absolute
# paths are not supported
))
else
toString part
))
(builtins.concatStringsSep "")
]