{ inputs = { nixpkgs = { url = "github:nixos/nixpkgs/nixos-23.11"; }; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; flakebox = { url = "github:dpc/flakebox?rev=226d584e9a288b9a0471af08c5712e7fac6f87dc"; inputs.nixpkgs.follows = "nixpkgs"; inputs.fenix.follows = "fenix"; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flakebox, fenix, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = import nixpkgs { inherit system; }; lib = pkgs.lib; flakeboxLib = flakebox.lib.${system} { config.flakebox.init.enable = false; }; rustSrc = flakeboxLib.filterSubPaths { root = builtins.path { name = "gossip"; path = ./.; }; paths = [ "Cargo.toml" "Cargo.lock" ".cargo" "src" ]; }; toolchainArgs = let llvmPackages = pkgs.llvmPackages_11; in { extraRustFlags = "--cfg tokio_unstable"; components = [ "rustc" "cargo" "clippy" "rust-analyzer" "rust-src" ]; args = { nativeBuildInputs = [ ] ++ lib.optionals (!pkgs.stdenv.isDarwin) [ ]; }; } // lib.optionalAttrs pkgs.stdenv.isDarwin { stdenv = pkgs.clang11Stdenv; clang = llvmPackages.clang; libclang = llvmPackages.libclang.lib; clang-unwrapped = llvmPackages.clang-unwrapped; }; # all standard toolchains provided by flakebox toolchainsStd = flakeboxLib.mkStdFenixToolchains toolchainArgs; toolchainsNative = (pkgs.lib.getAttrs [ "default" ] toolchainsStd); toolchainNative = flakeboxLib.mkFenixMultiToolchain { toolchains = toolchainsNative; }; commonArgs = { buildInputs = [ ] ++ lib.optionals pkgs.stdenv.isDarwin [ pkgs.darwin.apple_sdk.frameworks.SystemConfiguration pkgs.darwin.apple_sdk.frameworks.OpenGL pkgs.darwin.apple_sdk.frameworks.AppKit ]; nativeBuildInputs = [ pkgs.pkg-config ]; }; outputs = (flakeboxLib.craneMultiBuild { toolchains = toolchainsStd; }) (craneLib': let craneLib = (craneLib'.overrideArgs { pname = "flexbox-multibuild"; src = rustSrc; }).overrideArgs commonArgs; in rec { workspaceDeps = craneLib.buildWorkspaceDepsOnly { }; workspaceBuild = craneLib.buildWorkspace { cargoArtifacts = workspaceDeps; }; gossip = craneLib.buildPackageGroup { pname = "gossip"; packages = [ "gossip-bin" "gossip-lib" ]; mainProgram = "gossip-bin"; }; }); in { legacyPackages = outputs; packages = { default = outputs.gossip; }; devShells = flakeboxLib.mkShells { packages = [ ]; buildInputs = commonArgs.buildInputs; nativeBuildInputs = [ ]; shellHook = '' export RUSTFLAGS="--cfg tokio_unstable" export RUSTDOCFLAGS="--cfg tokio_unstable" export RUST_LOG="info" ''; }; }); }