summaryrefslogtreecommitdiff
path: root/flake.nix
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--flake.nix115
1 files changed, 115 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..a413f57
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,115 @@
+{
+ 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-lEeYHNJjEVlYS+kLomkfpFWNEJQFhgSjuISZwMdWmb8=" ;
+ };
+
+ 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
+ xorg.libX11
+ xorg.libXcursor
+ xorg.libXi
+ xorg.libXrandr
+ libxkbcommon
+ ]);
+ };
+ };
+ }
+ );
+}