Create module
This commit is contained in:
@@ -17,6 +17,11 @@
|
|||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
];
|
];
|
||||||
in {
|
in {
|
||||||
|
nixosModules = rec {
|
||||||
|
hcpy = import ./module.nix self;
|
||||||
|
default = hcpy;
|
||||||
|
};
|
||||||
|
|
||||||
packages = eachSystem (system: let
|
packages = eachSystem (system: let
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
in rec {
|
in rec {
|
||||||
|
|||||||
102
module.nix
Normal file
102
module.nix
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
self: {
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
system,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
with lib; let
|
||||||
|
cfg = config.services.hcpy;
|
||||||
|
bridgeConfig =
|
||||||
|
cfg.config
|
||||||
|
// {
|
||||||
|
devices_file = cfg.devicesFile;
|
||||||
|
};
|
||||||
|
hcpy = pkgs.writeShellApplication {
|
||||||
|
name = "hcpy-service";
|
||||||
|
runtimeInputs = [self.packages.${system}.default];
|
||||||
|
text = ''
|
||||||
|
if [ ! -f "${cfg.devicesFile}" ]; then
|
||||||
|
echo "Device file does not exist, requesting login to HomeConnect cloud";
|
||||||
|
hcpy login "$(cat "${cfg.homeconnect.usernameFile}")" \
|
||||||
|
"$(cat "${cfg.homeconnect.passwordFile}")" \
|
||||||
|
"${cfg.devicesFile}";
|
||||||
|
fi
|
||||||
|
|
||||||
|
hcpy run ${cli.toGNUCommandLineShell {} bridgeConfig} \
|
||||||
|
--mqtt_username "$(cat "${cfg.mqtt.usernameFile}")" \
|
||||||
|
--mqtt_password "$(cat "${cfg.mqtt.passwordFile}")"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
options.services.hcpy = {
|
||||||
|
enable = mkEnableOption "HomeConnect bridge service";
|
||||||
|
|
||||||
|
homeconnect = {
|
||||||
|
usernameFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to file containing single line with HomeConnect account username";
|
||||||
|
example = "/run/hc.username.key";
|
||||||
|
};
|
||||||
|
|
||||||
|
passwordFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to file containing single line with HomeConnect account password";
|
||||||
|
example = "/run/hc.password.key";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
mqtt = {
|
||||||
|
usernameFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to file containing single line with MQTT client username";
|
||||||
|
example = "/run/mqtt.username.key";
|
||||||
|
};
|
||||||
|
|
||||||
|
passwordFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to file containing single line with MQTT client password";
|
||||||
|
example = "/run/mqtt.password.key";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
devicesFile = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
description = "Path to JSON file fetched from HomeConnect API";
|
||||||
|
example = "/var/lib/hcpy/devices.json";
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkOption {
|
||||||
|
type = types.attrs;
|
||||||
|
description = "The configuration of hcpy bridge";
|
||||||
|
example = {
|
||||||
|
mqtt_host = "localhost";
|
||||||
|
mqtt_prefix = "homeconnect/";
|
||||||
|
mqtt_port = 8883;
|
||||||
|
mqtt_ssl = true;
|
||||||
|
mqtt_cafile = "/run/ca.pem";
|
||||||
|
mqtt_certfile = "/run/cert.crt";
|
||||||
|
mqtt_keyfile = "/run/cert.key";
|
||||||
|
mqtt_clientname = "hcpy1";
|
||||||
|
domain_suffix = "";
|
||||||
|
debug = true;
|
||||||
|
ha-discovery = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
systemd.services.hcpy = {
|
||||||
|
enable = true;
|
||||||
|
description = "HomeConnect bridge service";
|
||||||
|
|
||||||
|
wantedBy = ["multi-user.target"];
|
||||||
|
wants = ["network-online.target"];
|
||||||
|
after = ["network-online.target"];
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
ExecStart = "${hcpy}/bin/hcpy-service";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user