You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

84 lines
2.7 KiB

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