shell.nix 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. {
  2. sources ? import ./sources.nix,
  3. nixpkgs ? sources.nixpkgs,
  4. niv ? sources.niv,
  5. mkCli ? sources.mkCli,
  6. }: let
  7. niv-overlay = self: _: {
  8. niv = self.symlinkJoin {
  9. name = "niv";
  10. paths = [niv];
  11. buildInputs = [self.makeWrapper];
  12. postBuild = ''
  13. wrapProgram $out/bin/niv \
  14. --add-flags "--sources-file ${toString ./sources.json}"
  15. '';
  16. };
  17. };
  18. mkCli-overlay = import "${mkCli}/overlay.nix";
  19. nodejs-overlay = _: super: {
  20. nodejs = super.nodejs_18;
  21. };
  22. pkgs = import nixpkgs {
  23. overlays = [
  24. niv-overlay
  25. mkCli-overlay
  26. nodejs-overlay
  27. ];
  28. config = {};
  29. };
  30. cli = pkgs.lib.mkCli "cli" {
  31. _noAll = true;
  32. install = "${pkgs.nodePackages.pnpm}/bin/pnpm i";
  33. test = {
  34. nix = {
  35. lint = "${pkgs.statix}/bin/statix check --ignore node_modules .";
  36. dead-code = "${pkgs.deadnix}/bin/deadnix --exclude ./node_modules .";
  37. format = "${pkgs.alejandra}/bin/alejandra --exclude ./node_modules --check .";
  38. };
  39. };
  40. fix = {
  41. nix = {
  42. lint = "${pkgs.statix}/bin/statix fix --ignore node_modules .";
  43. dead-code = "${pkgs.deadnix}/bin/deadnix --exclude ./node_modules -e .";
  44. format = "${pkgs.alejandra}/bin/alejandra --exclude ./node_modules .";
  45. };
  46. };
  47. };
  48. in
  49. pkgs.mkShell {
  50. FORCE_COLOR = 1;
  51. buildInputs = [
  52. cli
  53. pkgs.git
  54. pkgs.niv
  55. pkgs.nodejs
  56. pkgs.python3
  57. pkgs.pkg-config
  58. pkgs.nodePackages.pnpm
  59. pkgs.cargo
  60. pkgs.pre-commit
  61. ];
  62. }