query
On this page

substitute

pkgs.substitute

Functor
Docs pulled from | This Revision | 43 minutes ago


This is a wrapper around substitute in the stdenv.

Attribute arguments:

  • name (optional): The name of the resulting derivation
  • src: The path to the file to substitute
  • substitutions: The list of substitution arguments to pass See https://nixos.org/manual/nixpkgs/stable/#fun-substitute
  • replacements: Deprecated version of substitutions that doesn't support spaces in arguments.

Examples

```nix
{ substitute }:
substitute {
  src = ./greeting.txt;
  substitutions = [
    "--replace"
    "world"
    "paul"
  ];
}

See ../../test/substitute for tests


Noogle detected

This is a Functor

Learn about functors

Implementation

The following is the current implementation of this function.

args:

let
  name = if args ? name then args.name else baseNameOf (toString args.src);
  deprecationReplacement = lib.pipe args.replacements [
    lib.toList
    (map (lib.splitString " "))
    lib.concatLists
    (lib.concatMapStringsSep " " lib.strings.escapeNixString)
  ];
  optionalDeprecationWarning =
    # substitutions is only available starting 24.05.
    # TODO: Remove support for replacements sometime after the next release
    lib.warnIf (args ? replacements && lib.oldestSupportedReleaseIsAtLeast 2405) ''
      pkgs.substitute: For "${name}", `replacements` is used, which is deprecated since it doesn't support arguments with spaces. Use `substitutions` instead:
        substitutions = [ ${deprecationReplacement} ];'';
in
optionalDeprecationWarning stdenvNoCC.mkDerivation (
  {
    inherit name;
    builder = ./substitute.sh;
    inherit (args) src;
    preferLocalBuild = true;
    allowSubstitutes = false;
  }
  // args
  // lib.optionalAttrs (args ? substitutions) {
    substitutions =
      assert lib.assertMsg (lib.isList args.substitutions)
        ''pkgs.substitute: For "${name}", `substitutions` is passed, which is expected to be a list, but it's a ${builtins.typeOf args.substitutions} instead.'';
      lib.escapeShellArgs args.substitutions;
  }
)