cachix / git-hooks.nix

Seamless integration of https://pre-commit.com git hooks with Nix.
Apache License 2.0
489 stars 149 forks source link

[question] Can I use this to override a hook while leaving `pre-commit-hooks.yaml` alone for my non-nix-using colleagues? #345

Open MatrixManAtYrService opened 1 year ago

MatrixManAtYrService commented 1 year ago

I see that there is already an issue for documenting how to "override" a hook. I also want to override a hook, but I think we mean "override" in different ways.

Most of my team doesn't use nix, so they run pre-commit against a .pre-commit-hooks.yaml which I would be frowned at if I deleted and .gitignored as this warning recommends:

pre-commit-hooks.nix: WARNING: Refusing to install because of pre-existing .pre-commit-config.yaml
    1. Translate .pre-commit-config.yaml contents to the new syntax in your Nix file
        see https://github.com/cachix/pre-commit-hooks.nix#getting-started
    2. remove .pre-commit-config.yaml
    3. add .pre-commit-config.yaml to .gitignore

I maintain a flake.nix in my team's repo because I appreciate the determinism, especially when switching between machines. This comes with certain headaches like this one. Since charliermarsh/ruff-pre-commit breaks on NixOS but works for my non-nix coworkers, I'd like to do the following.

A: contribute a ruff pre-commit hook to pre-commit-hooks.nix B: configure pre-commit-hooks.nix to run the nix-friendly hook instead of charliermarsh/ruff-pre-commit, but otherwise conform to the existing hooks C: commit this configuration to my repo in a way that does not break my non-nix coworker's workflows

So when I say "override" I mean:

leave the traditional pre-commit configuration intact but have pre-commit-hooks.nix "take over" for certain hooks.

Can I get some advice on whether pre-commit-hooks.nix is capable of supporting B and C? If so, how would I configure it?

MatrixManAtYrService commented 1 year ago

A more general application of this pattern would be to override cases like this:

    - repo: local
      hooks:
        - id: foo
          language: system
          entry: python ./somescript.py

So that you can map them to declared environments, rather than using whatever pre-commit comes up with for "system"

Dich0tomy commented 1 month ago

Has anyone found a solution for this already? I don't want to necessarily overwrite, but at least keep the existing .pre-commit-hook.yaml for non-nix collaborators

roberth commented 1 month ago

It's currently hardcoded, but I suppose with some hacking (on this repo) the location could be turned into an option

https://github.com/cachix/git-hooks.nix/blob/8d6a17d0cdf411c55f12602624df6368ad86fac1/modules/pre-commit.nix#L62

I think you can pass an alternate config location to pre-commit as well.