Compare commits
2 commits
b2256f2459
...
73ff7e3239
Author | SHA1 | Date | |
---|---|---|---|
Patrick | 73ff7e3239 | ||
Patrick | e3229aee41 |
|
@ -3,10 +3,15 @@
|
||||||
globals,
|
globals,
|
||||||
nodes,
|
nodes,
|
||||||
lib,
|
lib,
|
||||||
|
pkgs,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
environment.persistence."/persist".directories = [
|
environment.persistence."/persist".directories = [
|
||||||
|
{
|
||||||
|
directory = "/var/lib/private/esphome";
|
||||||
|
mode = "0700";
|
||||||
|
}
|
||||||
{
|
{
|
||||||
directory = config.services.home-assistant.configDir;
|
directory = config.services.home-assistant.configDir;
|
||||||
user = "hass";
|
user = "hass";
|
||||||
|
@ -14,9 +19,21 @@
|
||||||
mode = "0700";
|
mode = "0700";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
services.esphome = {
|
||||||
|
enable = true;
|
||||||
|
address = "0.0.0.0";
|
||||||
|
port = 3001;
|
||||||
|
#allowedDevices = lib.mkForce ["/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0"];
|
||||||
|
# TODO instead deny the zigbee device
|
||||||
|
};
|
||||||
|
|
||||||
wireguard.services = {
|
wireguard.services = {
|
||||||
client.via = "nucnix";
|
client.via = "nucnix";
|
||||||
firewallRuleForNode.nucnix-nginx.allowedTCPPorts = [ 3000 ];
|
firewallRuleForNode.${globals.services.nginx.host}.allowedTCPPorts = [
|
||||||
|
3000
|
||||||
|
3001
|
||||||
|
];
|
||||||
};
|
};
|
||||||
services.home-assistant = {
|
services.home-assistant = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
@ -32,6 +49,12 @@
|
||||||
"esphome"
|
"esphome"
|
||||||
#"zha"
|
#"zha"
|
||||||
"mqtt"
|
"mqtt"
|
||||||
|
"ollama"
|
||||||
|
"solaredge"
|
||||||
|
];
|
||||||
|
customComponents = with pkgs.home-assistant-custom-components; [
|
||||||
|
homematicip_local
|
||||||
|
pkgs.havartastorage
|
||||||
];
|
];
|
||||||
config = {
|
config = {
|
||||||
http = {
|
http = {
|
||||||
|
@ -80,15 +103,23 @@
|
||||||
gtts
|
gtts
|
||||||
fritzconnection
|
fritzconnection
|
||||||
adguardhome
|
adguardhome
|
||||||
|
aiosolaredge
|
||||||
|
zlib-ng
|
||||||
|
stringcase
|
||||||
|
hahomematic
|
||||||
|
pymodbus
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
networking.hosts = {
|
networking.hosts = {
|
||||||
"${nodes.${globals.services.adguardhome.host}.config.wireguard.services.ipv4}" = [
|
"${nodes.${globals.services.adguardhome.host}.config.wireguard.services.ipv4}" = [
|
||||||
"adguardhome.internal"
|
"adguardhome.internal"
|
||||||
];
|
];
|
||||||
|
"${nodes.${globals.services.ollama.host}.config.wireguard.services.ipv4}" = [
|
||||||
|
"ollama.internal"
|
||||||
|
];
|
||||||
};
|
};
|
||||||
age.secrets."home-assistant-secrets.yaml" = {
|
age.secrets."home-assistant-secrets.yaml" = {
|
||||||
rekeyFile = "${config.node.secretsDir}/secrets.yaml.age";
|
rekeyFile = config.node.secretsDir + "/secrets.yaml.age";
|
||||||
owner = "hass";
|
owner = "hass";
|
||||||
};
|
};
|
||||||
systemd.services.home-assistant = {
|
systemd.services.home-assistant = {
|
||||||
|
|
|
@ -148,6 +148,7 @@
|
||||||
groups."adguardhome.access" = { };
|
groups."adguardhome.access" = { };
|
||||||
groups."octoprint.access" = { };
|
groups."octoprint.access" = { };
|
||||||
groups."invidious.access" = { };
|
groups."invidious.access" = { };
|
||||||
|
groups."esphome.access" = { };
|
||||||
|
|
||||||
systems.oauth2.oauth2-proxy = {
|
systems.oauth2.oauth2-proxy = {
|
||||||
displayName = "Oauth2-Proxy";
|
displayName = "Oauth2-Proxy";
|
||||||
|
@ -184,6 +185,11 @@
|
||||||
"email"
|
"email"
|
||||||
"profile"
|
"profile"
|
||||||
];
|
];
|
||||||
|
scopeMaps."esphome.access" = [
|
||||||
|
"openid"
|
||||||
|
"email"
|
||||||
|
"profile"
|
||||||
|
];
|
||||||
preferShortUsername = true;
|
preferShortUsername = true;
|
||||||
claimMaps.groups = {
|
claimMaps.groups = {
|
||||||
joinType = "array";
|
joinType = "array";
|
||||||
|
@ -193,6 +199,7 @@
|
||||||
valuesByGroup."ollama.access" = [ "ollama_access" ];
|
valuesByGroup."ollama.access" = [ "ollama_access" ];
|
||||||
valuesByGroup."octoprint.access" = [ "octoprint_access" ];
|
valuesByGroup."octoprint.access" = [ "octoprint_access" ];
|
||||||
valuesByGroup."invidious.access" = [ "invidious_access" ];
|
valuesByGroup."invidious.access" = [ "invidious_access" ];
|
||||||
|
valuesByGroup."esphome.access" = [ "esphome_access" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@ in
|
||||||
recommendedSetup = true;
|
recommendedSetup = true;
|
||||||
virtualHosts."${globals.services.netbird.domain}".useACMEHost = "web";
|
virtualHosts."${globals.services.netbird.domain}".useACMEHost = "web";
|
||||||
upstreams.fritz = {
|
upstreams.fritz = {
|
||||||
servers."${lib.net.cidr.host 1 "10.99.2.0/24"}" = { };
|
servers."${lib.net.cidr.host 1 "10.99.2.0/24"}:443" = { };
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
zone fritz 64k ;
|
zone fritz 64k ;
|
||||||
keepalive 5 ;
|
keepalive 5 ;
|
||||||
|
@ -159,6 +159,7 @@ in
|
||||||
(blockOf "homebox" { })
|
(blockOf "homebox" { })
|
||||||
(blockOf "homeassistant" { })
|
(blockOf "homeassistant" { })
|
||||||
(proxyProtect "ollama" { })
|
(proxyProtect "ollama" { })
|
||||||
|
(proxyProtect "esphome" { port = 3001; })
|
||||||
(proxyProtect "firefly" { port = 80; })
|
(proxyProtect "firefly" { port = 80; })
|
||||||
(blockOf "apispotify" {
|
(blockOf "apispotify" {
|
||||||
port = 3000;
|
port = 3000;
|
||||||
|
|
|
@ -1,11 +1,16 @@
|
||||||
{ config, ... }:
|
{ config, globals, ... }:
|
||||||
{
|
{
|
||||||
wireguard.services = {
|
wireguard.services = {
|
||||||
client.via = "nucnix";
|
client.via = "nucnix";
|
||||||
firewallRuleForNode.nucnix-nginx.allowedTCPPorts = [ config.services.open-webui.port ];
|
firewallRuleForNode.${globals.services.nginx.host}.allowedTCPPorts = [
|
||||||
|
config.services.open-webui.port
|
||||||
|
];
|
||||||
|
firewallRuleForNode.${globals.services.homeassistant.host}.allowedTCPPorts = [
|
||||||
|
config.services.ollama.port
|
||||||
|
];
|
||||||
};
|
};
|
||||||
services.ollama = {
|
services.ollama = {
|
||||||
host = "localhost";
|
host = "0.0.0.0";
|
||||||
port = 3001;
|
port = 3001;
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
@ -34,6 +39,8 @@
|
||||||
directory = "/var/lib/private/open-webui";
|
directory = "/var/lib/private/open-webui";
|
||||||
mode = "0700";
|
mode = "0700";
|
||||||
}
|
}
|
||||||
|
];
|
||||||
|
environment.persistence."/renaultft".directories = [
|
||||||
{
|
{
|
||||||
directory = "/var/lib/private/ollama";
|
directory = "/var/lib/private/ollama";
|
||||||
mode = "0700";
|
mode = "0700";
|
||||||
|
|
|
@ -33,6 +33,7 @@ in
|
||||||
id = 30;
|
id = 30;
|
||||||
cidrv4 = "10.99.${toString id}.0/24";
|
cidrv4 = "10.99.${toString id}.0/24";
|
||||||
cidrv6 = "fd${toString id}::/64";
|
cidrv6 = "fd${toString id}::/64";
|
||||||
|
dns = false;
|
||||||
};
|
};
|
||||||
iot = rec {
|
iot = rec {
|
||||||
id = 40;
|
id = 40;
|
||||||
|
@ -151,6 +152,10 @@ in
|
||||||
domain = "hs.${globals.domains.web}";
|
domain = "hs.${globals.domains.web}";
|
||||||
host = "elisabeth-homeassistant";
|
host = "elisabeth-homeassistant";
|
||||||
};
|
};
|
||||||
|
esphome = {
|
||||||
|
domain = "esp.${globals.domains.web}";
|
||||||
|
host = "elisabeth-homeassistant";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,7 +115,9 @@
|
||||||
// mkContainer "oauth2-proxy" { }
|
// mkContainer "oauth2-proxy" { }
|
||||||
// mkContainer "vaultwarden" { }
|
// mkContainer "vaultwarden" { }
|
||||||
// mkContainer "ddclient" { }
|
// mkContainer "ddclient" { }
|
||||||
// mkContainer "ollama" { }
|
// mkContainer "ollama" {
|
||||||
|
enableRenaultFT = true;
|
||||||
|
}
|
||||||
// mkContainer "murmur" { }
|
// mkContainer "murmur" { }
|
||||||
// mkContainer "homebox" { }
|
// mkContainer "homebox" { }
|
||||||
// mkContainer "invidious" { }
|
// mkContainer "invidious" { }
|
||||||
|
|
Binary file not shown.
|
@ -39,24 +39,23 @@ in
|
||||||
id,
|
id,
|
||||||
cidrv4,
|
cidrv4,
|
||||||
internet,
|
internet,
|
||||||
|
dns,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
rec {
|
rec {
|
||||||
inherit id;
|
inherit id;
|
||||||
interface = "lan-${name}";
|
interface = "lan-${name}";
|
||||||
subnet = "10.99.${toString id}.0/24";
|
subnet = cidrv4;
|
||||||
pools = [
|
pools = [
|
||||||
{
|
{
|
||||||
pool = "${net.cidr.host 50 subnet} - ${net.cidr.host (-6) subnet}";
|
pool = "${net.cidr.host 50 subnet} - ${net.cidr.host (-6) subnet}";
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
option-data =
|
option-data =
|
||||||
[
|
lib.optional dns {
|
||||||
{
|
|
||||||
name = "domain-name-servers";
|
name = "domain-name-servers";
|
||||||
data = "${net.cidr.host globals.services.adguardhome.ip globals.net.vlans.services.cidrv4}";
|
data = "${net.cidr.host globals.services.adguardhome.ip globals.net.vlans.services.cidrv4}";
|
||||||
}
|
}
|
||||||
]
|
|
||||||
++ lib.optional internet {
|
++ lib.optional internet {
|
||||||
name = "routers";
|
name = "routers";
|
||||||
data = "${net.cidr.host 1 subnet}";
|
data = "${net.cidr.host 1 subnet}";
|
||||||
|
@ -77,6 +76,11 @@ in
|
||||||
hw-address = "48:9e:bd:5c:31:ac";
|
hw-address = "48:9e:bd:5c:31:ac";
|
||||||
ip-address = net.cidr.host 32 subnet;
|
ip-address = net.cidr.host 32 subnet;
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
# varta
|
||||||
|
hw-address = "00:0c:c6:06:7a:70";
|
||||||
|
ip-address = net.cidr.host 20 subnet;
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
|
@ -114,6 +114,11 @@ in
|
||||||
default = true;
|
default = true;
|
||||||
description = "Whether this vlan is connected to the internet";
|
description = "Whether this vlan is connected to the internet";
|
||||||
};
|
};
|
||||||
|
dns = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = vlanNetSubmod.config.internet;
|
||||||
|
description = "Whether this vlan should utilize the internal dns server";
|
||||||
|
};
|
||||||
|
|
||||||
name = mkOption {
|
name = mkOption {
|
||||||
description = "The name of this VLAN";
|
description = "The name of this VLAN";
|
||||||
|
|
|
@ -9,6 +9,7 @@ _inputs: [
|
||||||
mongodb-bin = prev.callPackage ./mongodb-bin.nix { };
|
mongodb-bin = prev.callPackage ./mongodb-bin.nix { };
|
||||||
disneyplus = prev.callPackage ./disney.nix { };
|
disneyplus = prev.callPackage ./disney.nix { };
|
||||||
awakened-poe-trade = prev.callPackage ./awakened-poe-trade.nix { };
|
awakened-poe-trade = prev.callPackage ./awakened-poe-trade.nix { };
|
||||||
|
havartastorage = prev.callPackage ./havartastorage.nix { };
|
||||||
neovim-clean = prev.neovim-unwrapped.overrideAttrs (
|
neovim-clean = prev.neovim-unwrapped.overrideAttrs (
|
||||||
_neovimFinal: neovimPrev: {
|
_neovimFinal: neovimPrev: {
|
||||||
nativeBuildInputs = (neovimPrev.nativeBuildInputs or [ ]) ++ [ prev.makeWrapper ];
|
nativeBuildInputs = (neovimPrev.nativeBuildInputs or [ ]) ++ [ prev.makeWrapper ];
|
||||||
|
@ -19,6 +20,11 @@ _inputs: [
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
pythonPackagesExtensions = prev.pythonPackagesExtensions ++ [
|
||||||
|
(_pythonFinal: _pythonPrev: {
|
||||||
|
vartastorage = prev.callPackage ./pyvartastorage.nix { };
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
path-of-building = prev.path-of-building.overrideAttrs (old: {
|
path-of-building = prev.path-of-building.overrideAttrs (old: {
|
||||||
postFixup =
|
postFixup =
|
||||||
|
|
30
pkgs/havartastorage.nix
Normal file
30
pkgs/havartastorage.nix
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
fetchFromGitHub,
|
||||||
|
buildHomeAssistantComponent,
|
||||||
|
python3Packages,
|
||||||
|
}:
|
||||||
|
|
||||||
|
buildHomeAssistantComponent rec {
|
||||||
|
owner = "Vip0r";
|
||||||
|
domain = "varta_storage";
|
||||||
|
version = "2025-1-9-unstable";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
inherit owner;
|
||||||
|
repo = "varta_storage";
|
||||||
|
rev = "592cfd8692b24b131cadaa8c6280660fdc262886";
|
||||||
|
hash = "sha256-u5VneR7s3V+NjoTnDYPAO2aJeqpDQwPu5Eko5CZQXTw=";
|
||||||
|
};
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
python3Packages.vartastorage
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Send notifications with ntfy.sh and selfhosted ntfy-servers";
|
||||||
|
homepage = "https://github.com/hbrennhaeuser/homeassistant_integration_ntfy";
|
||||||
|
maintainers = with maintainers; [ koral ];
|
||||||
|
license = licenses.gpl3;
|
||||||
|
};
|
||||||
|
}
|
40
pkgs/pyvartastorage.nix
Normal file
40
pkgs/pyvartastorage.nix
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
python3Packages,
|
||||||
|
fetchFromGitHub,
|
||||||
|
}:
|
||||||
|
|
||||||
|
python3Packages.buildPythonPackage rec {
|
||||||
|
pname = "vartastorage";
|
||||||
|
version = "2025.1.9";
|
||||||
|
|
||||||
|
disabled = python3Packages.pythonOlder "3.12";
|
||||||
|
|
||||||
|
src = fetchFromGitHub {
|
||||||
|
owner = "Vip0r";
|
||||||
|
repo = "vartastorage";
|
||||||
|
rev = "5e24b25dbafeabceefd513001f3b8b6a598463a1";
|
||||||
|
hash = "sha256-8eZOTQUbv7ing05aIYYJcP3zfLc91plC7QNqM7a3ZZQ=";
|
||||||
|
};
|
||||||
|
|
||||||
|
__darwinAllowLocalNetworking = true;
|
||||||
|
|
||||||
|
build-system = [ ];
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
];
|
||||||
|
|
||||||
|
nativeCheckInputs = [
|
||||||
|
];
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
description = "Python module to interact with HomeMatic devices";
|
||||||
|
homepage = "https://github.com/SukramJ/hahomematic";
|
||||||
|
changelog = "https://github.com/SukramJ/hahomematic/blob/${src.tag}/changelog.md";
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = with maintainers; [
|
||||||
|
dotlambda
|
||||||
|
fab
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue