From e482d1ef943519aab59d35144cb2edc00e0f5330 Mon Sep 17 00:00:00 2001 From: leiserfg Date: Fri, 15 May 2026 09:31:58 +0200 Subject: [PATCH] Extract prek builtin hooks --- modules/pre-commit.nix | 48 +++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/modules/pre-commit.nix b/modules/pre-commit.nix index 75f71c11..b39c2fcf 100644 --- a/modules/pre-commit.nix +++ b/modules/pre-commit.nix @@ -36,7 +36,7 @@ let (builtins.attrValues enabledHooks); in if sortedHooks ? result then - builtins.map (value: value.raw) sortedHooks.result + sortedHooks.result else let getIds = builtins.map (value: value.id); @@ -61,6 +61,33 @@ let ${prettyPrintCycle { indent = " "; } sortedHooks.cycle} ''; + _prekBuiltins = + if usingPrek then + builtins.filter (s: s != "") (builtins.split "\n" ( + builtins.readFile ( + pkgs.runCommand "prek-builtins.txt" + { + buildInputs = [ cfg.package ]; + PREK_HOME = "/tmp/"; # This is to avoid prek trying to create ~/.cache/prek/ + } + ''${lib.getExe cfg.package} util list-builtins > $out'' + ) + )) + else + [ ]; + + _is_builtin = + { + package, + name, + ... + }: + usingPrek && (package.pname == "pre-commit-hooks") && (builtins.elem name _prekBuiltins); + + _partitioned = builtins.partition _is_builtin processedHooks; + + builtinHooks = builtins.map (value: builtins.removeAttrs value.raw [ "entry" ]) _partitioned.right; + localHooks = builtins.map (value: value.raw) _partitioned.wrong; configFile = performAssertions ( @@ -455,13 +482,18 @@ in rawConfig = { - repos = - [ - { - repo = "local"; - hooks = processedHooks; - } - ]; + repos = [ + { + repo = "local"; + hooks = localHooks; + } + ] + ++ lib.optionals (builtinHooks != [ ]) [ + { + repo = "builtin"; + hooks = builtinHooks; + } + ]; } // lib.optionalAttrs (cfg.excludes != [ ]) { exclude = mergeExcludes cfg.excludes; } // lib.optionalAttrs (cfg.default_stages != [ ]) {