diff --git a/nixos/doc/manual/release-notes/rl-2105.xml b/nixos/doc/manual/release-notes/rl-2105.xml
index 6e4a9e7114b..b45c19fa9af 100644
--- a/nixos/doc/manual/release-notes/rl-2105.xml
+++ b/nixos/doc/manual/release-notes/rl-2105.xml
@@ -692,6 +692,12 @@ environment.systemPackages = [
skip-kernel-setup true and takes care of setting forwarding and rp_filter sysctls by itself as well
as for each interface in services.babeld.interfaces.
+
+
+
+ The option has been renamed to and
+ now follows RFC 0042.
+
diff --git a/nixos/modules/services/misc/zigbee2mqtt.nix b/nixos/modules/services/misc/zigbee2mqtt.nix
index cd987eb76c7..63951348172 100644
--- a/nixos/modules/services/misc/zigbee2mqtt.nix
+++ b/nixos/modules/services/misc/zigbee2mqtt.nix
@@ -5,26 +5,8 @@ with lib;
let
cfg = config.services.zigbee2mqtt;
- configJSON = pkgs.writeText "configuration.json"
- (builtins.toJSON (recursiveUpdate defaultConfig cfg.config));
- configFile = pkgs.runCommand "configuration.yaml" { preferLocalBuild = true; } ''
- ${pkgs.remarshal}/bin/json2yaml -i ${configJSON} -o $out
- '';
-
- # the default config contains all required settings,
- # so the service starts up without crashing.
- defaultConfig = {
- homeassistant = false;
- permit_join = false;
- mqtt = {
- base_topic = "zigbee2mqtt";
- server = "mqtt://localhost:1883";
- };
- serial.port = "/dev/ttyACM0";
- # put device configuration into separate file because configuration.yaml
- # is copied from the store on startup
- devices = "devices.yaml";
- };
+ format = pkgs.formats.yaml { };
+ configFile = format.generate "zigbee2mqtt.yaml" cfg.settings;
in
{
meta.maintainers = with maintainers; [ sweber ];
@@ -37,7 +19,11 @@ in
default = pkgs.zigbee2mqtt.override {
dataDir = cfg.dataDir;
};
- defaultText = "pkgs.zigbee2mqtt";
+ defaultText = literalExample ''
+ pkgs.zigbee2mqtt {
+ dataDir = services.zigbee2mqtt.dataDir
+ }
+ '';
type = types.package;
};
@@ -47,9 +33,9 @@ in
type = types.path;
};
- config = mkOption {
+ settings = mkOption {
+ type = format.type;
default = {};
- type = with types; nullOr attrs;
example = literalExample ''
{
homeassistant = config.services.home-assistant.enable;
@@ -61,11 +47,28 @@ in
'';
description = ''
Your configuration.yaml as a Nix attribute set.
+ Check the documentation
+ for possible options.
'';
};
};
config = mkIf (cfg.enable) {
+
+ # preset config values
+ services.zigbee2mqtt.settings = {
+ homeassistant = mkDefault config.services.home-assistant.enable;
+ permit_join = mkDefault false;
+ mqtt = {
+ base_topic = mkDefault "zigbee2mqtt";
+ server = mkDefault "mqtt://localhost:1883";
+ };
+ serial.port = mkDefault "/dev/ttyACM0";
+ # reference device configuration, that is kept in a separate file
+ # to prevent it being overwritten in the units ExecStartPre script
+ devices = mkDefault "devices.yaml";
+ };
+
systemd.services.zigbee2mqtt = {
description = "Zigbee2mqtt Service";
wantedBy = [ "multi-user.target" ];