{
description = "bevy flake";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
crane.url = "github:ipetkov/crane";
flake-utils.url = "github:numtide/flake-utils";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
nixpkgs,
rust-overlay,
flake-utils,
crane,
...
}:
flake-utils.lib.eachDefaultSystem (
system: let
overlays = [(import rust-overlay)];
pkgs = import nixpkgs {
inherit overlays system;
};
inherit (pkgs) lib;
rust-toolchain = pkgs.rust-bin.stable.latest;
craneLib = (crane.mkLib pkgs).overrideToolchain (
p:
p.rust-bin.stable.latest.default.override {
targets = [ "x86_64-pc-windows-gnu" "x86_64-unknown-linux-gnu" ];
}
);
commonArgs = {
buildInputs = [
];
src = craneLib.cleanCargoSource ./.;
strictDeps = true;
};
linux = craneLib.buildPackage (commonArgs //{
buildInputs = [
];
});
rust-flags = "-L ${pkgs.lib.makeLibraryPath [ pkgs.pkgsCross.mingwW64.windows.pthreads ]}";
windows = craneLib.buildPackage (commonArgs //{
buildInputs = with pkgs.pkgsCross.mingwW64; [
];
CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu";
CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER = "${pkgs.lib.getExe pkgs.pkgsCross.mingwW64.stdenv.cc}";
RUSTFLAGS = rust-flags;
doCheck = false;
});
windows-shell = craneLib.devShell {
packages = [
pkgs.pkgsCross.mingwW64.buildPackages.gcc
];
CARGO_BUILD_TARGET = "x86_64-pc-windows-gnu";
RUSTFLAGS = rust-flags;
};
in {
devShells = {
windows = windows-shell;
default = craneLib.devShell {
packages = with pkgs; [
pkg-config
bacon
wayland
alsa-lib
vulkan-loader
pkgs.vulkan-tools
libudev-zero
libx11
libxcursor
libxi
libxrandr
libxkbcommon
] ++ lib.optionals (lib.strings.hasInfix "linux" system) [
alsa-lib
vulkan-loader
vulkan-tools
libudev-zero
libx11
libxcursor
libxi
libxrandr
libxkbcommon
];
RUST_SRC_PATH = "${pkgs.rust.packages.stable.rustPlatform.rustLibSrc}";
LD_LIBRARY_PATH = lib.makeLibraryPath [
pkgs.vulkan-loader
pkgs.libx11
pkgs.libxi
pkgs.libxcursor
pkgs.libxkbcommon
];
shellHook = ''
export CARGO_CLIPPY_FLAGS='-- -W clippy::pedantic -W clippy::nursery -W clippy::unwrap_used'
'';
};
};
packages = {
default = linux;
windows = windows;
};
});
}