nixos-hardware/CONTRIBUTING.md

1.1 KiB

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:

{ 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.