/ packages / treefmt.nix
treefmt.nix
 1  {
 2    inputs,
 3    pkgs,
 4    writeTextFile,
 5    ...
 6  }:
 7  let
 8    styluaTOML = writeTextFile {
 9      name = "stylua.toml";
10      text = ''
11        indent_type = "Spaces"
12        indent_width = 2
13      '';
14    };
15  
16    treefmt = inputs.treefmt-nix.lib.evalModule pkgs {
17      projectRootFile = "flake.nix";
18  
19      settings = {
20        allow-missing-formatter = true;
21        verbose = 0;
22  
23        global.excludes = [
24          "*.age"
25          "*.jpg"
26          "*.lock"
27          "*.png"
28          "*.svg"
29          "*-lock.*"
30          "*ignore"
31          "*.md"
32        ];
33  
34        formatter = {
35          nixfmt.options = [ "--strict" ];
36          shfmt.options = [
37            "--ln"
38            "bash"
39          ];
40          stylua.options = [
41            "--config-path"
42            styluaTOML.outPath
43          ];
44        };
45      };
46  
47      programs = {
48        clang-format.enable = true;
49        nixfmt.enable = true;
50        prettier.enable = true;
51        ruff.enable = true;
52        shfmt.enable = true;
53        stylua.enable = true;
54        taplo.enable = true;
55  
56        rustfmt = {
57          enable = true;
58  
59          package = pkgs.rust-bin.nightly.latest.default.overrideAttrs (oldAttrs: {
60            meta = oldAttrs.meta // {
61              mainProgram = "rustfmt";
62            };
63          });
64        };
65      };
66    };
67  in
68  treefmt.config.build.wrapper