{
  lib,
  fetchFromGitHub,
  buildGoModule,
  envsubst,
  coreutils,

  writers,
  nix-update,
}:
let
  envsubstBin = lib.getExe envsubst;
in
buildGoModule (drv: {
  pname = "crowdsec-firewall-bouncer";
  version = drv.src.rev;

  src = fetchFromGitHub {
    owner = "crowdsecurity";
    repo = "cs-firewall-bouncer";
    rev = "0.0.34";
    sha256 = "sha256-lDO9pwPkbI+FDTdXBv03c0p8wbkRUiIDNl1ip3AZo2g=";
  };

  vendorHash = "sha256-SbpclloBgd9vffC0lBduGRqPOqmzQ0J91/KeDHCh0jo=";

  postInstall = ''
    mkdir -p $out/lib/systemd/system

    CFG=/var/lib/crowdsec/config BIN=$out/bin/cs-firewall-bouncer ${envsubstBin} \
      -i ./config/crowdsec-firewall-bouncer.service \
      -o $out/lib/systemd/system/crowdsec-firewall-bouncer.service

    substituteInPlace $out/lib/systemd/system/crowdsec-firewall-bouncer.service \
      --replace-fail /bin/sleep ${coreutils}/bin/sleep
  '';

  passthru.updateScript =
    writers.writeNuBin "update-crowdsec-firewall-bouncer"
      {
        makeWrapperArgs = [
          "--prefix"
          "PATH"
          ":"
          (lib.makeBinPath [ nix-update ])
        ];
      }
      ''
        nix-update --flake --format crowdsec-firewall-bouncer
      '';
})
