97 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| { config, lib, ... }:
 | |
| 
 | |
| with lib;
 | |
| 
 | |
| let
 | |
|   cfg = homelab.services.${service};
 | |
|   homelab = config.homelab;
 | |
|   service = "home-assistant";
 | |
| in
 | |
| {
 | |
|   options.homelab.services.${service} = {
 | |
|     enable = mkEnableOption "Enable ${service}";
 | |
| 
 | |
|     url = mkOption {
 | |
|       default = "home.${homelab.domain}";
 | |
|       type = types.str;
 | |
|     };
 | |
| 
 | |
|     homepage.name = mkOption {
 | |
|       default = "Home Assisant";
 | |
|       type = types.str;
 | |
|     };
 | |
| 
 | |
|     homepage.description = mkOption {
 | |
|       default = "Open source home automation that puts local control and privacy first.";
 | |
|       type = types.str;
 | |
|     };
 | |
| 
 | |
|     homepage.icon = mkOption {
 | |
|       default = "home-assistant";
 | |
|       type = types.str;
 | |
|     };
 | |
| 
 | |
|     homepage.category = mkOption {
 | |
|       default = "Services";
 | |
|       type = types.str;
 | |
|     };
 | |
|   };
 | |
| 
 | |
|   config = mkIf cfg.enable {
 | |
|     services = {
 | |
|       home-assistant = {
 | |
|         enable = true;
 | |
| 
 | |
|         config = {
 | |
|           external_url = "https://home.${homelab.domain}";
 | |
|           name = "Home";
 | |
|           time_zone = "Europe/London";
 | |
|           unit_system = "metric";
 | |
| 
 | |
|           http = {
 | |
|             trusted_proxies = [
 | |
|               "127.0.0.1"
 | |
|               "::1"
 | |
|             ];
 | |
|             use_x_forwarded_for = true;
 | |
|           };
 | |
| 
 | |
|           mobile_app = { };
 | |
|           # sia = { };
 | |
|         };
 | |
| 
 | |
|         extraComponents = [
 | |
|           "default_config"
 | |
|           "elgato"
 | |
|           "hive"
 | |
|           "met"
 | |
|           "mobile_app"
 | |
|           # "sia"
 | |
|           "tplink"
 | |
|           "tplink_tapo"
 | |
|           "weather"
 | |
|           "webostv"
 | |
|           "wiz"
 | |
|         ];
 | |
| 
 | |
|         extraPackages =
 | |
|           python3Packages: with python3Packages; [
 | |
|             setuptools
 | |
|           ];
 | |
| 
 | |
|         openFirewall = true;
 | |
|       };
 | |
| 
 | |
|       nginx.virtualHosts."${cfg.url}" = {
 | |
|         forceSSL = true;
 | |
|         useACMEHost = homelab.domain;
 | |
| 
 | |
|         locations."/" = {
 | |
|           proxyPass = "http://localhost:${toString config.services.${service}.config.http.server_port}";
 | |
|           proxyWebsockets = true;
 | |
|           recommendedProxySettings = true;
 | |
|         };
 | |
|       };
 | |
|     };
 | |
|   };
 | |
| }
 |