{
  dream2nix,
  config,
  lib,
  ...
}: {
  imports = [
    dream2nix.modules.dream2nix.nodejs-package-json-v3
    dream2nix.modules.dream2nix.nodejs-granular-v3
    dream2nix.modules.dream2nix.nodejs-devshell-v3
  ];

  deps = {nixpkgs, ...}: {
    inherit (nixpkgs) pkg-config runCommandLocal rsync vips yj;
  };

  name = "tlaternet-templates";
  version = "0.1.0";

  mkDerivation = {
    src = config.deps.runCommandLocal "source" {nativeBuildInputs = [config.deps.yj];} ''
      cp -r ${./.} $out/
      chmod -R u+w $out
      yj < $out/package.yaml > $out/package.json
    '';

    nativeBuildInputs = [config.deps.yj];

    # The default phase (which is hidden in `preInstallPhases`) will
    # copy the full node_modules directory to the output, and symlink
    # executables and whatnot.
    #
    # Since this package's output is static HTML/JS, we do not want
    # that.
    preInstallPhases = lib.mkForce [];
    installPhase = ''
      cp -r dist $out
    '';
  };

  nodejs-granular-v3.deps = {
    sharp."0.28.3".mkDerivation.buildInputs = with config.deps; [
      vips
      pkg-config
    ];
  };

  nodejs-devshell-v3.nodeModules = {
    nodejs-granular-v3.deps.sharp."0.28.3".mkDerivation.buildInputs = with config.deps; [
      vips
      pkg-config
    ];
  };
}