about summary refs log tree commit diff stats
path: root/nix/pre-commit-checks.nix
diff options
context:
space:
mode:
Diffstat (limited to 'nix/pre-commit-checks.nix')
-rw-r--r--nix/pre-commit-checks.nix95
1 files changed, 95 insertions, 0 deletions
diff --git a/nix/pre-commit-checks.nix b/nix/pre-commit-checks.nix
new file mode 100644
index 0000000..bd6df7c
--- /dev/null
+++ b/nix/pre-commit-checks.nix
@@ -0,0 +1,95 @@
+{ pkgs }:
+rec {
+  src = ../.;
+  hooks = {
+    gotest.enable = true;
+    golangci-lint.enable = true;
+    staticcheck =
+      let
+        wrapper = pkgs.symlinkJoin {
+          name = "staticcheck-wrapped";
+          paths = [ pkgs.go-tools ];
+          nativeBuildInputs = [ pkgs.makeWrapper ];
+          postBuild = ''
+            wrapProgram $out/bin/staticcheck \
+              --prefix PATH : ${pkgs.lib.makeBinPath [ pkgs.go ]}
+          '';
+        };
+      in
+      {
+        enable = true;
+        package = wrapper;
+        entry =
+          let
+            script = pkgs.writeShellScript "precommit-staticcheck" ''
+              err=0
+              for dir in $(echo "$@" | xargs -n1 dirname | sort -u); do
+                ${hooks.staticcheck.package}/bin/staticcheck ./"$dir"
+                code="$?"
+                if [[ "$err" -eq 0 ]]; then
+                  err="$code"
+                fi
+              done
+              exit $err
+            '';
+          in
+          builtins.toString script;
+      };
+
+    statix = {
+      enable = true;
+      settings.ignore = [ "nix/*" ];
+    };
+    deadnix = {
+      enable = true;
+      excludes = [ "nix/.*" ];
+    };
+    nixpkgs-fmt = {
+      enable = true;
+      excludes = [ "nix/.*" ];
+    };
+
+    convco.enable = true;
+
+    check-case-conflicts.enable = true;
+    check-symlinks.enable = true;
+    editorconfig-checker.enable = true;
+    prettier = {
+      enable = true;
+      types_or = [ "plain-text" "yaml" "gotmpl" "javascript" ];
+      settings = {
+        plugins = with pkgs.nodePackages; [
+          "${prettier-plugin-go-template}/lib/node_modules/prettier-plugin-go-template/lib/index.js"
+        ];
+      };
+    };
+
+    yamllint = {
+      enable = true;
+    };
+    golines = {
+      enable = true;
+      name = "golines";
+      description = "A golang formatter that fixes long lines";
+      types_or = [ "go" ];
+      entry = "${pkgs.golines}/bin/golines --write-output";
+      pass_filenames = true;
+    };
+    go-mod-tidy = {
+      enable = true;
+      name = "go-mod-tidy";
+      description = "Run `go mod tidy`";
+      types_or = [ "go" "go-mod" ];
+      entry = "${pkgs.go}/bin/go mod tidy";
+      pass_filenames = false;
+    };
+    gomod2nix = {
+      enable = true;
+      name = "gomod2nix";
+      description = "Import go.mod updates to nix";
+      types_or = [ "go-sum" ];
+      entry = "${pkgs.gomod2nix}/bin/gomod2nix";
+      pass_filenames = false;
+    };
+  };
+}