diff --git a/.envrc b/.envrc new file mode 100644 index 0000000..3550a30 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.gitignore b/.gitignore index c41aa9d..5b12f7f 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ **/result +.direnv .pre-commit-config.yaml diff --git a/flake.nix b/flake.nix index d67648e..7b3d88e 100755 --- a/flake.nix +++ b/flake.nix @@ -254,14 +254,29 @@ pkgs.writeShellScriptBin "pre-commit-run" script ); - checks = forEachSystem (system: { - pre-commit-check = inputs.git-hooks.lib.${system}.run { - src = ./.; - hooks = { - nixfmt.enable = true; + checks = forEachSystem ( + system: + let + pkgs = import nixpkgs { inherit system; }; + in + { + pre-commit-check = inputs.git-hooks.lib.${system}.run { + src = ./.; + hooks = { + nixfmt.enable = true; + + check-comment = { + enable = true; + name = "check comment"; + entry = "${pkgs.callPackage ./githooks/check-comment.nix { }}"; + files = "\\.nix$"; + pass_filenames = false; + stages = [ "pre-commit" ]; + }; + }; }; - }; - }); + } + ); devShells = forEachSystem (system: { default = diff --git a/githooks/check-comment.nix b/githooks/check-comment.nix new file mode 100644 index 0000000..d1d44f0 --- /dev/null +++ b/githooks/check-comment.nix @@ -0,0 +1,19 @@ +{ pkgs, lib }: +pkgs.writeShellScript "check-comment" '' + FILES=$("${lib.getExe pkgs.git}" diff --cached --name-only --diff-filter=ACM | grep '\.nix$' | grep -v '^githooks/check-comment.nix$') + + TODO_FOUND=0 + + for file in $FILES; do + if grep -nHE '#\s*(TODO|FIXME|FIX):' "$file"; then + TODO_FOUND=1 + fi + done + + if [ $TODO_FOUND -eq 1 ]; then + echo "Remove all the '#TODO|FIXME|FIX' before committing" + exit 1 + fi + + exit 0 +''