{
  stdenv,
  lib,
  makeWrapper,
  patchelf,
  steamPackages,
  replace-secret,
}: let
  # Use the directory in which starbound is installed so steamcmd
  # doesn't have to be reinstalled constantly (we're using DynamicUser
  # with StateDirectory to persist this).
  steamcmd = steamPackages.steamcmd.override {
    steamRoot = "/var/lib/starbound/.steamcmd";
  };
  wrapperPath = lib.makeBinPath [patchelf steamcmd replace-secret];
in
  stdenv.mkDerivation {
    name = "starbound-update-script";
    nativeBuildInputs = [makeWrapper];
    dontUnpack = true;
    patchPhase = ''
      interpreter="$(cat $NIX_CC/nix-support/dynamic-linker)"
      substitute ${./launch-starbound.sh} launch-starbound --subst-var interpreter
    '';
    installPhase = ''
      mkdir -p $out/bin
      cp launch-starbound $out/bin/launch-starbound
      chmod +x $out/bin/launch-starbound
    '';
    postFixup = ''
      wrapProgram $out/bin/launch-starbound \
          --prefix PATH : "${wrapperPath}"
    '';
  }