lol
1{
2 lib,
3 buildGoModule,
4 fetchFromGitHub,
5 nix-update-script,
6 nodejs,
7 pnpm_9,
8}:
9
10let
11 pname = "pgrok";
12 version = "1.4.5";
13 src = fetchFromGitHub {
14 owner = "pgrok";
15 repo = "pgrok";
16 tag = "v${version}";
17 hash = "sha256-eDtYnsHZpdIGcgRGHTptlfVf//bxup6ZDWvVkBJdBbE=";
18 };
19in
20
21buildGoModule {
22 inherit pname version src;
23
24 outputs = [
25 "out"
26 "server"
27 ];
28
29 nativeBuildInputs = [
30 nodejs
31 pnpm_9.configHook
32 ];
33
34 env.pnpmDeps = pnpm_9.fetchDeps {
35 inherit pname version src;
36 fetcherVersion = 1;
37 hash = "sha256-o6wxO8EGRmhcYggJnfxDkH+nbt+isc8bfHji8Hu9YKg=";
38 };
39
40 vendorHash = "sha256-nIxsG1O5RG+PDSWBcUWpk+4aFq2cYaxpkgOoDqLjY90=";
41
42 ldflags = [
43 "-s"
44 "-w"
45 "-X main.version=${version}"
46 "-X main.commit=unknown"
47 "-X main.date=unknown"
48 ];
49
50 subPackages = [
51 "pgrok/pgrok"
52 "pgrokd/pgrokd"
53 ];
54
55 preBuild = ''
56 pushd pgrokd/web
57
58 pnpm run build
59
60 popd
61
62 # rename packages due to naming conflict
63 mv pgrok/cli/ pgrok/pgrok/
64 mv pgrokd/cli/ pgrokd/pgrokd/
65 '';
66
67 postInstall = ''
68 moveToOutput bin/pgrokd $server
69 '';
70
71 passthru.updateScript = nix-update-script { };
72
73 meta = {
74 description = "Selfhosted TCP/HTTP tunnel, ngrok alternative, written in Go";
75 homepage = "https://github.com/pgrok/pgrok";
76 license = lib.licenses.mit;
77 maintainers = with lib.maintainers; [ marie ];
78 mainProgram = "pgrok";
79 };
80}