{ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; crane.url = "github:ipetkov/crane"; crane.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { nixpkgs.follows = "nixpkgs"; flake-utils.follows = "flake-utils"; }; }; }; outputs = { self, nixpkgs, crane, flake-utils, rust-overlay, ... }: let systems = with flake-utils.lib.system; [x86_64-linux x86_64-darwin aarch64-linux aarch64-darwin]; in flake-utils.lib.eachSystem systems (system: let pkgs = import nixpkgs { inherit system; overlays = [ (import rust-overlay) ]; }; buildInputs = with pkgs; [ trunk cargo-wasi openssl pkg-config wasm-bindgen-cli ]; rustToolchain = pkgs.rust-bin.stable.latest.default.override { targets = [ "wasm32-unknown-unknown" "wasm32-wasi" ]; }; craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; commonArgs = { inherit buildInputs; src = craneLib.cleanCargoSource ./.; }; commonArgsForWasm = commonArgs // { doCheck = false; }; cargoArtifactsForServer = craneLib.buildDepsOnly (commonArgs // { cargoExtraArgs = "--workspace --exclude webapp"; }); cargoArtifactsForWasm = craneLib.buildDepsOnly (commonArgsForWasm // { cargoExtraArgs = "--workspace --exclude server --target wasm32-unknown-unknown"; }); in { # This requires a live db. # checks.sqlx-prepare = craneLib.mkCargoDerivation (commonArgs // { # cargoArtifacts = cargoArtifactsForServer; # buildInputs = commonArgs.buildInputs ++ [ pkgs.sqlx-cli ]; # buildPhaseCargoCommand = "cargo sqlx prepare --merged --check"; # }); checks.fmt = craneLib.cargoFmt { inherit (commonArgs) src; }; packages.bridge-server = craneLib.buildPackage (commonArgs // { src = ./.; }); packages.bridge-webapp = craneLib.buildPackage (commonArgsForWasm // { cargoArtifacts = cargoArtifactsForWasm; src = ./.; cargoExtraArgs = "--target wasm32-unknown-unknown"; buildPhaseCargoCommand = '' pushd webapp echo Running trunk from directory $PWD trunk build --release popd ''; installPhaseCommand = '' mkdir -p $out cp -r webapp/dist/* $out ''; }); devShells.default = pkgs.mkShell { inputsFrom = builtins.attrValues self.packages; nativeBuildInputs = with pkgs; [ rustToolchain cargo-watch cargo-nextest clippy rustfmt sqlx-cli podman-compose postgresql rust-analyzer pkg-config openssl ]; }; }); }