{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; crane.url = "github:ipetkov/crane"; treefmt-nix = { url = "github:numtide/treefmt-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; fenix = { url = "github:nix-community/fenix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { self, nixpkgs, flake-utils, crane, fenix, treefmt-nix, ... }: flake-utils.lib.eachDefaultSystem ( system: let pkgs = nixpkgs.legacyPackages.${system}; lib = pkgs.lib; rustToolchain = fenix.packages.${system}.fromToolchainFile { file = ./rust-toolchain.toml; sha256 = "sha256-p8h3Sl/YRByZfZTAKXdsvF6xEenXKrXSVvpphmZENH4=" ; }; craneLib = (crane.mkLib pkgs).overrideToolchain rustToolchain; src = (craneLib.cleanCargoSource ./.); commonArgs = { inherit src; strictDeps = true; cargoToml = ./Cargo.toml; nativeBuildInputs = [ pkgs.pkg-config ]; }; cargoArtifacts = craneLib.buildDepsOnly commonArgs; simple-pow = craneLib.buildPackage ( commonArgs // { inherit cargoArtifacts; } ); tree-fmt-eval = treefmt-nix.lib.evalModule pkgs ( { ... }: { # Used to find the project root projectRootFile = "flake.nix"; programs.nixfmt.enable = true; programs.deadnix.enable = true; programs.rustfmt = { enable = true; package = rustToolchain; }; } ); in { checks = { inherit simple-pow; str-clippy = craneLib.cargoClippy ( commonArgs // { inherit cargoArtifacts; cargoClippyExtraArgs = "--all-targets -- --deny warnings"; } ); formatting = tree-fmt-eval.config.build.check self; }; formatter = tree-fmt-eval.config.build.wrapper; apps.default = flake-utils.lib.mkApp { drv = simple-pow; }; devShells.default = craneLib.devShell { checks = self.checks.${system}; packages = with pkgs; [ cargo-watch python3 wgsl-analyzer ]; env = { "LD_LIBRARY_PATH" = lib.makeLibraryPath (with pkgs; [ stdenv.cc.cc.lib vulkan-loader libx11 libxcursor libxi libxrandr libxkbcommon ]); }; }; } ); }