1{
2 lib,
3 stdenv,
4 deno,
5 nodejs,
6 makeBinaryWrapper,
7 eunomia-modules,
8 PUBLIC_BASE_URL ? "http://localhost:5173",
9}:
10stdenv.mkDerivation {
11 name = "eunomia";
12
13 src = lib.fileset.toSource {
14 root = ../.;
15 fileset = lib.fileset.unions [
16 ../deno.lock
17 ../deno.json
18 ../eunomia
19 ];
20 };
21
22 nativeBuildInputs = [makeBinaryWrapper];
23 buildInputs = [deno];
24
25 inherit PUBLIC_BASE_URL;
26
27 dontCheck = true;
28
29 configurePhase = ''
30 runHook preConfigure
31 cp -R --no-preserve=ownership ${eunomia-modules} node_modules
32 find node_modules -type d -exec chmod 755 {} \;
33 substituteInPlace node_modules/.bin/vite \
34 --replace-fail "/usr/bin/env node" "${nodejs}/bin/node"
35 runHook postConfigure
36 '';
37 buildPhase = ''
38 runHook preBuild
39 pushd eunomia
40 HOME=$TMPDIR ../node_modules/.bin/vite build
41 popd
42 runHook postBuild
43 '';
44 installPhase = ''
45 runHook preInstall
46
47 mkdir -p $out/bin
48 cp -R ./eunomia/build/* $out
49 cp -R ./node_modules $out
50
51 makeBinaryWrapper ${deno}/bin/deno $out/bin/eunomia \
52 --prefix PATH : ${lib.makeBinPath [ deno ]} \
53 --add-flags "run --allow-all --node-modules-dir=manual --cached-only $out/index.js"
54
55 runHook postInstall
56 '';
57}