{
  lib,
  self,
  system,
  writeShellApplication,
  git,
  nix,
  yq-go,
}: let
  selfPackages = self.packages.${system};
  inherit (selfPackages.server.config.deps) cargo;
  inherit (selfPackages.templates.config.deps) npm;

  npm-check-updates =
    (builtins.elemAt (lib.attrValues
      selfPackages.templates.config.nodejs-granular-v3.deps.npm-check-updates)
    0)
    .package-func
    .result;
in
  writeShellApplication {
    name = "update";
    runtimeInputs = [cargo git nix npm npm-check-updates yq-go];
    text = builtins.readFile ./scripts/update.sh;
  }