flake.nix 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. clippy = toolchain;
  28. };
  29. treefmtEval = treefmt-nix.lib.evalModule pkgs ./treefmt.nix;
  30. buildInputs = with pkgs; lib.optionals stdenv.isDarwin [libiconv darwin.apple_sdk.frameworks.Security];
  31. in rec {
  32. # For `nix fmt`
  33. formatter = treefmtEval.config.build.wrapper;
  34. packages = {
  35. # For `nix build` & `nix run`:
  36. default = naersk'.buildPackage {
  37. src = ./.;
  38. doCheck = true; # run `cargo test` on build
  39. inherit buildInputs;
  40. };
  41. # Run `nix build .#check` to check code
  42. check = naersk'.buildPackage {
  43. src = ./.;
  44. mode = "check";
  45. inherit buildInputs;
  46. };
  47. # Run `nix build .#test` to run tests
  48. test = naersk'.buildPackage {
  49. src = ./.;
  50. mode = "test";
  51. inherit buildInputs;
  52. };
  53. # Run `nix build .#clippy` to lint code
  54. clippy = naersk'.buildPackage {
  55. src = ./.;
  56. mode = "clippy";
  57. inherit buildInputs;
  58. };
  59. };
  60. # For `nix develop`:
  61. devShells.default = pkgs.mkShell {
  62. nativeBuildInputs = with pkgs; [toolchain];
  63. };
  64. # for `nix flake check`
  65. checks = {
  66. formatting = treefmtEval.config.build.check self;
  67. build = packages.check;
  68. test = packages.test;
  69. lint = packages.clippy;
  70. };
  71. }
  72. );
  73. }