build(flake): split into flake modules

This commit is contained in:
2026-09-06 16:39:29 +02:00
parent 46e977acf5
commit 5ea156c181
9 changed files with 216 additions and 189 deletions
-23
View File
@@ -1,23 +0,0 @@
{
crate2nix,
rustc,
cargo,
pkgs,
...
}: let
buildRustCrateForPkgs = _:
pkgs.buildRustCrate.override {
inherit cargo rustc;
};
# Cargo.nix for IFD
generatedCargoNix = crate2nix.tools.${pkgs.hostPlatform.system}.generatedCargoNix {
name = "rustnix";
src = ../.;
};
cargoNix = import generatedCargoNix {
inherit pkgs buildRustCrateForPkgs;
};
in
cargoNix.rootCrate
+21
View File
@@ -0,0 +1,21 @@
rec {
rust-toolchain = pkgs: pkgs.rust-bin.fromRustupToolchainFile ../rust-toolchain.toml;
toolchain-pkgs = pkgs:
pkgs.extend (_: _: {
rustPlatform = pkgs.makeRustPlatform {
cargo = rust-toolchain pkgs;
rustc = rust-toolchain pkgs;
};
});
toolchain-crosspkgs = pkgs: let
crossPkgs = pkgs.pkgsCross.wasm32-unknown-none;
in
crossPkgs.extend (_: _: {
rustPlatform = crossPkgs.makeRustPlatform {
cargo = rust-toolchain pkgs;
rustc = rust-toolchain pkgs;
};
});
}
+24 -16
View File
@@ -1,19 +1,27 @@
{
fetchCrate,
buildWasmBindgenCli,
rustPlatform,
...
}:
buildWasmBindgenCli rec {
src = fetchCrate {
pname = "wasm-bindgen-cli";
version = "0.2.127";
hash = "sha256-di+qBAdd7pENLiIB9CoZoab+W5xeDoByMREcCGTSzWo=";
};
let
drv = {
fetchCrate,
buildWasmBindgenCli,
rustPlatform,
...
}:
buildWasmBindgenCli rec {
src = fetchCrate {
pname = "wasm-bindgen-cli";
version = "0.2.127";
hash = "sha256-di+qBAdd7pENLiIB9CoZoab+W5xeDoByMREcCGTSzWo=";
};
cargoDeps = rustPlatform.fetchCargoVendor {
inherit src;
inherit (src) pname version;
hash = "sha256-FTv2GZIAQs0ePdIZXIXil7JbZ6kIT05VG6vqC1qNFxQ=";
cargoDeps = rustPlatform.fetchCargoVendor {
inherit src;
inherit (src) pname version;
hash = "sha256-FTv2GZIAQs0ePdIZXIXil7JbZ6kIT05VG6vqC1qNFxQ=";
};
};
utils = import ./utils.nix;
in {
perSystem = {pkgs, ...}: {
packages.wasm-bindgen = (utils.toolchain-pkgs pkgs).callPackage drv {};
};
}
-16
View File
@@ -1,16 +0,0 @@
{
makeRustPlatform,
cargo,
rustc,
pkgs,
...
}: let
p = pkgs;
in rec {
rustPlatform = makeRustPlatform {
inherit cargo rustc;
};
pkgs = p.extend (_: _: {
inherit rustPlatform;
});
}
+48 -37
View File
@@ -1,39 +1,50 @@
{
stdenvNoCC,
wasm-bindgen,
wordle-solver-wasm,
root-crate,
...
}: let
snake_name = "wordle_solver";
package-meta = {
name = "wordle-solver";
type = "module";
description = "module";
version = root-crate.build.crateVersion;
files = [
"${snake_name}_bg.wasm"
"${snake_name}.js"
"${snake_name}_bg.js"
"${snake_name}.d.ts"
];
main = "${snake_name}.js";
types = "${snake_name}.d.ts";
sideEffects = [
"./${snake_name}.js"
"./snippets/*"
];
perSystem = {
pkgs,
self',
...
}: let
drv = {
stdenvNoCC,
wasm-bindgen,
wordle-solver-wasm,
...
}: let
snake_name = "wordle_solver";
package-meta = {
name = "wordle-solver";
type = "module";
description = "module";
version = "0.1.0";
files = [
"${snake_name}_bg.wasm"
"${snake_name}.js"
"${snake_name}_bg.js"
"${snake_name}.d.ts"
];
main = "${snake_name}.js";
types = "${snake_name}.d.ts";
sideEffects = [
"./${snake_name}.js"
"./snippets/*"
];
};
package-json = builtins.toJSON package-meta;
in
stdenvNoCC.mkDerivation {
name = "wordle-solver-wasm-pkg";
nativeBuildInputs = [wasm-bindgen];
unpackPhase = "true";
buildPhase = ''
wasm-bindgen --target bundler --out-dir $out ${wordle-solver-wasm}/lib/wordle_solver.wasm
cat <<EOF > $out/package.json
${package-json}
EOF
'';
};
in {
packages.wordle-solver-wasm-pkg = pkgs.callPackage drv {
inherit (self'.packages) wordle-solver-wasm wasm-bindgen;
};
};
package-json = builtins.toJSON package-meta;
in
stdenvNoCC.mkDerivation {
name = "wordle-solver-wasm-pkg";
nativeBuildInputs = [wasm-bindgen];
unpackPhase = "true";
buildPhase = ''
wasm-bindgen --target bundler --out-dir $out ${wordle-solver-wasm}/lib/wordle_solver.wasm
cat <<EOF > $out/package.json
${package-json}
EOF
'';
}
}
+39 -31
View File
@@ -1,39 +1,47 @@
{
rustPlatform,
buildPackages,
lld,
name ? "wordle-solver",
...
}:
rustPlatform.buildRustPackage {
inherit name;
perSystem = {pkgs, ...}: let
utils = import ./utils.nix;
toolchain-crosspkgs = utils.toolchain-crosspkgs pkgs;
drv = {
rustPlatform,
buildPackages,
lld,
name ? "wordle-solver",
...
}:
rustPlatform.buildRustPackage {
inherit name;
src = ../.; # Or your source location
cargoLock.lockFile = ../Cargo.lock;
src = ../.; # Or your source location
cargoLock.lockFile = ../Cargo.lock;
# Disable tests since they can't run on WASM
doCheck = false;
# Disable tests since they can't run on WASM
doCheck = false;
# Required dependencies for WASM builds
depsBuildBuild = [
buildPackages.stdenv.cc
lld # Needed for wasm-ld
];
# Required dependencies for WASM builds
depsBuildBuild = [
buildPackages.stdenv.cc
lld # Needed for wasm-ld
];
cargoBuildFlags = [
"--lib"
"--features"
"wasm-bindgen"
];
cargoBuildFlags = [
"--lib"
"--features"
"wasm-bindgen"
];
# Configure rustc for WASM
env = {
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld'';
# Configure rustc for WASM
env = {
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld'';
};
# Copy the WASM file to the output
installPhase = ''
mkdir -p $out/lib
cp target/wasm32-unknown-unknown/release/*.wasm $out/lib/
'';
};
in {
packages.wordle-solver-wasm = toolchain-crosspkgs.callPackage drv {};
};
# Copy the WASM file to the output
installPhase = ''
mkdir -p $out/lib
cp target/wasm32-unknown-unknown/release/*.wasm $out/lib/
'';
}
+45 -33
View File
@@ -1,37 +1,49 @@
{
stdenv,
fetchYarnDeps,
yarnConfigHook,
yarnBuildHook,
nodejs,
wordle-solver-wasm-pkg,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "wordle-solver-web";
version = "0.1.0";
perSystem = {
pkgs,
self',
...
}: let
drv = {
stdenv,
fetchYarnDeps,
yarnConfigHook,
yarnBuildHook,
nodejs,
wordle-solver-wasm-pkg,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "wordle-solver-web";
version = "0.1.0";
src = ../web;
src = ../web;
yarnOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = "sha256-MTyHX2+/U7jRB1SJWbK9Td43zq+nclQwx7oDZbX0DqA=";
yarnOfflineCache = fetchYarnDeps {
yarnLock = finalAttrs.src + "/yarn.lock";
hash = "sha256-MTyHX2+/U7jRB1SJWbK9Td43zq+nclQwx7oDZbX0DqA=";
};
yarnBuildScript = "build-no-wasm";
postPatch = ''
ln -s ${wordle-solver-wasm-pkg} pkg
'';
installPhase = ''
mkdir $out
mv dist/* $out/
'';
nativeBuildInputs = [
yarnConfigHook
yarnBuildHook
# Needed for executing package.json scripts
nodejs
];
});
in {
packages.wordle-solver-web = pkgs.callPackage drv {
inherit (self'.packages) wordle-solver-wasm-pkg;
};
};
yarnBuildScript = "build-no-wasm";
postPatch = ''
ln -s ${wordle-solver-wasm-pkg} pkg
'';
installPhase = ''
mkdir $out
mv dist/* $out/
'';
nativeBuildInputs = [
yarnConfigHook
yarnBuildHook
# Needed for executing package.json scripts
nodejs
];
})
}
+27
View File
@@ -0,0 +1,27 @@
{inputs, ...}: {
perSystem = {pkgs, ...}: let
# Cargo.nix for IFD
generatedCargoNix = inputs.crate2nix.tools.${pkgs.hostPlatform.system}.generatedCargoNix {
name = "rustnix";
src = ../.;
};
utils = import ./utils.nix;
rust-toolchain = utils.rust-toolchain pkgs;
toolchain-pkgs = utils.toolchain-pkgs pkgs;
buildRustCrateForPkgs = _:
pkgs.buildRustCrate.override {
cargo = rust-toolchain;
rustc = rust-toolchain;
};
cargoNix = import generatedCargoNix {
pkgs = toolchain-pkgs;
inherit buildRustCrateForPkgs;
};
in {
packages.wordle-solver = cargoNix.rootCrate.build;
};
}