1
0
Fork 0
mirror of https://github.com/hercules-ci/flake-parts.git synced 2024-12-14 11:47:31 +00:00
flake-parts/CONTRIBUTING.md
2023-05-07 13:25:12 +02:00

1.6 KiB

How do I contribute?

Flake-parts is designed to be extremely modular, so often, you don't have to.

Nonetheless, some changes can only be made here.

Step 1. Look for an open or closed issue. This may be the quickest path to a solution to your problem.

Step 2. If needed, open an issue. This way we can discuss the problem, and if necessary discuss changes, if any need to be made.

Step 3. If needed, create a PR. Make sure to run nix-shell before comitting. It installs a pre-commit hook with nixpkgs-fmt.

Style

This repository is written in a style similar to that of Nixpkgs, with some exceptions. The following sections describe such additions, exceptions, and it probably confirms some rules.

Rule #1. Go with the flow

Write code that fits in. Don't reformat existing code. Don't obsess over fitting in. Write good docs and tests instead.

Camel case

  • File names may be in camelCase. This reduces the number of unique names in the project.

Except for file names, the Nixpkgs casing rule is maintained here as well:

  • Package names are verbatim or in snake-case. Example:

    • flake-parts-lib
  • Functionality provided by flake-parts is in camelCase. Examples:

    • getSystem
    • mkFlake

Operators and such

  • The "contains attribute" operator is spelled without spaces, just like the "select attribute" operator. I believe Nixpkgs is undecided on this.

    if x?a then x.a else "does not have a"
    #  ^^^
    
  • @ pattern goes before and uses no extra spaces.

    # immediately before parameter list when single line
    pair@{ name, value }:
    
    # newline after @ when multi-line
    pair@
    { name
    , value
    }