flake.nix 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. {
  2. inputs = {
  3. flake-utils.url = "github:numtide/flake-utils";
  4. naersk.url = "github:nix-community/naersk";
  5. nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
  6. treefmt-nix.url = "github:numtide/treefmt-nix";
  7. rust-overlay.url = "github:oxalica/rust-overlay";
  8. };
  9. outputs = {
  10. self,
  11. flake-utils,
  12. naersk,
  13. nixpkgs,
  14. treefmt-nix,
  15. rust-overlay,
  16. }:
  17. flake-utils.lib.eachDefaultSystem (
  18. system: let
  19. overlays = [(import rust-overlay)];
  20. pkgs = (import nixpkgs) {
  21. inherit system overlays;
  22. };
  23. toolchain = pkgs.rust-bin.fromRustupToolchainFile ./rust-toolchain.toml;
  24. naersk' = pkgs.callPackage naersk {
  25. cargo = toolchain;
  26. rustc = toolchain;
  27. };
  28. treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
  29. in rec {
  30. # For `nix fmt`
  31. formatter = treefmtEval.config.build.wrapper;
  32. packages = {
  33. # For `nix build` & `nix run`:
  34. default = naersk'.buildPackage {
  35. src = ./.;
  36. doCheck = true; # run `cargo test` on build
  37. };
  38. # Run `nix build .#check` to check code
  39. check = naersk'.buildPackage {
  40. src = ./.;
  41. mode = "check";
  42. };
  43. # Run `nix build .#test` to run tests
  44. test = naersk'.buildPackage {
  45. src = ./.;
  46. mode = "test";
  47. };
  48. # Run `nix build .#clippy` to lint code
  49. clippy = naersk'.buildPackage {
  50. src = ./.;
  51. mode = "clippy";
  52. };
  53. };
  54. # For `nix develop`:
  55. devShells.default = pkgs.mkShell {
  56. nativeBuildInputs = with pkgs; [toolchain];
  57. };
  58. # for `nix flake check`
  59. checks = {
  60. formatting = treefmtEval.config.build.check self;
  61. build = packages.check;
  62. test = packages.test;
  63. lint = packages.clippy;
  64. };
  65. }
  66. );
  67. }