From 055b17c01bb55d48c208bd88071116552474ca96 Mon Sep 17 00:00:00 2001 From: Valentin Gagarin Date: Wed, 15 May 2024 16:46:03 +0200 Subject: [PATCH] add pre-commit check make sure things are sane before they hit CI, re-purposing the existing treefmt configuration. this adds a custom installer for pre-commit hooks, which is inspired by pre-commit.nix[0], but is much more minimal than the underlying pre-commit[1] and builds on a historic idea[2] from this repository. [0]: https://github.com/cachix/git-hooks.nix [1]: https://github.com/pre-commit/pre-commit [2]: 930923512c03179fe75e4209c27eb3da368e7766 --- devShell.nix | 10 ++++++++-- flake.lock | 17 +++++++++++++++++ flake.nix | 2 ++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/devShell.nix b/devShell.nix index 1815a4f7..ad72eb21 100644 --- a/devShell.nix +++ b/devShell.nix @@ -1,3 +1,4 @@ +{ inputs, ... }: { perSystem = { @@ -8,6 +9,7 @@ }: let writers = pkgs.callPackage ./pkgs/builders/script-writers.nix { }; + inherit (pkgs.callPackage inputs.git-hooks { }) lib; ansiEscapes = { reset = ''\033[0m''; @@ -20,6 +22,11 @@ select-shell = writers.writePython3Bin "select-shell" { flakeIgnore = [ "E501" ]; } ./pkgs/scripts/select-shell.py; + + # run treefmt before each commit + install-pre-commit-hook = + with lib.git-hooks; + pre-commit (wrap.abort-on-change config.treefmt.build.wrapper); in { devShells.default = pkgs.mkShell { @@ -34,8 +41,7 @@ config.treefmt.build.wrapper ]; shellHook = '' - # no longer used - rm -f "$(git rev-parse --show-toplevel)/.git/hooks/pre-commit" + ${install-pre-commit-hook} echo -e "${ansiEscapes.green}switch to another dev-shell using: select-shell${ansiEscapes.reset}" ''; diff --git a/flake.lock b/flake.lock index 00ba773c..f991e74f 100644 --- a/flake.lock +++ b/flake.lock @@ -40,6 +40,22 @@ "type": "github" } }, + "git-hooks": { + "flake": false, + "locked": { + "lastModified": 1716413087, + "narHash": "sha256-nSTIB7JeJGBGsvtqlyfhUByh/isyK1nfOq2YMxUOFJQ=", + "owner": "fricklerhandwerk", + "repo": "git-hooks", + "rev": "99a78fcf7dc03ba7b1d5c00af109c1e28ced3490", + "type": "github" + }, + "original": { + "owner": "fricklerhandwerk", + "repo": "git-hooks", + "type": "github" + } + }, "nixlib": { "locked": { "lastModified": 1712450863, @@ -133,6 +149,7 @@ "inputs": { "disko": "disko", "flake-parts": "flake-parts", + "git-hooks": "git-hooks", "nixos-generators": "nixos-generators", "nixos-images": "nixos-images", "nixpkgs": "nixpkgs", diff --git a/flake.nix b/flake.nix index 3403db97..5a9ee77c 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,8 @@ flake-parts.inputs.nixpkgs-lib.follows = "nixpkgs"; treefmt-nix.url = "github:numtide/treefmt-nix"; treefmt-nix.inputs.nixpkgs.follows = "nixpkgs"; + git-hooks.url = "github:fricklerhandwerk/git-hooks"; + git-hooks.flake = false; }; outputs =