Pre-commit
This extension generates the .pre-commit-config.yaml
file used to configure
pre-commit.
Usage
The extension accepts a simplified configuration format that significantly reduces the verbosity. When managing pre-commit with Nix, creating a single "local" repo entry and adding system hooks that call out to binaries in the Nix store is often desirable. The benefit of this approach is that Nix manages the versioning of the binaries, and you have greater control over how the hook operates.
The accepted format is as follows:
{
nixpkgs-fmt = {
entry = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt";
language = "system";
files = "\\.nix";
}
}
The format is a set consisting of hook names as the keys and their configuration
properties as values. The id
and name
fields of the hook configuration are
set to the hook name (i.e., nixpkgs-fmt
). The entry
should point to the
binary called by pre-commit. Setting language
to "system" ensures that the
entry
is called with the default shell. Finally, setting files
ensures that
pre-commit only passes Nix files to this hook. The above configuration would
produce the following pre-commit-config.yaml
file:
repos:
- hooks:
- entry: /nix/store/pmfl7q4fqqibkfz71lsrkcdi04m0mclf-nixpkgs-fmt-1.2.0/bin/nixpkgs-fmt
files: \.nix
id: nixpkgs-fmt
language: system
name: nixpkgs-fmt
repo: local