summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-12-23 18:39:15 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-12-23 18:39:15 +0100
commit54c04d379643e92dadeccda6f2423937d5e2b1ee (patch)
tree0605ddaace69334d347161ae7a187fda571da343
parentfeat(pkgs): Hook up to the flake and add needed infrastructure (diff)
downloadnixos-server-54c04d379643e92dadeccda6f2423937d5e2b1ee.tar.gz
nixos-server-54c04d379643e92dadeccda6f2423937d5e2b1ee.zip
build(flake): Use treefmt as nix formatter
This allows us to also keep markdown and other documents, that aren't
nix, formatted.
Diffstat (limited to '')
-rw-r--r--flake.lock23
-rw-r--r--flake.nix18
-rw-r--r--treefmt.nix86
3 files changed, 122 insertions, 5 deletions
diff --git a/flake.lock b/flake.lock
index c85da85..662b7ff 100644
--- a/flake.lock
+++ b/flake.lock
@@ -279,7 +279,8 @@
         "ragenix": "ragenix",
         "rust-overlay": "rust-overlay",
         "simple-nixos-mailserver": "simple-nixos-mailserver",
-        "systems": "systems"
+        "systems": "systems",
+        "treefmt-nix": "treefmt-nix"
       }
     },
     "rust-overlay": {
@@ -342,6 +343,26 @@
         "repo": "x86_64-linux",
         "type": "github"
       }
+    },
+    "treefmt-nix": {
+      "inputs": {
+        "nixpkgs": [
+          "nixpkgs"
+        ]
+      },
+      "locked": {
+        "lastModified": 1734704479,
+        "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=",
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "treefmt-nix",
+        "type": "github"
+      }
     }
   },
   "root": "root",
diff --git a/flake.nix b/flake.nix
index dc63ea9..c7af7b4 100644
--- a/flake.nix
+++ b/flake.nix
@@ -7,6 +7,13 @@
 
     library.url = "git+https://git.vhack.eu/vhack.eu/nix-library?ref=prime";
 
+    treefmt-nix = {
+      url = "github:numtide/treefmt-nix";
+      inputs = {
+        nixpkgs.follows = "nixpkgs";
+      };
+    };
+
     # inputs for following
     systems = {
       url = "github:nix-systems/x86_64-linux"; # only evaluate for this system
@@ -76,6 +83,7 @@
     nixpkgs,
     nixpkgs-unstable,
     library,
+    treefmt-nix,
     # modules
     simple-nixos-mailserver,
     impermanence,
@@ -107,6 +115,7 @@
     vhackPackages = import ./pkgs {inherit pkgs nixLib;};
 
     inherit (library) nixLib;
+    treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;};
   in {
     nixosConfigurations."server1" = nixpkgs.lib.nixosSystem {
       system = "x86_64-linux";
@@ -119,15 +128,17 @@
         ];
     };
 
-    checks."${system}" = tests;
+    checks."${system}" = nixLib.warnMerge tests {
+      formatting =
+        treefmtEval.config.build.check self;
+    } "the flake checks";
 
     packages."${system}" = vhackPackages;
+    formatter."${system}" = treefmtEval.config.build.wrapper;
 
     devShells."${system}" = {
       default = pkgs.mkShell {
         packages = with pkgs; [
-          alejandra
-
           # used for certificate generation in the taskserver setup
           gnutls
 
@@ -138,6 +149,5 @@
         ];
       };
     };
-    formatter."${system}" = pkgs.alejandra;
   };
 }
diff --git a/treefmt.nix b/treefmt.nix
new file mode 100644
index 0000000..e2c6aea
--- /dev/null
+++ b/treefmt.nix
@@ -0,0 +1,86 @@
+{
+  treefmt-nix,
+  pkgs,
+}:
+treefmt-nix.lib.evalModule pkgs (
+  {pkgs, ...}: {
+    # Used to find the project root
+    projectRootFile = "flake.nix";
+
+    programs = {
+      alejandra.enable = true;
+      rustfmt.enable = true;
+      clang-format.enable = true;
+      mdformat.enable = true;
+      shfmt = {
+        enable = true;
+        indent_size = 4;
+      };
+      shellcheck.enable = true;
+      prettier = {
+        settings = {
+          arrowParens = "always";
+          bracketSameLine = false;
+          bracketSpacing = true;
+          editorconfig = true;
+          embeddedLanguageFormatting = "auto";
+          endOfLine = "lf";
+          # experimentalTernaries = false;
+          htmlWhitespaceSensitivity = "css";
+          insertPragma = false;
+          jsxSingleQuote = true;
+          printWidth = 80;
+          proseWrap = "always";
+          quoteProps = "consistent";
+          requirePragma = false;
+          semi = true;
+          singleAttributePerLine = true;
+          singleQuote = true;
+          trailingComma = "all";
+          useTabs = false;
+          vueIndentScriptAndStyle = false;
+
+          tabWidth = 4;
+          overrides = {
+            files = ["*.js"];
+            options.tabwidth = 2;
+          };
+        };
+      };
+      stylua = {
+        enable = true;
+        settings = {
+          sort_requires.enabled = true;
+          column_width = 120;
+          line_endings = "Unix";
+          indent_type = "Spaces";
+          indent_width = 2;
+          quote_style = "ForceDouble";
+          call_parentheses = "Always";
+          # space_after_function_names = "Never";
+          collapse_simple_statement = "Always";
+        };
+      };
+      ruff = {
+        enable = true;
+        format = true;
+      };
+      taplo.enable = true;
+    };
+
+    settings = {
+      global.excludes = [
+        "CHANGELOG.md"
+        "NEWS.md"
+      ];
+      formatter = {
+        clang-format = {
+          options = ["--style" "GNU"];
+        };
+        shfmt = {
+          includes = ["*.bash"];
+        };
+      };
+    };
+  }
+)