tools for building gleam projects with nix

buildGleamApplication: add support for building apps targeting javascript

foxgirl.engineering 2063ac2d 6621ab83

verified
+32 -11
+2 -1
CHANGELOG.md
··· 12 12 13 13 ### added 14 14 15 - - `target` argument in `buildGleam` can be used to specify either erlang or javascript targets 15 + - javascript target support 16 + - `target` argument in `buildGleam` and `buildGleamApplication` can be used to specify either erlang or javascript targets 16 17 - add `override` function to derivations produced by `buildGleam` and `buildGleamApplication` 17 18 18 19 ## v1.0.0 - 2025-09-25
+30 -10
nix/build-gleam-application.nix
··· 28 28 erlang ? inputs.erlang, 29 29 gleam ? inputs.gleam, 30 30 31 + target ? "erlang", 31 32 buildGleamArgs ? { }, 32 33 gleamNixOverrides ? _: _: { }, 33 34 ... ··· 49 50 }; 50 51 51 52 withApplication = scope.overrideScope ( 52 - _: prev: { 53 + _: prev: 54 + (lib.mapAttrs (_: dep: dep.override { inherit target; }) prev) 55 + // { 53 56 ${pname} = buildGleam ( 54 57 buildGleamArgs 55 58 // { 56 59 name = pname; 57 60 inherit version src; 58 61 beamDeps = derivationList prev; 59 - inherit erlang gleam; 62 + inherit erlang gleam target; 60 63 } 61 64 ); 62 65 } ··· 73 76 ) args; 74 77 in 75 78 79 + assert lib.assertOneOf "target" target [ 80 + "erlang" 81 + "javascript" 82 + ]; 83 + 76 84 stdenv.mkDerivation ( 77 85 filteredArgs 78 86 // { ··· 88 96 89 97 buildPhase = '' 90 98 runHook preBuild 91 - gleam-tool entrypoint ${pname} 99 + gleam-tool entrypoint ${target} 92 100 runHook postBuild 93 101 ''; 94 102 95 103 installPhase = '' 96 104 runHook preInstall 97 105 98 - mkdir -p $out/{bin,lib/entrypoint/ebin} 99 - ${lib.concatMapStringsSep "\n" ( 100 - package: "ln -s ${package}/lib/erlang/lib/* $out/lib/" 101 - ) compiledPackages} 106 + ${ 107 + if target == "erlang" then 108 + '' 109 + mkdir -p $out/{bin,lib/entrypoint/ebin} 110 + ${lib.concatMapStringsSep "\n" ( 111 + package: "ln -s ${package}/lib/erlang/lib/* $out/lib/" 112 + ) compiledPackages} 102 113 103 - mv gleam_entrypoint.beam $out/lib/entrypoint/ebin 114 + mv gleam_entrypoint.beam $out/lib/entrypoint/ebin 104 115 105 - makeWrapper ${erlang}/bin/erl $out/bin/${pname} --add-flags \ 106 - "-pa $out/lib/*/ebin -eval \"gleam_entrypoint:run()\" -noshell -extra" 116 + makeWrapper ${erlang}/bin/erl $out/bin/${pname} --add-flags \ 117 + "-pa $out/lib/*/ebin -eval \"gleam_entrypoint:run()\" -noshell -extra" 118 + '' 119 + else 120 + '' 121 + mkdir -p $out/lib 122 + ${lib.concatMapStringsSep "\n" (package: "ln -s ${package}/* $out/lib/") compiledPackages} 123 + 124 + mv gleam_entrypoint.mjs $out/lib/ 125 + '' 126 + } 107 127 108 128 runHook postInstall 109 129 '';