{ config, lib, pkgs, namespace, ... }: with lib; let inherit (lib.${namespace}) mkOpt; cfg = config.${namespace}.services.home-assistant.automation; automationToYaml = lscfg: '' - id: '${toString lscfg.id}' alias: ${lscfg.alias} description: '${lscfg.description}' triggers: - device_id: ${lscfg.mqttDeviceId} domain: mqtt id: on press subtype: on-press trigger: device type: action - device_id: ${lscfg.mqttDeviceId} domain: mqtt id: off press subtype: off-press trigger: device type: action - device_id: ${lscfg.mqttDeviceId} domain: mqtt id: up press subtype: up-press trigger: device type: action - device_id: ${lscfg.mqttDeviceId} domain: mqtt id: down press subtype: down-press trigger: device type: action - device_id: ${lscfg.mqttDeviceId} domain: mqtt id: on hold subtype: on-hold trigger: device type: action conditions: [] actions: - choose: - conditions: - condition: trigger id: - on press sequence: - action: light.turn_on data: brightness_pct: ${toString lscfg.brightnessPercent} kelvin: ${toString lscfg.lightTemperature} transition: ${toString lscfg.transitionTime} metadata: {} target: entity_id: - ${lscfg.lightEntityId} - conditions: - condition: trigger id: - off press sequence: - action: light.turn_off data: transition: ${toString lscfg.transitionTime} metadata: {} target: entity_id: - ${lscfg.lightEntityId} - conditions: - condition: trigger id: - up press sequence: - action: light.turn_on data: brightness_step_pct: ${toString lscfg.brightnessStepPercent} metadata: {} target: entity_id: ${lscfg.lightEntityId} - conditions: - condition: trigger id: - down press sequence: - action: light.turn_on data: brightness_step_pct: ${toString (-lscfg.brightnessStepPercent)} metadata: {} target: entity_id: ${lscfg.lightEntityId} - conditions: - condition: trigger id: - on hold sequence: - action: light.turn_on data: brightness_pct: 100 rgb_color: - 255 - 0 - 0 transition: 0 metadata: {} target: entity_id: - ${lscfg.lightEntityId} mode: single ''; lightswitchAutomations = concatStringsSep "\n" (mapAttrsToList (_: automationToYaml) cfg.lightswitch); in { options.${namespace}.services.home-assistant.automation = { lightswitch = mkOpt (types.attrsOf ( types.submodule { options = { id = mkOpt types.int 0 "Automation Id"; alias = mkOpt types.str "" "Alias/Friendly Name"; description = mkOpt types.str "" "Automation Description"; mqttDeviceId = mkOpt types.str "" "mqtt device id of the sitch"; lightEntityId = mkOpt types.str "" "home assistant entity id for the lights"; transitionTime = mkOpt types.int 2 "light transition time in seconds"; brightnessPercent = mkOpt types.int 100 "brightness percentage when turned on"; lightTemperature = mkOpt types.int 6000 "light temperature when turned on"; brightnessStepPercent = mkOpt types.int 10 "dimmer step in brightness percent"; }; } )) { } "lightswitch automations"; }; config = { environment.etc."lightswitch-automations.yaml".text = lightswitchAutomations; systemd.tmpfiles.rules = [ "d /var/lib/homeassistant/automations 0755 hass hass -" "L+ /var/lib/hass/automations/lightswitches.yaml - - - - ${lightswitchAutomations}" ]; }; }