From 6b75ec8478428fea44ab0e896b7dd3800c0d5b5f Mon Sep 17 00:00:00 2001 From: Ethan Girouard Date: Tue, 4 Aug 2026 19:57:46 -0400 Subject: [PATCH] Add overlay --- overlay.nix | 91 ++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 65 insertions(+), 26 deletions(-) diff --git a/overlay.nix b/overlay.nix index f4b4465..47017b7 100644 --- a/overlay.nix +++ b/overlay.nix @@ -2,52 +2,91 @@ final: prev: { rustPlatform = prev.rustPlatform // { buildDioxusWebApp = prev.lib.extendMkDerivation { constructDrv = prev.rustPlatform.buildRustPackage; + + excludeDrvArgNames = [ + "extraServerFeatures" + "extraClientFeatures" + "extraServerBundleArgs" + "extraClientBundleArgs" + "serverBundleArgs" + "clientBundleArgs" + ]; + extendDrvArgs = finalAttrs: - args@{ - src, - nativeBuildInputs ? [ ], - ... - }: let - pkg-info = (prev.lib.trivial.importTOML "${src}/Cargo.toml").package; - pname = pkg-info.name; + buildTypeFlag = if finalAttrs.cargoBuildType == "release" then "--release" else ""; + defaultFeaturesFlag = + if (finalAttrs.buildNoDefaultFeatures or false) then "--no-default-features" else ""; in { - pname = pkg-info.name; - version = pkg-info.version; + nativeBuildInputs ? [ ], - GIT_REV = if builtins.hasAttr "rev" src then src.rev else src.dirtyRev; + extraServerFeatures ? [ ], + extraClientFeatures ? [ ], - cargoLock.lockFile = "${src}/Cargo.lock"; + extraServerBundleArgs ? [ ], + extraClientBundleArgs ? [ ], - nativeBuildInputs = with prev; [ - makeWrapper - dioxus-cli - ] - ++ nativeBuildInputs; + 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 build --release --frozen --web + + dx bundle \ + --out-dir "$out" \ + @server ${builtins.concatStringsSep " " serverBundleArgs} \ + @client ${builtins.concatStringsSep " " clientBundleArgs} + runHook postBuild ''; installPhase = '' runHook preInstall - mkdir -p "$out/bin" - install -t "$out" target/dx/${pname}/release/web/server - - cp -r target/dx/${pname}/release/web/public "$out/public" - - makeWrapper "$out/server" "$out/bin/${pname}" \ - --set DIOXUS_PUBLIC_PATH "$out/public" + makeWrapper "$out/server" "$out/bin/${finalAttrs.pname}" \ + --set DIOXUS_PUBLIC_PATH "$out/public" runHook postInstall ''; - } - // args; + }; }; }; }