nix-config/config/services/homeassistant.nix

116 lines
3 KiB
Nix
Raw Normal View History

2025-01-04 23:25:48 +01:00
{
config,
2025-01-07 21:23:06 +01:00
globals,
2025-01-04 23:25:48 +01:00
nodes,
2025-01-05 22:27:49 +01:00
lib,
2025-01-04 23:25:48 +01:00
...
}:
{
environment.persistence."/persist".directories = [
{
directory = config.services.home-assistant.configDir;
user = "hass";
group = "hass";
mode = "0700";
}
];
wireguard.services = {
client.via = "nucnix";
firewallRuleForNode.nucnix-nginx.allowedTCPPorts = [ 3000 ];
};
services.home-assistant = {
enable = true;
extraComponents = [
"radio_browser"
"met"
"esphome"
"fritzbox"
2025-01-07 21:23:06 +01:00
"homematic"
2025-01-04 23:25:48 +01:00
"soundtouch"
"spotify"
"matter"
2025-01-07 21:23:06 +01:00
"esphome"
2025-01-04 23:25:48 +01:00
#"zha"
"mqtt"
"ollama"
2025-01-04 23:25:48 +01:00
];
config = {
http = {
server_host = [ "0.0.0.0" ];
server_port = 3000;
use_x_forwarded_for = true;
trusted_proxies = [ nodes.nucnix-nginx.config.wireguard.services.ipv4 ];
};
homeassistant = {
name = "!secret ha_name";
latitude = "!secret ha_latitude";
longitude = "!secret ha_longitude";
elevation = "!secret ha_elevation";
currency = "EUR";
time_zone = "Europe/Berlin";
unit_system = "metric";
#external_url = "https://";
packages = {
manual = "!include manual.yaml";
};
};
default_config = { };
### Components not from default_config
frontend = {
#themes = "!include_dir_merge_named themes";
};
2025-01-05 22:27:49 +01:00
# influxdb = {
# api_version = 2;
# host = globals.services.influxdb.domain;
# port = "443";
# max_retries = 10;
# ssl = true;
# verify_ssl = true;
# token = "!secret influxdb_token";
# organization = "home";
# bucket = "home_assistant";
# };
2025-01-04 23:25:48 +01:00
};
extraPackages =
python3Packages: with python3Packages; [
psycopg2
gtts
2025-01-07 21:23:06 +01:00
fritzconnection
adguardhome
2025-01-04 23:25:48 +01:00
];
};
2025-01-07 21:23:06 +01:00
networking.hosts = {
"${nodes.${globals.services.adguardhome.host}.config.wireguard.services.ipv4}" = [
"adguardhome.internal"
];
"${nodes.${globals.services.ollama.host}.config.wireguard.services.ipv4}" = [
"ollama.internal"
];
2025-01-07 21:23:06 +01:00
};
2025-01-05 22:27:49 +01:00
age.secrets."home-assistant-secrets.yaml" = {
rekeyFile = "${config.node.secretsDir}/secrets.yaml.age";
owner = "hass";
};
systemd.services.home-assistant = {
# Update influxdb token
# We don't use -i because it would require chown with is a @privileged syscall
# INFLUXDB_TOKEN="$(cat ${config.age.secrets.hass-influxdb-token.path})" \
# ${lib.getExe pkgs.yq-go} '.influxdb_token = strenv(INFLUXDB_TOKEN)'
2025-01-05 22:27:49 +01:00
preStart = lib.mkBefore ''
if [[ -e ${config.services.home-assistant.configDir}/secrets.yaml ]]; then
rm ${config.services.home-assistant.configDir}/secrets.yaml
fi
cat ${
config.age.secrets."home-assistant-secrets.yaml".path
} > ${config.services.home-assistant.configDir}/secrets.yaml
touch -a ${config.services.home-assistant.configDir}/{automations,scenes,scripts,manual}.yaml
'';
};
2025-01-04 23:25:48 +01:00
}