{
  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
    ];
  };
}
