final: prev: { rustPlatform = prev.rustPlatform // { buildDioxusWebApp = prev.lib.extendMkDerivation { constructDrv = prev.rustPlatform.buildRustPackage; excludeDrvArgNames = [ "extraServerFeatures" "extraClientFeatures" "extraServerBundleArgs" "extraClientBundleArgs" "serverBundleArgs" "clientBundleArgs" ]; extendDrvArgs = finalAttrs: let buildTypeFlag = if finalAttrs.cargoBuildType == "release" then "--release" else ""; defaultFeaturesFlag = if (finalAttrs.buildNoDefaultFeatures or false) then "--no-default-features" else ""; in { nativeBuildInputs ? [ ], extraServerFeatures ? [ ], extraClientFeatures ? [ ], extraServerBundleArgs ? [ ], extraClientBundleArgs ? [ ], serverBundleArgs ? let serverFeatures = (finalAttrs.buildFeatures or [ ]) ++ extraServerFeatures; in [ "--server" "--frozen" buildTypeFlag defaultFeaturesFlag ] ++ extraServerBundleArgs ++ (if serverFeatures != [ ] then [ "--features" ] ++ serverFeatures else [ ]), clientBundleArgs ? let clientFeatures = (finalAttrs.buildFeatures or [ ]) ++ extraClientFeatures; in [ "--web" "--frozen" buildTypeFlag defaultFeaturesFlag ] ++ extraClientBundleArgs ++ (if clientFeatures != [ ] then [ "--features" ] ++ clientFeatures else [ ]), ... }: { nativeBuildInputs = with prev; [ makeWrapper dioxus-cli lld ] ++ (if finalAttrs.cargoBuildType == "release" then [ binaryen ] else [ ]) ++ nativeBuildInputs; buildPhase = '' runHook preBuild dx bundle \ --out-dir "$out" \ @server ${builtins.concatStringsSep " " serverBundleArgs} \ @client ${builtins.concatStringsSep " " clientBundleArgs} runHook postBuild ''; installPhase = '' runHook preInstall makeWrapper "$out/server" "$out/bin/${finalAttrs.pname}" \ --set DIOXUS_PUBLIC_PATH "$out/public" runHook postInstall ''; }; }; }; }