Add overlay

This commit is contained in:
2026-08-04 19:57:46 -04:00
parent fed2789cbb
commit 6b75ec8478

View File

@@ -2,52 +2,91 @@ final: prev: {
rustPlatform = prev.rustPlatform // { rustPlatform = prev.rustPlatform // {
buildDioxusWebApp = prev.lib.extendMkDerivation { buildDioxusWebApp = prev.lib.extendMkDerivation {
constructDrv = prev.rustPlatform.buildRustPackage; constructDrv = prev.rustPlatform.buildRustPackage;
excludeDrvArgNames = [
"extraServerFeatures"
"extraClientFeatures"
"extraServerBundleArgs"
"extraClientBundleArgs"
"serverBundleArgs"
"clientBundleArgs"
];
extendDrvArgs = extendDrvArgs =
finalAttrs: finalAttrs:
args@{
src,
nativeBuildInputs ? [ ],
...
}:
let let
pkg-info = (prev.lib.trivial.importTOML "${src}/Cargo.toml").package; buildTypeFlag = if finalAttrs.cargoBuildType == "release" then "--release" else "";
pname = pkg-info.name; defaultFeaturesFlag =
if (finalAttrs.buildNoDefaultFeatures or false) then "--no-default-features" else "";
in in
{ {
pname = pkg-info.name; nativeBuildInputs ? [ ],
version = pkg-info.version;
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; [ 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 makeWrapper
dioxus-cli dioxus-cli
lld
] ]
++ (if finalAttrs.cargoBuildType == "release" then [ binaryen ] else [ ])
++ nativeBuildInputs; ++ nativeBuildInputs;
buildPhase = '' buildPhase = ''
runHook preBuild runHook preBuild
dx build --release --frozen --web
dx bundle \
--out-dir "$out" \
@server ${builtins.concatStringsSep " " serverBundleArgs} \
@client ${builtins.concatStringsSep " " clientBundleArgs}
runHook postBuild runHook postBuild
''; '';
installPhase = '' installPhase = ''
runHook preInstall runHook preInstall
mkdir -p "$out/bin" makeWrapper "$out/server" "$out/bin/${finalAttrs.pname}" \
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" --set DIOXUS_PUBLIC_PATH "$out/public"
runHook postInstall runHook postInstall
''; '';
} };
// args;
}; };
}; };
} }