Flake to setup a local env for atproto development
1{
2 stdenv,
3 makeBinaryWrapper,
4 pnpm_9,
5 fetchgit,
6 nodejs,
7 lib,
8}:
9
10stdenv.mkDerivation (finalAttrs: {
11 pname = "did-method-plc";
12 version = "0.1.0";
13
14 src = fetchgit {
15 url = "https://tangled.org/@edouard.paris/did-method-plc";
16 # rev = "migrate-to-pnpm";
17 hash = "sha256-KewRzr0DwCdB4lqpAC5A82Vd7Y9fmRyXwoc2i23Cr+g=";
18 };
19
20 sourceRoot = "${finalAttrs.src.name}";
21
22 nativeBuildInputs = [
23 makeBinaryWrapper
24 nodejs
25 pnpm_9.configHook
26 ];
27
28 pnpmDeps = pnpm_9.fetchDeps {
29 inherit (finalAttrs) pname version src sourceRoot;
30 fetcherVersion = 1;
31 hash = "sha256-cGS8adYh70urpxQEq3ipl7cgSGNlu5MDdXz/qefakNE=";
32 };
33
34 buildPhase = ''
35 runHook preBuild
36 # Build if needed
37 pnpm --filter @did-plc/server build || true
38 runHook postBuild
39 '';
40
41 installPhase = ''
42 runHook preInstall
43
44 mkdir -p $out/{bin,share/did-plc-server}
45
46 # Copy the source and dependencies
47 cp -r . $out/share/did-plc-server/
48
49 # Create the executable wrapper for just the PLC server
50 makeWrapper "${lib.getExe pnpm_9}" "$out/bin/did-plc-server" \
51 --chdir "$out/share/did-plc-server" \
52 --set-default LOG_ENABLED "true" \
53 --set-default LOG_LEVEL "debug" \
54 --set-default DATABASE_URL "postgresql://$(whoami)@localhost:5433/plc" \
55 --add-flags "--filter" \
56 --add-flags "@did-plc/server" \
57 --add-flags "start"
58
59 runHook postInstall
60 '';
61
62 meta = {
63 description = "DID PLC Server from monorepo";
64 mainProgram = "did-plc-server";
65 };
66})