Files
nix-config/modules/nixos/homeassistant/services/esphome/default.nix
mjallen18 001b54a620 nuc
2026-03-16 17:13:12 -05:00

46 lines
1.4 KiB
Nix

{
config,
lib,
pkgs,
namespace,
...
}:
with lib;
let
cfg = config.${namespace}.services.home-assistant;
# ESPHome with littlefs-python and fatfs-ng added to PYTHONPATH so PlatformIO's
# espressif32 platform builder can import them (needed for LittleFS/FAT support).
# fatfs-ng is the correct package: it installs under the 'fatfs' namespace and
# provides create_extended_partition and ESP32 wear-leveling support required by
# pioarduino's platform builder (penv_setup.py specifies "fatfs-ng>=0.1.14").
esphomeWithLittlefs = pkgs.esphome.overridePythonAttrs (oldAttrs: {
makeWrapperArgs = (oldAttrs.makeWrapperArgs or [ ]) ++ [
"--prefix PYTHONPATH : ${pkgs.${namespace}.littlefs-python}/${pkgs.python3.sitePackages}"
"--prefix PYTHONPATH : ${pkgs.${namespace}.fatfs-ng}/${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;
};
};
};
}