{
  buildFHSEnv,
  curl,
  lib,
  writeShellScriptBin,
  gaudiHash ? null,
  unwrapped,
}: let
  unwrappedWithGaudi = unwrapped.override {inherit gaudiHash;};
in
  buildFHSEnv {
    name = "gaudi";

    targetPkgs = pkgs: [
      unwrappedWithGaudi.ase-idprotect.lib
      unwrappedWithGaudi.gaudi

      (writeShellScriptBin "launch-gaudi" ''
        set -o errexit
        set -o pipefail
        set -o nounset

        PATH="${lib.makeBinPath [curl]}:$PATH"

        echo "$0: testing for incompatible releases..." >&2

        jar_name=bccr-firma-fva-clienteMultiplataforma.jar
        url="https://www.firmadigital.go.cr/Bccr.Firma.Fva.Actualizador.ClienteFirmadorJava//recursosLiberica17/actualizador/$jar_name"
        ca_file="${unwrappedWithGaudi.bccr-cacerts}/root-ca.pem"
        url_hash=$(curl -sS --cacert "$ca_file" "$url" | sha256sum | cut -d' ' -f1)
        jar_path="${unwrappedWithGaudi.gaudi}/share/java/$jar_name"
        jar_hash=$(sha256sum "$jar_path" | cut -d' ' -f1)

        if [ "$url_hash" != "$jar_hash" ]; then
          last_modified=$(curl -sS --head --cacert "$ca_file" "$url" | grep -i '^last-modified:' | head -1)

          echo "$0: sha256 mismatch for $jar_path due to server-side update" >&2
          echo "$0:   expected:      $url_hash" >&2
          echo "$0:   actual:        $jar_hash" >&2
          echo "$0:   $last_modified" >&2
          echo "$0: run the following to download the new client JAR, then update your derivation:" >&2
          echo "$0: \$ ${unwrappedWithGaudi.update-gaudi}" >&2

          exit 1
        fi

        cache_path_1="''${XDG_CACHE_HOME:-$HOME/.cache}/Agente-GAUDI"
        cache_path_2="''${XDG_CACHE_HOME:-$HOME/.cache}/Firmador-BCCR"

        for cache_path in "$cache_path_1" "$cache_path_2"; do
          mkdir -p "$cache_path"
          ln -sf -- ${unwrappedWithGaudi.gaudi}/share/java/bccr-firma-fva-clienteMultiplataforma.jar "$cache_path"
        done

        cp -f --no-preserve=mode -t "$cache_path_1" -- "${unwrappedWithGaudi.gaudi}/share/java/config.properties"

        exec gaudi
      '')
    ];

    runScript = "launch-gaudi";
  }
