Skip to content

Commit

Permalink
Create .pre-commit-hooks.yaml
Browse files Browse the repository at this point in the history
This will allow people to enforce the style of .nix files in their own
repos via the pre-commit tool. This change is related to #221, but
it doesn’t actually implement the idea proposed in that issue.

When writing the instructions for how to use the nixfmt pre-commit hook,
I tried to make it clear that there’s a difference between the
pre-commit tool and Git pre-commit hooks in general. I tried to make the
difference between those two things clear for two reasons:

1. Both of those things are called pre-commit which makes it easy for
people to mix them up [1].

2. Depending on how #221 shakes out, the nixfmt project might end up
adding another alternative mechanism for using nixfmt as part of a Git
pre-commit hook script. I’m preemptively using language that makes it
easy to differentiate between those two different mechanisms just in
case there ends up being two different mechanisms in the future.

[1]: <DescentDevelopers/Descent3#450 (comment)>
  • Loading branch information
Jayman2000 committed Aug 26, 2024
1 parent 14be7e6 commit 6d57d1b
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
7 changes: 7 additions & 0 deletions .pre-commit-hooks.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
- id: &id nixfmt
name: *id
entry: *id
language: haskell
types:
- nix
description: The official (but not yet stable) formatter for Nix code
43 changes: 43 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,49 @@ Haskell dependencies will be built by Cabal.
* `nixfmt < input.nix` – reads Nix code from `stdin`, formats it, and outputs to `stdout`
* `nixfmt file.nix` – format the file in place

### With the `pre-commit` tool

If you have Nix files in a Git repo and you want to make sure that they’re formatted with `nixfmt`, then you can use the `pre-commit` tool from [pre-commit.com](https://pre-commit.com):

1. Make sure that you have the `pre-commit` command:

```console
$ pre-commit --version
pre-commit 3.7.1
```

2. Make sure that you’re in your Git repo:

```console
$ cd <path-to-git-repo>
```

3. Make sure that the `pre-commit` tool is installed as a Git pre-commit hook:

```console
$ pre-commit install
pre-commit installed at .git/hooks/pre-commit
```

4. If you don’t already have one, then create a `.pre-commit-config.yaml` file.

5. Add an entry for the `nixfmt` hook to your `.pre-commit-config.yaml` file:

```
repos:
- repo: https://github.com/NixOS/nixfmt
rev: <version>
hooks:
- id: nixfmt
```

If you want to use a stable version of `nixfmt`, then replace `<version>` with a tag from this repo. If you want to use an unstable version of `nixfmt`, then replace `<version>` with a commit hash from this repo.

6. Try to commit a badly formatted Nix file in order to make sure that everything works.

> [!WARNING]
> `nixfmt`’s integration with the `pre-commit` tool is relatively new. At the moment, none of the stable releases of `nixfmt` can be used with the `pre-commit` tool. You’ll have to use an unstable version for the time being.


## About Serokell

Expand Down

0 comments on commit 6d57d1b

Please sign in to comment.