Typically services have a `package` option, so it can be set externally
if users are running the stable version but want the package from
unstable, or devs want to test a package from their flake in production.
Really useful in many situations!
Also, the previous implementation was using `pkgs.runCommand` which is
discouraged due to
[IFD](https://nix.dev/manual/nix/2.26/language/import-from-derivation)
(import from derivation) leading to potential slowdowns during
evaluation. I opted for reading the json file and using
[lib.attrsets.recursiveUpdate](https://ryantm.github.io/nixpkgs/functions/library/attrsets/#function-library-lib.attrsets.recursiveUpdate)
to update the default values with the user provided ones.
- fixes#426282
- current implementation breaks generation of strategies,
when strategies are not defined by user.
- minimal working config with `strategies.default = null`:
```nix
hardware.fw-fanctrl = {
enable = true;
config.strategies = { };
};
```
- User should be able to start the service, when only `hardware.fw-fanctrl.enable`
is enabled.