hyperplonk/flake.nix
flake.nixRaw
1{
2 description = "Hyperplonk dev env";
3
4 inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
5 inputs.flake-utils.url = "github:numtide/flake-utils"; # for dedup
6
7 # allow shell.nix alongside flake.nix
8 inputs.flake-compat.url = "github:edolstra/flake-compat";
9 inputs.flake-compat.flake = false;
10
11 inputs.rust-overlay.url = "github:oxalica/rust-overlay";
12 inputs.pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
13 inputs.pre-commit-hooks.inputs.nixpkgs.follows = "nixpkgs";
14
15 outputs = { self, nixpkgs, flake-utils, flake-compat, rust-overlay, pre-commit-hooks, ... }:
16 flake-utils.lib.eachDefaultSystem (system:
17 let
18 overlays = [ (import rust-overlay) ];
19 pkgs = import nixpkgs { inherit system overlays; };
20 nightlyToolchain = pkgs.rust-bin.selectLatestNightlyWith
21 (toolchain: toolchain.minimal.override { extensions = [ "rustfmt" ]; });
22
23 stableToolchain = pkgs.rust-bin.stable.latest.minimal.override {
24 extensions = [ "clippy" "llvm-tools-preview" "rust-src" ];
25 };
26 in with pkgs;
27 {
28 check = {
29 pre-commit-check = pre-commit-hooks.lib.${system}.run {
30 src = ./.;
31 hooks = {
32 check-format = {
33 enable = true;
34 files = "\\.rs$";
35 entry = "cargo fmt -- --check";
36 };
37 doctest = {
38 enable = true;
39 entry = "cargo test --doc";
40 files = "\\.rs$";
41 pass_filenames = false;
42 };
43 cargo-clippy = {
44 enable = true;
45 description = "Lint Rust code.";
46 entry = "cargo-clippy --workspace -- -D warnings";
47 files = "\\.rs$";
48 pass_filenames = false;
49 };
50 cargo-sort = {
51 enable = true;
52 description = "Ensure Cargo.toml are sorted";
53 entry = "cargo sort -w";
54 pass_filenames = false;
55 };
56 };
57 };
58 };
59 devShell = mkShell {
60 buildInputs = [
61 argbash
62 openssl
63 pkgconfig
64 git
65
66 stableToolchain
67 nightlyToolchain
68 cargo-sort
69
70 ] ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.Security ];
71
72 shellHook = ''
73 export RUST_BACKTRACE=full
74 export PATH="$PATH:$(pwd)/target/debug:$(pwd)/target/release"
75
76 # Ensure `cargo fmt` uses `rustfmt` from nightly.
77 export RUSTFMT="${nightlyToolchain}/bin/rustfmt"
78 ''
79 # install pre-commit hooks
80 + self.check.${system}.pre-commit-check.shellHook;
81 };
82 }
83 );
84}