43 lines
1.2 KiB
Nix
43 lines
1.2 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
namespace,
|
|
...
|
|
}:
|
|
with lib;
|
|
let
|
|
cfg = config.${namespace}.services.home-assistant;
|
|
|
|
# ESPHome with littlefs-python and pyfatfs added to PYTHONPATH so PlatformIO's
|
|
# espressif32 platform builder can import them (needed for LittleFS/FAT support).
|
|
esphomeWithLittlefs = pkgs.esphome.overridePythonAttrs (oldAttrs: {
|
|
makeWrapperArgs = (oldAttrs.makeWrapperArgs or [ ]) ++ [
|
|
"--prefix PYTHONPATH : ${pkgs.${namespace}.littlefs-python}/${pkgs.python3.sitePackages}"
|
|
"--prefix PYTHONPATH : ${pkgs.python3Packages.pyfatfs}/${pkgs.python3.sitePackages}"
|
|
];
|
|
});
|
|
in
|
|
{
|
|
config = mkIf cfg.enable {
|
|
services = {
|
|
esphome = {
|
|
enable = true;
|
|
openFirewall = true; # 6052
|
|
address = "0.0.0.0";
|
|
package = esphomeWithLittlefs;
|
|
};
|
|
};
|
|
|
|
# Add uv to the ESPHome service PATH so PlatformIO uses the Nix-provided
|
|
# binary instead of downloading its own (which would fail due to permissions).
|
|
# Also disable MemoryDenyWriteExecute so uv (a native Rust binary) can run.
|
|
systemd.services.esphome = {
|
|
path = [ pkgs.uv ];
|
|
serviceConfig = {
|
|
MemoryDenyWriteExecute = lib.mkForce false;
|
|
};
|
|
};
|
|
};
|
|
}
|