flake.nix 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. {
  2. description = "CDK Flake";
  3. inputs = {
  4. nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.05";
  5. rust-overlay = {
  6. url = "github:oxalica/rust-overlay";
  7. inputs = {
  8. nixpkgs.follows = "nixpkgs";
  9. };
  10. };
  11. flake-utils.url = "github:numtide/flake-utils";
  12. pre-commit-hooks.url = "github:cachix/pre-commit-hooks.nix";
  13. };
  14. outputs = { self, nixpkgs, rust-overlay, flake-utils, pre-commit-hooks, ... }:
  15. flake-utils.lib.eachDefaultSystem (system:
  16. let
  17. overlays = [ (import rust-overlay) ];
  18. lib = pkgs.lib;
  19. stdenv = pkgs.stdenv;
  20. isDarwin = stdenv.isDarwin;
  21. libsDarwin = with pkgs; lib.optionals isDarwin [
  22. # Additional darwin specific inputs can be set here
  23. darwin.apple_sdk.frameworks.Security
  24. darwin.apple_sdk.frameworks.SystemConfiguration
  25. ];
  26. # Dependencies
  27. pkgs = import nixpkgs {
  28. inherit system overlays;
  29. };
  30. # Toolchains
  31. # latest stable
  32. stable_toolchain = pkgs.rust-bin.stable.latest.default.override {
  33. targets = [ "wasm32-unknown-unknown" ]; # wasm
  34. };
  35. # MSRV stable
  36. msrv_toolchain = pkgs.rust-bin.stable."1.63.0".default.override {
  37. targets = [ "wasm32-unknown-unknown" ]; # wasm
  38. };
  39. # DB MSRV stable
  40. db_msrv_toolchain = pkgs.rust-bin.stable."1.66.0".default.override {
  41. targets = [ "wasm32-unknown-unknown" ]; # wasm
  42. };
  43. # Nighly for creating lock files
  44. nightly_toolchain = pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default);
  45. # Common inputs
  46. envVars = { };
  47. buildInputs = with pkgs; [
  48. # Add additional build inputs here
  49. git
  50. pkg-config
  51. curl
  52. just
  53. protobuf3_20
  54. nixpkgs-fmt
  55. rust-analyzer
  56. typos
  57. ] ++ libsDarwin;
  58. # WASM deps
  59. WASMInputs = with pkgs; [
  60. ];
  61. nativeBuildInputs = with pkgs; [
  62. # Add additional build inputs here
  63. ] ++ lib.optionals isDarwin [
  64. # Additional darwin specific native inputs can be set here
  65. ];
  66. in
  67. {
  68. checks = {
  69. # Pre-commit checks
  70. pre-commit-check =
  71. let
  72. # this is a hack based on https://github.com/cachix/pre-commit-hooks.nix/issues/126
  73. # we want to use our own rust stuff from oxalica's overlay
  74. _rust = pkgs.rust-bin.stable.latest.default;
  75. rust = pkgs.buildEnv {
  76. name = _rust.name;
  77. inherit (_rust) meta;
  78. buildInputs = [ pkgs.makeWrapper ];
  79. paths = [ _rust ];
  80. pathsToLink = [ "/" "/bin" ];
  81. postBuild = ''
  82. for i in $out/bin/*; do
  83. wrapProgram "$i" --prefix PATH : "$out/bin"
  84. done
  85. '';
  86. };
  87. in
  88. pre-commit-hooks.lib.${system}.run {
  89. src = ./.;
  90. hooks = {
  91. rustfmt = {
  92. enable = true;
  93. entry = lib.mkForce "${rust}/bin/cargo-fmt fmt --all -- --config format_code_in_doc_comments=true --check --color always";
  94. };
  95. nixpkgs-fmt.enable = true;
  96. typos.enable = true;
  97. commitizen.enable = true; # conventional commits
  98. };
  99. };
  100. };
  101. devShells =
  102. let
  103. # pre-commit-checks
  104. _shellHook = (self.checks.${system}.pre-commit-check.shellHook or "");
  105. # devShells
  106. msrv = pkgs.mkShell ({
  107. shellHook = "
  108. ${_shellHook}
  109. cargo update -p half --precise 2.2.1
  110. cargo update -p tokio --precise 1.38.1
  111. cargo update -p tokio-util --precise 0.7.11
  112. cargo update -p tokio-stream --precise 0.1.15
  113. cargo update -p reqwest --precise 0.12.4
  114. cargo update -p serde_with --precise 3.1.0
  115. cargo update -p regex --precise 1.9.6
  116. cargo update -p backtrace --precise 0.3.58
  117. # For wasm32-unknown-unknown target
  118. cargo update -p bumpalo --precise 3.12.0
  119. ";
  120. buildInputs = buildInputs ++ WASMInputs ++ [ msrv_toolchain ];
  121. inherit nativeBuildInputs;
  122. } // envVars);
  123. stable = pkgs.mkShell ({
  124. shellHook = "${_shellHook}";
  125. buildInputs = buildInputs ++ WASMInputs ++ [ stable_toolchain ];
  126. inherit nativeBuildInputs;
  127. } // envVars);
  128. db_shell = pkgs.mkShell ({
  129. shellHook = "
  130. ${_shellHook}
  131. cargo update -p half --precise 2.2.1
  132. cargo update -p home --precise 0.5.5
  133. cargo update -p tokio --precise 1.38.1
  134. cargo update -p tokio-stream --precise 0.1.15
  135. cargo update -p serde_with --precise 3.1.0
  136. cargo update -p reqwest --precise 0.12.4
  137. ";
  138. buildInputs = buildInputs ++ WASMInputs ++ [ db_msrv_toolchain ];
  139. inherit nativeBuildInputs;
  140. } // envVars);
  141. nightly = pkgs.mkShell ({
  142. shellHook = "${_shellHook}";
  143. buildInputs = buildInputs ++ [ nightly_toolchain ];
  144. inherit nativeBuildInputs;
  145. } // envVars);
  146. in
  147. {
  148. inherit msrv stable nightly db_shell;
  149. default = stable;
  150. };
  151. }
  152. );
  153. }