فا نیکسی

پشتیبانی از ساخت

pkgs.substitute

pkgs.substitute یک پوشان

substitute $infile $outfile --replace-fail @foo@ ${foopkg}/bin/foo

معادل است با:

{ substitute, foopkg }:
substitute {
  src = ./sourcefile.txt;
  substitutions = [
    "--replace"
    "@foo@"
    "${foopkg}/bin/foo"
  ];
}

pkgs.replaceVars

عبارت pkgs.replaceVars <src> <replacements> تمام نمونه‌های @varName@

#! @bash@/bin/bash

echo @unchanged@
@hello@/bin/hello --greeting @greeting@

درایویشن زیر جایگزینی‌هایی را روی @bash@، @hello@ و @greeting@ اعمال خواهد کرد:

{
  replaceVars,
  bash,
  hello,
}:
replaceVars ./say-goodbye.sh {
  inherit bash hello;
  greeting = "goodbye";
  unchanged = null;
}

به‌طوری که $out به چیزی شبیه به زیر منجر خواهد شد:

#! /nix/store/s30jrpgav677fpc9yvkqsib70xfmx7xi-bash-5.2p26/bin/bash

echo @unchanged@
/nix/store/566f5isbvw014h7knmzmxa5l6hshx43k-hello-2.12.1/bin/hello --greeting goodbye

توجه داشته باشید که در مقایسه با substituteAll قدیمی، unchanged = null باید به‌طور صریح تنظیم شود. هر الگوی @...@ ار

{ replaceVarsWith }:
replaceVarsWith {
  src = ./say-goodbye.sh;

  replacements = {
    inherit bash hello;
    greeting = "goodbye";
    unchanged = null;
  };

  name = "say-goodbye";
  dir = "bin";
  isExecutable = true;
  meta.mainProgram = "say-goodbye";
}

این کار فایل حاصل را قابل اجرا می‌کند، آن را در bin/say-goodbye قرار می‌دهد و صفات meta را به ترتیب تنظیم می‌کند.