## adapted from go-ethereum.nix in nixpkgs repository

{
    pkgs,
    lib,
    stdenv,
    buildGoModule,
    # nixosTests,
    tag_version,
    vendor_hash,
}:

buildGoModule {
    pname = "go-ethereum";
    version = tag_version;

    src = fetchGit {
        url = "https://github.com/ethereum/go-ethereum.git";
        ref = "refs/tags/${tag_version}";
    };

    proxyVendor = false;

    vendorHash = vendor_hash;

    doCheck = false;

    subPackages = [ "cmd/geth" ];

    ## Following upstream: https://github.com/ethereum/go-ethereum/blob/v1.11.6/build/ci.go#L218
    tags = [ "urfave_cli_no_docs" ];

    ## Fix for usb-related segmentation faults on darwin
    propagatedBuildInputs = lib.optionals stdenv.hostPlatform.isDarwin [
       pkgs.libobjc
       pkgs.IOKit
    ];

    # passthru.tests = { inherit (nixosTests) geth; };

    meta = with lib; {
        homepage = "https://geth.ethereum.org/";
        description = "Official golang implementation of the Ethereum protocol";
        license = with licenses; [
            lgpl3Plus
            gpl3Plus
        ];
        maintainers = with maintainers; [ RaghavSood ];
        mainProgram = "geth";
    };
}