flake.nix 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. {
  2. inputs = {
  3. nixpkgs.url = "github:NixOS/nixpkgs";
  4. flake-utils.url = "github:numtide/flake-utils";
  5. mkCli.url = "github:cprussin/mkCli";
  6. rust-overlay = {
  7. url = "github:oxalica/rust-overlay";
  8. inputs.nixpkgs.follows = "nixpkgs";
  9. };
  10. };
  11. outputs = {
  12. nixpkgs,
  13. flake-utils,
  14. mkCli,
  15. rust-overlay,
  16. ...
  17. }: (
  18. flake-utils.lib.eachDefaultSystem
  19. (
  20. system: let
  21. cli-overlay = nixpkgs.lib.composeExtensions mkCli.overlays.default (_: prev: let
  22. cargo = "cargo --color=always";
  23. in {
  24. cli = prev.lib.mkCli "cli" {
  25. _noAll = true;
  26. start = "${cargo} sqlx migrate run && ${cargo} sqlx prepare && RUST_LOG=info ${cargo} watch -x 'run -- run'";
  27. test = {
  28. format = "${cargo} fmt --check";
  29. lint = "${cargo} sqlx migrate run && ${cargo} sqlx prepare && ${cargo} clippy --color always";
  30. unit = "${cargo} sqlx migrate run && ${cargo} sqlx prepare && ${cargo} test -- --color always";
  31. };
  32. fix = {
  33. format = "${cargo} fmt";
  34. lint = "${cargo} sqlx migrate run && ${cargo} sqlx prepare && ${cargo} clippy -- --color always --fix";
  35. };
  36. };
  37. });
  38. pkgs = import nixpkgs {
  39. inherit system;
  40. overlays = [cli-overlay rust-overlay.overlays.default];
  41. config = {};
  42. };
  43. in {
  44. devShells.default = pkgs.mkShell {
  45. buildInputs = [
  46. pkgs.cli
  47. pkgs.git
  48. pkgs.openssl
  49. pkgs.pkg-config
  50. pkgs.rust-analyzer
  51. pkgs.rust-bin.stable."1.82.0".default
  52. pkgs.sqlx-cli
  53. pkgs.foundry
  54. pkgs.sqlite
  55. pkgs.cargo-watch
  56. ];
  57. };
  58. }
  59. )
  60. );
  61. }