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 a2b71934..78caa032 100644 --- a/flake.lock +++ b/flake.lock @@ -40,6 +40,22 @@ "type": "github" } }, + "git-hooks": { + "flake": false, + "locked": { + "lastModified": 1715912400, + "narHash": "sha256-7GYXKJP7bglYgofN3/PW5EBGaGOIKbBKSgFb6m4ttC4=", + "owner": "fricklerhandwerk", + "repo": "git-hooks", + "rev": "5a23214ca74a7656048fe1402c4e98f5cd2b3729", + "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 3b289028..2d6fc28b 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 =