-
Notifications
You must be signed in to change notification settings - Fork 1
/
flake.nix
175 lines (160 loc) · 4.94 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
{
description = "Generic builder core for HotShot applications";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
flake-compat = {
url = "github:edolstra/flake-compat";
flake = false;
};
rust-overlay.url = "github:oxalica/rust-overlay";
git-hooks = {
url = "github:cachix/git-hooks.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs =
{
self,
nixpkgs,
flake-utils,
rust-overlay,
git-hooks,
...
}:
flake-utils.lib.eachDefaultSystem (
system:
let
overlays = [ (import rust-overlay) ];
pkgs = import nixpkgs { inherit system overlays; };
extensions = [
"rustfmt"
"clippy"
"llvm-tools-preview"
"rust-src"
];
rustToolchain = pkgs.rust-bin.stable.latest.minimal.override { inherit extensions; };
rustToolchainNightly = pkgs.rust-bin.nightly."2024-09-01".default.override { inherit extensions; };
cargo-llvm-cov =
if pkgs.stdenv.isDarwin then
(pkgs.cargo-llvm-cov.overrideAttrs (_: {
# The package is marked as broken on Darwin because nixpkgs'
# rustc comes without profiling on Darwin, but rustc fro
# our toolchain does have profiling enabled, so we can just
# set it as non-broken and disable tests, which would be run
# with nixpkgs' rustc
meta.broken = false;
doCheck = false;
}))
else
pkgs.cargo-llvm-cov;
rustDeps =
with pkgs;
[
pkg-config
openssl
bash
curl
cargo-audit
cargo-edit
cargo-udeps
cargo-sort
cargo-nextest
cargo-mutants
cmake
]
++ lib.optionals stdenv.isDarwin [
darwin.apple_sdk.frameworks.Security
darwin.apple_sdk.frameworks.CoreFoundation
darwin.apple_sdk.frameworks.SystemConfiguration
];
shellHook = ''
# Prevent cargo aliases from using programs in `~/.cargo` to avoid conflicts with rustup
# installations.
export CARGO_HOME=$HOME/.cargo-nix
export PATH="$PWD/$CARGO_TARGET_DIR/release:$PATH"
'';
RUST_SRC_PATH = "${rustToolchain}/lib/rustlib/src/rust/library";
RUST_BACKTRACE = 1;
RUST_LOG = "info";
RUSTFLAGS = " --cfg hotshot_example";
RUSTDOCFLAGS = " --cfg hotshot_example";
RUST_MIN_STACK = 64000000;
in
{
formatter = pkgs.nixfmt-rfc-style;
checks = {
pre-commit-check = git-hooks.lib.${system}.run {
src = ./.;
hooks = {
nixfmt-rfc-style.enable = true;
cargo-fmt = {
enable = true;
description = "Enforce rustfmt";
entry = "cargo fmt --all -- --check";
pass_filenames = false;
};
cargo-sort = {
enable = true;
description = "Ensure Cargo.toml are sorted";
entry = "cargo sort -g -w";
pass_filenames = false;
};
cargo-clippy = {
enable = true;
description = "Run clippy";
entry = "cargo clippy --workspace --all-features --all-targets --tests -- -D clippy::dbg-macro";
pass_filenames = false;
};
cargo-docs = {
enable = true;
description = "Run rustdoc";
entry = "cargo doc --workspace --document-private-items --no-deps";
pass_filenames = false;
};
};
};
};
devShells = {
default = pkgs.mkShell {
shellHook =
shellHook
# install pre-commit hooks
+ self.checks.${system}.pre-commit-check.shellHook;
buildInputs =
with pkgs;
[
rust-bin.nightly.latest.rust-analyzer
nixpkgs-fmt
git
mdbook # make-doc, documentation generation
rustToolchain
]
++ rustDeps;
inherit
RUST_SRC_PATH
RUST_BACKTRACE
RUST_LOG
RUSTFLAGS
RUSTDOCFLAGS
;
};
perfShell = pkgs.mkShell {
inherit shellHook;
buildInputs = [
rustToolchainNightly
cargo-llvm-cov
] ++ rustDeps;
inherit
RUSTDOCFLAGS
RUSTFLAGS
RUST_BACKTRACE
RUST_LOG
RUST_MIN_STACK
RUST_SRC_PATH
;
};
};
}
);
}