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