arnaucube
arnaucube/hyperplonkPublic Self-hosted repository
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}