-
Notifications
You must be signed in to change notification settings - Fork 2
/
flake.nix
138 lines (127 loc) · 3.4 KB
/
flake.nix
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
{
description = "A Nix-flake-based Rust development environment";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
rust-overlay = {
url = "github:oxalica/rust-overlay";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{
nixpkgs,
rust-overlay,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (
system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs { inherit system overlays; };
inherit (pkgs) mkShell;
inherit (pkgs.lib) optionals makeLibraryPath;
inherit (pkgs.stdenv) isLinux isDarwin;
general-deps = with pkgs; [
# Rust
cargo-watch
cargo-expand
rust-analyzer-unwrapped
# Toml
taplo
# Other
vulkan-loader
vulkan-tools
];
linux-deps = with pkgs; [
# Wayland
libxkbcommon
wayland
# Xorg
xorg.libX11
xorg.libX11
xorg.libXcursor
xorg.libXi
xorg.libXrandr
# Other
openssl
pkg-config
alsa-lib
udev
vulkan-validation-layers
];
darwin-deps = with pkgs.darwin.apple_sdk.frameworks; [
AppKit
ApplicationServices
AudioToolbox
AudioUnit
Carbon
CoreAudio
CoreFoundation
CoreGraphics
CoreServices
CoreVideo
CoreMIDI
Foundation
IOKit
QuartzCore
Metal
OpenAL
Security
pkgs.libiconv
];
web-deps = with pkgs; [
wasm-bindgen-cli
binaryen
];
extensions = [
"clippy"
"rustfmt"
"rust-src"
];
in
{
devShells = {
# Regular shell
default =
let
toolchain = pkgs.rust-bin.nightly.latest.default.override {
inherit extensions;
targets = optionals isDarwin [
"x86_64-apple-darwin"
"aarch64-apple-darwin"
];
};
platform = pkgs.makeRustPlatform { inherit (toolchain) cargo rustc; };
in
mkShell rec {
buildInputs =
[
toolchain
platform.bindgenHook
]
++ general-deps
++ optionals isLinux linux-deps
++ optionals isDarwin darwin-deps;
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
LD_LIBRARY_PATH = makeLibraryPath buildInputs;
RUSTFLAGS = "-Zshare-generics=y -Zthreads=0";
};
# For web builds
web =
let
toolchain = pkgs.rust-bin.nightly.latest.default.override {
targets = [ "wasm32-unknown-unknown" ];
};
in
mkShell rec {
buildInputs = [ toolchain ] ++ general-deps ++ web-deps;
RUST_SRC_PATH = "${toolchain}/lib/rustlib/src/rust/library";
LD_LIBRARY_PATH = makeLibraryPath buildInputs;
RUSTFLAGS = "-Zshare-generics=y -Zthreads=0";
};
};
}
);
}