treefmt.nix

 1{
 2  pkgs,
 3  excludes ? [ ],
 4  ...
 5}:
 6{
 7  projectRootFile = "flake.nix";
 8
 9  programs = {
10    gofmt = {
11      enable = true;
12    };
13
14    mdformat = {
15      enable = false;
16
17      package = pkgs.mdformat.withPlugins (
18        p: with p; [
19          # add support for github flavored markdown
20          mdformat-gfm
21          mdformat-gfm-alerts
22
23          # add support for markdown tables
24          mdformat-tables
25
26          # add the following comment before running `nix fmt` to generate a
27          # table of contents in markdown files:
28          #     <!-- mdformat-toc start -->
29          mdformat-toc
30        ]
31      );
32
33      settings = {
34        end-of-line = "lf";
35        number = true;
36        wrap = 80;
37      };
38    };
39
40    nixfmt = {
41      enable = true;
42      strict = true;
43    };
44
45    prettier = {
46      enable = true;
47
48      settings = {
49        singleQuote = true;
50        trailingComma = "es5";
51      };
52    };
53
54    shfmt = {
55      enable = true;
56    };
57
58    yamlfmt = {
59      enable = true;
60
61      settings.formatter = {
62        eof_newline = true;
63        include_document_start = true;
64        retain_line_breaks_single = true;
65        trim_trailing_whitespace = true;
66      };
67    };
68  };
69
70  settings.global.excludes =
71    pkgs.lib.lists.unique [
72      "*.graphql"
73      "*.png"
74      "*.svg"
75      "*.txt"
76      "doc/man/*.1" # generated via //doc:generate.go
77      "doc/md/*" # generated via //doc:generate.go
78      "misc/completion/*/*"
79      "Makefile"
80    ]
81    ++ excludes;
82
83  settings.formatter = {
84    prettier = {
85      excludes = [
86        "*.md"
87        "*.yaml"
88        "*.yml"
89      ];
90    };
91  };
92}