Add overlay

This commit is contained in:
2026-08-04 19:54:18 -04:00
parent ac188750b9
commit 40db385749

View File

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