Skip to main content

Generate .pre-commit-config.yaml from language and framework presets

Project description

pc-init

Tests codecov pre-commit Ruff pyrefly ty GPLv3 License Python Version PyPI - Version Status

Generate a pre-commit or prek .pre-commit-config.yaml for your project from curated language and framework presets — so you get the right linters, formatters, and quality tools wired up with a single command instead of copying configs between repos. Works with prek and pre-commit

Motivation

Every new repository needs a .pre-commit-config.yaml. Each language and framework has its own recommended linters, formatters, and quality tools, each with its own hook URL and revision. pc-init encodes those choices in version-controlled presets so you run one command instead of copying configs and looking up hook URLs. The bundled presets pin specific hook revisions — run pre-commit autoupdate or prek autoupdate after generation to pull in the latest versions.

Awesome Pre-commit Hooks

The curated hooks bundled with pc-init are also published as a standalone reference at awesome-pre-commit-hooks — a browsable list of every hook organised by language and framework.

Installation

uv tool install pc-init

Usage

Usage: pc-init [OPTIONS] COMMAND [ARGS]...

  Generate a .pre-commit-config.yaml for your project.

Options:
  --lang       TEXT  Language preset to include (repeatable, or
                     comma-delimited: --lang=py,js). Run `pc-init list` to
                     see supported values from the active catalog.
  --framework  TEXT  Framework preset to layer on top of language baselines
                     (repeatable, or comma-delimited: --framework=react,django).
                     Run `pc-init list` to see supported values from the
                     active catalog.
  --force            Overwrite existing .pre-commit-config.yaml without
                     prompting.
  --output     TEXT  Output file path.  [default: .pre-commit-config.yaml]
  --presets    TEXT  Preset catalog to use. Accepts a local directory path or
                     a git repository URL (https://, git@, git://, ssh://).
                     The directory / repo root must contain lang/ and
                     framework/ subdirectories. Defaults to the bundled
                     presets.
  --version          Show version and exit.
  --help             Show this message and exit.

Commands:
  list  List available language and framework presets in the active catalog.

List available presets

Run pc-init list to discover all supported languages and frameworks in the active catalog (bundled or custom):

pc-init list
Languages:
  docker, go, img, js, md, nb, py, ru, sh, sql, tf, toml, ts, yaml

Frameworks:
  django, git, k8s, react, sphinx

Use --presets to list what a custom catalog provides:

pc-init list --presets /path/to/my-presets
pc-init list --presets https://github.com/org/my-presets

Supported presets

Languages — pass as --lang:

ID Language
py Python
js JavaScript
go Go
ru Rust
sh Shell / Bash
ts TypeScript
nb Jupyter Notebooks
md Markdown
img Images
docker Docker
sql SQL
tf Terraform
toml TOML
yaml YAML

Language aliases python, javascript, typescript, rust, golang, shell, bash, image, notebook, jupyter, dockerfile, and terraform are also accepted.

Frameworks — pass as --framework:

ID Framework
react React
django Django
sphinx Sphinx documentation
git Commit message linting
k8s Kubernetes

Examples

Python project:

pc-init --lang py

JavaScript project with React:

pc-init --lang js --framework react

Python + Django, overwriting an existing config:

pc-init --lang py --framework django --force

Multiple languages (two equivalent forms):

pc-init --lang py --lang js
pc-init --lang=py,js

Custom presets

Point --presets at a local directory or a git repository that contains lang/ and framework/ subdirectories in the same layout as the bundled presets.

Local directory:

pc-init --lang py --presets /path/to/my-presets

Git repository:

pc-init --lang py --presets https://github.com/org/my-presets

Check the config files

To check the config files with pre-commit and prek for a specific language or framework:

pre-commit validate-config lang/py/preset.yaml
prek validate-config lang/py/preset.yaml

Update bundled presets

Update a config file with the command:

pre-commit autoupdate lang/py/preset.yaml
prek autoupdate lang/py/preset.yaml

Check and update all presets

To pull the latest hook revisions into all bundled preset files:

find . -name "preset*.yaml" | xargs -I{} prek validate-config {}
find . -name "preset*.yaml" | xargs -I{} prek autoupdate -c {}
find . -name "preset*.yaml" | xargs -I{} pre-commit validate-config {}
find . -name "preset*.yaml" | xargs -I{} pre-commit autoupdate -c {}

Contributing

See CONTRIBUTING.md for development setup, preset guidelines, and the pull request checklist.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pc_init-0.2.0.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pc_init-0.2.0-py3-none-any.whl (35.7 kB view details)

Uploaded Python 3

File details

Details for the file pc_init-0.2.0.tar.gz.

File metadata

  • Download URL: pc_init-0.2.0.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pc_init-0.2.0.tar.gz
Algorithm Hash digest
SHA256 12276731b9277735adc738d5e6c56b774bd6e2cf47980f72dc6f3667215c8f17
MD5 5d2037b2b34c768d57e4560c91401173
BLAKE2b-256 34cc9b5f48b523c1d4039dec93d9d46ef93c2015cde38b63b1b36f12233d5804

See more details on using hashes here.

Provenance

The following attestation bundles were made for pc_init-0.2.0.tar.gz:

Publisher: test-build-publish.yml on cleder/gpc-init

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pc_init-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pc_init-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 35.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pc_init-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0324d49e9e21842fa385b97a3d6c4d3322689acfc2785a51138421b0cf142ea
MD5 09dc127e29e109991d833e32eab131eb
BLAKE2b-256 4c4506fe86a4341175d636ac4d40eaf1b6c38f86640475afb379bacd0bc1d81d

See more details on using hashes here.

Provenance

The following attestation bundles were made for pc_init-0.2.0-py3-none-any.whl:

Publisher: test-build-publish.yml on cleder/gpc-init

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page