summaryrefslogtreecommitdiffstats
path: root/CONTRIBUTING.md
blob: ea468923ae100f923cf819f1c2ef5a265099ddc4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Writing profiles

When setting an option, use `lib.mkDefault` unless:
- The option *must* be set and the user should get an error if they try to override it.
- The setting should merge with the user's settings (typical for list or set options).

For example:

```nix
{ lib }: {
  # Using mkDefault, because the user might want to disable tlp
  services.tlp.enable = lib.mkDefault true;
  # No need to use mkDefault, because the setting will merge with the user's setting
  boot.kernelModules = [ "tmp_smapi" ];
}
```

Try to avoid "opinionated" settings relating to optional features like sound, bluetooth, choice of bootloader etc.

Where possible, use module imports to share code between similar hardware variants.

# Performance

Profiles should favor usability and stability, so performance improvements should either be conservative or 
be guarded behind additional NixOS module options.

If it makes sense to have a performance-focussed config, it can be declared in a separate profile.

# Testing

Because profiles can only be tested with the appropriate hardware, quality assurance is up to *you*.