diff --git a/ci/default.nix b/ci/default.nix index f5a6cf7d3dd0..64b89f0217d9 100644 --- a/ci/default.nix +++ b/ci/default.nix @@ -21,9 +21,42 @@ let config = { }; overlays = [ ]; }; + + fmt = + let + treefmtNixSrc = fetchTarball { + # Master at 2025-02-12 + url = "https://github.com/numtide/treefmt-nix/archive/4f09b473c936d41582dd744e19f34ec27592c5fd.tar.gz"; + sha256 = "051vh6raskrxw5k6jncm8zbk9fhbzgm1gxpq9gm5xw1b6wgbgcna"; + }; + treefmtEval = (import treefmtNixSrc).evalModule pkgs { + # Important: The auto-rebase script uses `git filter-branch --tree-filter`, + # which creates trees within the Git repository under `.git-rewrite/t`, + # notably without having a `.git` themselves. + # So if this projectRootFile were the default `.git/config`, + # having the auto-rebase script use treefmt on such a tree would make it + # format all files in the _parent_ Git tree as well. + projectRootFile = ".git-blame-ignore-revs"; + + # Be a bit more verbose by default, so we can see progress happening + settings.verbose = 1; + + # By default it's info, which is too noisy since we have many unmatched files + settings.on-unmatched = "debug"; + + # This uses nixfmt-rfc-style underneath, + # the default formatter for Nix code. + # See https://github.com/NixOS/nixfmt + programs.nixfmt.enable = true; + }; + in + { + shell = treefmtEval.config.build.devShell; + }; + in { - inherit pkgs; + inherit pkgs fmt; requestReviews = pkgs.callPackage ./request-reviews { }; codeownersValidator = pkgs.callPackage ./codeowners-validator { }; eval = pkgs.callPackage ./eval { }; diff --git a/shell.nix b/shell.nix index d8235f187559..6de2ff12daac 100644 --- a/shell.nix +++ b/shell.nix @@ -16,7 +16,7 @@ nixpkgs ? null, }: let - inherit (import ./ci { inherit nixpkgs system; }) pkgs; + inherit (import ./ci { inherit nixpkgs system; }) pkgs fmt; # For `nix-shell -A hello` curPkgs = builtins.removeAttrs (import ./. { inherit system; }) [ @@ -28,10 +28,10 @@ let in curPkgs // pkgs.mkShellNoCC { + inputsFrom = [ + fmt.shell + ]; packages = with pkgs; [ - # The default formatter for Nix code - # See https://github.com/NixOS/nixfmt - nixfmt-rfc-style # Helper to review Nixpkgs PRs # See CONTRIBUTING.md nixpkgs-review