e875971237
Fix pyirishrail metadata in the nixpkgs fork, update the mine pin, and remove the local package now supplied by the Home Assistant component.
245 lines
6.8 KiB
Nix
245 lines
6.8 KiB
Nix
{ lib, ... }:
|
|
let
|
|
inherit (lib.my) net;
|
|
inherit (lib.my.c) pubDomain;
|
|
inherit (lib.my.c.home) domain prefixes vips vlanDns hiMTU;
|
|
in
|
|
{
|
|
nixos.systems.hass = { config, ... }: {
|
|
system = "x86_64-linux";
|
|
nixpkgs = "mine";
|
|
rendered = config.configuration.config.my.asContainer;
|
|
|
|
assignments = {
|
|
hi = {
|
|
name = "hass-ctr";
|
|
altNames = [ "frigate" ];
|
|
inherit domain;
|
|
mtu = hiMTU;
|
|
ipv4 = {
|
|
address = net.cidr.host 103 prefixes.hi.v4;
|
|
mask = 22;
|
|
gateway = vips.hi.v4;
|
|
};
|
|
ipv6 = {
|
|
iid = "::5:3";
|
|
address = net.cidr.host (65536*5+3) prefixes.hi.v6;
|
|
};
|
|
};
|
|
lo = {
|
|
name = "hass-ctr-lo";
|
|
inherit domain;
|
|
mtu = 1500;
|
|
ipv4 = {
|
|
address = net.cidr.host 103 prefixes.lo.v4;
|
|
mask = 21;
|
|
gateway = null;
|
|
};
|
|
ipv6 = {
|
|
iid = "::5:3";
|
|
address = net.cidr.host (65536*5+3) prefixes.lo.v6;
|
|
};
|
|
};
|
|
};
|
|
|
|
configuration = { lib, config, pkgs, assignments, allAssignments, ... }:
|
|
let
|
|
inherit (lib) mkMerge mkIf mkForce;
|
|
inherit (lib.my) networkdAssignment;
|
|
|
|
hassPort = 8123;
|
|
hassCli = pkgs.writeShellScriptBin "hass-cli" ''
|
|
export HASS_SERVER="http://localhost:${toString hassPort}"
|
|
export HASS_TOKEN="$(< ${config.age.secrets."hass/cli-token.txt".path})"
|
|
exec ${pkgs.home-assistant-cli}/bin/hass-cli "$@"
|
|
'';
|
|
in
|
|
{
|
|
config = {
|
|
my = {
|
|
deploy.enable = false;
|
|
server.enable = true;
|
|
|
|
secrets = {
|
|
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGpYX2WbYwUqHp8bFFf0eHFrqrR8xp8IheguA054F8V4";
|
|
files = {
|
|
"hass/cli-token.txt" = {
|
|
owner = config.my.user.config.name;
|
|
};
|
|
};
|
|
};
|
|
|
|
firewall = {
|
|
tcp.allowed = [ "http" hassPort 1883 ];
|
|
};
|
|
};
|
|
|
|
environment = {
|
|
systemPackages = with pkgs; [
|
|
usbutils
|
|
hassCli
|
|
];
|
|
};
|
|
|
|
systemd = {
|
|
network.networks = {
|
|
"80-container-host0" = mkMerge [
|
|
(networkdAssignment "host0" assignments.hi)
|
|
{ networkConfig = vlanDns "hi"; }
|
|
];
|
|
"80-container-lan-lo" = networkdAssignment "lan-lo" assignments.lo;
|
|
};
|
|
};
|
|
|
|
services = {
|
|
mosquitto = {
|
|
enable = true;
|
|
listeners = [
|
|
{
|
|
omitPasswordAuth = true;
|
|
settings = {
|
|
allow_anonymous = true;
|
|
};
|
|
}
|
|
];
|
|
};
|
|
|
|
go2rtc = {
|
|
enable = true;
|
|
settings = {
|
|
streams = {
|
|
reolink_living_room = [
|
|
# "http://reolink-living-room.${domain}/flv?port=1935&app=bcs&stream=channel0_main.bcs&user=admin#video=copy#audio=copy#audio=opus"
|
|
"rtsp://admin:@reolink-living-room:554/h264Preview_01_main"
|
|
];
|
|
webcam_office = [
|
|
"ffmpeg:device?video=/dev/video0&video_size=1024x576#video=h264"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
frigate = {
|
|
enable = true;
|
|
hostname = "frigate.${domain}";
|
|
settings = {
|
|
mqtt = {
|
|
enabled = true;
|
|
host = "localhost";
|
|
topic_prefix = "frigate";
|
|
};
|
|
|
|
cameras = {
|
|
reolink_living_room = {
|
|
ffmpeg.inputs = [
|
|
{
|
|
path = "rtsp://127.0.0.1:8554/reolink_living_room";
|
|
input_args = "preset-rtsp-restream";
|
|
roles = [ "record" "detect" ];
|
|
}
|
|
];
|
|
detect = {
|
|
enabled = false;
|
|
};
|
|
record = {
|
|
enabled = true;
|
|
retain.days = 1;
|
|
};
|
|
};
|
|
|
|
webcam_office = {
|
|
ffmpeg.inputs = [
|
|
{
|
|
path = "rtsp://127.0.0.1:8554/webcam_office";
|
|
input_args = "preset-rtsp-restream";
|
|
roles = [ "record" "detect" ];
|
|
}
|
|
];
|
|
detect.enabled = false;
|
|
record = {
|
|
enabled = true;
|
|
retain.days = 1;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
home-assistant = {
|
|
enable = true;
|
|
|
|
extraComponents = [
|
|
"default_config"
|
|
"esphome"
|
|
"google_translate"
|
|
|
|
"met"
|
|
"zha"
|
|
"denonavr"
|
|
"webostv"
|
|
"androidtv_remote"
|
|
"heos"
|
|
"mqtt"
|
|
"wled"
|
|
];
|
|
extraPackages = python3Packages: with python3Packages; [
|
|
zlib-ng
|
|
isal
|
|
|
|
gtts
|
|
];
|
|
customComponents = with pkgs.home-assistant-custom-components; [
|
|
alarmo
|
|
frigate
|
|
west_wood_club
|
|
];
|
|
|
|
configWritable = false;
|
|
config = {
|
|
default_config = {};
|
|
homeassistant = {
|
|
name = "Home";
|
|
unit_system = "metric";
|
|
currency = "EUR";
|
|
country = "IE";
|
|
time_zone = "Europe/Dublin";
|
|
external_url = "https://hass.${pubDomain}";
|
|
internal_url = "http://hass-ctr.${domain}:${toString hassPort}";
|
|
};
|
|
http = {
|
|
server_port = hassPort;
|
|
use_x_forwarded_for = true;
|
|
trusted_proxies = with allAssignments.middleman.internal; [
|
|
ipv4.address
|
|
ipv6.address
|
|
];
|
|
ip_ban_enabled = false;
|
|
};
|
|
automation = "!include automations.yaml";
|
|
script = "!include scripts.yaml";
|
|
scene = "!include scenes.yaml";
|
|
|
|
sensor = [
|
|
{
|
|
platform = "irish_rail_transport";
|
|
name = "To Work from Home";
|
|
station = "Glenageary";
|
|
stops_at = "Dublin Connolly";
|
|
direction = "Northbound";
|
|
}
|
|
{
|
|
platform = "irish_rail_transport";
|
|
name = "To Home from Work";
|
|
station = "Dublin Connolly";
|
|
stops_at = "Glenageary";
|
|
direction = "Southbound";
|
|
}
|
|
];
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|