Files
dx-build/overlay.nix
2026-08-04 20:00:18 -04:00

93 lines
2.5 KiB
Nix

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
'';
};
};
};
}