summaryrefslogtreecommitdiff
path: root/modules/templates/rustBevy/flake.nix
blob: 1d7d8628942482f30e24c64c5b8be288c673ad65 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{
  description = "Rust dev env flake for Bevy development";
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
    crane.url = "github:ipetkov/crane";
    fenix = {
      url = "github:nix-community/fenix";
      inputs.nixpkgs.follows = "nixpkgs";
    };
    flake-utils.url = "github:numtide/flake-utils";
  };
  outputs = {
    self,
    nixpkgs,
    crane,
    fenix,
    flake-utils,
    ...
  }:
    flake-utils.lib.eachDefaultSystem (system: let
      pkgs = nixpkgs.legacyPackages.${system};

      rs-toolchain = with fenix.packages.${system};
        combine [
          default.toolchain
          rust-analyzer
        ];

      craneLib = (crane.mkLib pkgs).overrideToolchain rs-toolchain;

      my-crate = craneLib.buildPackage {
        src = craneLib.cleanCargoSource (craneLib.path ./.);
        strictDeps = true;
        buildInputs = with pkgs;
          [
            udev
            alsa-lib
            vulkan-loader
            libX11
            libXcursor
            libXi
            libXrandr
            libxkbcommon
            wayland
          ]
          ++ pkgs.lib.optionals pkgs.stdenv.isDarwin [
            pkgs.libiconv
          ];
        nativeBuildInputs = with pkgs; [
          pkg-config
          mold
          clang
        ];
        CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER = "clang";
        RUSTFLAGS = "-C link-arg=-fuse-ld=mold";
      };
    in {
      packages.default = my-crate;
      apps.default = flake-utils.lib.mkApp {
        drv = my-crate;
      };
      devShells.default = pkgs.mkShell rec {
        buildInputs = with pkgs; [
          rs-toolchain
          pkg-config
          udev
          alsa-lib
          vulkan-loader
          libX11
          libXcursor
          libXi
          libXrandr
          libxkbcommon
          wayland
          mold
          clang
        ];
        LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath buildInputs;
        CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER = "clang";
        RUSTFLAGS = "-C link-arg=-fuse-ld=mold";
      };
    });
}