chore: tidy nix expressions

This commit is contained in:
2026-08-19 20:59:30 +02:00
parent 7e5dae50e1
commit 9edf42cf82
6 changed files with 154 additions and 87 deletions
+17 -86
View File
@@ -36,51 +36,24 @@
}: let }: let
# Use rust-bin to generate the toolchain from rust-toolchain.toml # Use rust-bin to generate the toolchain from rust-toolchain.toml
rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml; rust-toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
rustPlatform = pkgs.makeRustPlatform {
cross-pkgs = pkgs.pkgsCross.wasm32-unknown-none;
toolchain = pkgs.callPackage ./nix/with-toolchain.nix {
cargo = rust-toolchain; cargo = rust-toolchain;
rustc = rust-toolchain; rustc = rust-toolchain;
}; };
rust-toolchain-pkgs = pkgs.extend (_: _: { crossToolchain = cross-pkgs.callPackage ./nix/with-toolchain.nix {
inherit rustPlatform; cargo = rust-toolchain;
}); rustc = rust-toolchain;
wasm-bindgen = with rust-toolchain-pkgs;
buildWasmBindgenCli rec {
src = fetchCrate {
pname = "wasm-bindgen-cli";
version = "0.2.127";
hash = "sha256-di+qBAdd7pENLiIB9CoZoab+W5xeDoByMREcCGTSzWo=";
}; };
cargoDeps = rustPlatform.fetchCargoVendor { wasm-bindgen = toolchain.pkgs.callPackage ./nix/wasm-bindgen.nix {};
inherit src;
inherit (src) pname version;
hash = "sha256-FTv2GZIAQs0ePdIZXIXil7JbZ6kIT05VG6vqC1qNFxQ=";
};
};
buildRustCrateForPkgs = _: root-crate = pkgs.callPackage ./nix/root-crate.nix {
pkgs.buildRustCrate.override { cargo = rust-toolchain;
rustc = rust-toolchain; # Use rustc from toolchain rustc = rust-toolchain;
cargo = rust-toolchain; # Use cargo from toolchain inherit crate2nix;
};
# Cargo.nix for IFD
generatedCargoNix = crate2nix.tools.${system}.generatedCargoNix {
name = "rustnix";
src = ./.;
};
cross-pkgs2 = inputs.nixpkgs.legacyPackages.${system}.pkgsCross.wasm32-unknown-none;
cross-pkgs = import pkgs.path {
inherit (pkgs) system;
crossSystem =
pkgs.lib.systems.examples.wasm32-unknown-none
// {
rust.rustcTargetSpec = "wasm32-unknown-unknown";
};
};
cargoNix = import generatedCargoNix {
inherit pkgs buildRustCrateForPkgs;
}; };
in { in {
# Overlay pkgs with rust-bin # Overlay pkgs with rust-bin
@@ -90,54 +63,12 @@
}; };
packages = { packages = {
wordle-solver-wasm = cross-pkgs2.callPackage ( wordle-solver-wasm = crossToolchain.pkgs.callPackage ./nix/wordle-solver-wasm.nix {};
{ wordle-solver-wasm-pkg = pkgs.callPackage ./nix/wordle-solver-wasm-pkg.nix {
rustPlatform, inherit wasm-bindgen root-crate;
buildPackages, inherit (self'.packages) wordle-solver-wasm;
lld,
}:
rustPlatform.buildRustPackage {
pname = "wordle-solver";
version = "0.1.0";
src = ./.; # Or your source location
cargoLock.lockFile = ./Cargo.lock;
# 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
];
cargoBuildFlags = [
"--lib"
"--features"
"wasm-bindgen"
];
# Configure rustc for WASM
env = {
RUSTFLAGS = ''--cfg=web_sys_unstable_apis -C linker=wasm-ld'';
}; };
wordle-solver = root-crate.build;
# Copy the WASM file to the output
installPhase = ''
mkdir -p $out/lib
cp target/wasm32-unknown-unknown/release/*.wasm $out/lib/
'';
}
) {};
wordle-solver-wasm-pkg = pkgs.stdenvNoCC.mkDerivation {
name = "wordle-solver-wasm-pkg";
nativeBuildInputs = [wasm-bindgen];
unpackPhase = "true";
buildPhase = ''
wasm-bindgen --target bundler --out-dir $out ${self'.packages.wordle-solver-wasm}/lib/wordle_solver.wasm
'';
};
wordle-solver = cargoNix.rootCrate.build;
default = self'.packages.wordle-solver; default = self'.packages.wordle-solver;
}; };
+23
View File
@@ -0,0 +1,23 @@
{
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
+19
View File
@@ -0,0 +1,19 @@
{
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=";
};
}
+16
View File
@@ -0,0 +1,16 @@
{
makeRustPlatform,
cargo,
rustc,
pkgs,
...
}: let
p = pkgs;
in rec {
rustPlatform = makeRustPlatform {
inherit cargo rustc;
};
pkgs = p.extend (_: _: {
inherit rustPlatform;
});
}
+39
View File
@@ -0,0 +1,39 @@
{
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/*"
];
};
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
View File
@@ -0,0 +1,39 @@
{
rustPlatform,
buildPackages,
lld,
name ? "wordle-solver",
...
}:
rustPlatform.buildRustPackage {
inherit name;
src = ../.; # Or your source location
cargoLock.lockFile = ../Cargo.lock;
# 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
];
cargoBuildFlags = [
"--lib"
"--features"
"wasm-bindgen"
];
# 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/
'';
}