forked from jan-leila/nix-config
		
	fixed home assistant
This commit is contained in:
		
							parent
							
								
									1d7e0d11f0
								
							
						
					
					
						commit
						3ce9b625d1
					
				
					 6 changed files with 122 additions and 268 deletions
				
			
		|  | @ -1,130 +1,138 @@ | |||
| { | ||||
|   lib, | ||||
|   config, | ||||
|   inputs, | ||||
|   ... | ||||
| }: let | ||||
|   configDir = "/var/lib/hass"; | ||||
|   dbUser = "hass"; | ||||
| in { | ||||
|   options.host.home-assistant = { | ||||
|     enable = lib.mkEnableOption "should home-assistant be enabled on this computer"; | ||||
|   options.services.home-assistant = { | ||||
|     subdomain = lib.mkOption { | ||||
|       type = lib.types.str; | ||||
|       description = "subdomain of base domain that home-assistant will be hosted at"; | ||||
|       default = "home-assistant"; | ||||
|     }; | ||||
| 
 | ||||
|     database = lib.mkOption { | ||||
|       type = lib.types.enum [ | ||||
|         "builtin" | ||||
|         "postgres" | ||||
|       ]; | ||||
|       description = "what database do we want to use"; | ||||
|       default = "builtin"; | ||||
|     }; | ||||
|   }; | ||||
| 
 | ||||
|   config = lib.mkIf config.host.home-assistant.enable (lib.mkMerge [ | ||||
|   config = lib.mkIf config.services.home-assistant.enable (lib.mkMerge [ | ||||
|     { | ||||
|       virtualisation.libvirt = { | ||||
|         swtpm.enable = true; | ||||
|         connections."qemu:///session" = { | ||||
|           networks = [ | ||||
|             { | ||||
|               definition = inputs.nix-virt.lib.network.writeXML (inputs.nix-virt.lib.network.templates.bridge | ||||
|                 { | ||||
|                   uuid = "d57e37e2-311f-4e5c-a484-97c2210c2770"; | ||||
|                   subnet_byte = 71; | ||||
|                 }); | ||||
|               active = true; | ||||
|             } | ||||
|           ]; | ||||
|           domains = [ | ||||
|             { | ||||
|               definition = inputs.nix-virt.lib.domain.writeXML (inputs.nix-virt.lib.domain.templates.linux | ||||
|                 { | ||||
|                   name = "Home Assistant"; | ||||
|                   uuid = "c5cc0efc-6101-4c1d-be31-acbba203ccde"; | ||||
|                   memory = { | ||||
|                     count = 4; | ||||
|                     unit = "GiB"; | ||||
|                   }; | ||||
|                   # storage_vol = { | ||||
|                   #   pool = "MyPool"; | ||||
|                   #   volume = "Penguin.qcow2"; | ||||
|                   # }; | ||||
|                 }); | ||||
|             } | ||||
|           ]; | ||||
|       host = { | ||||
|         reverse_proxy.subdomains.${config.services.home-assistant.subdomain} = { | ||||
|           target = "http://localhost:${toString config.services.home-assistant.config.http.server_port}"; | ||||
| 
 | ||||
|           websockets.enable = true; | ||||
|           forwardHeaders.enable = true; | ||||
| 
 | ||||
|           extraConfig = '' | ||||
|             add_header Upgrade $http_upgrade; | ||||
|             add_header Connection \"upgrade\"; | ||||
| 
 | ||||
|             proxy_buffering off; | ||||
| 
 | ||||
|             proxy_read_timeout 90; | ||||
|           ''; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       # systemd.tmpfiles.rules = [ | ||||
|       #   "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass" | ||||
|       # ]; | ||||
|       # services.home-assistant = { | ||||
|       #   enable = true; | ||||
|       #   configDir = configDir; | ||||
|       #   extraComponents = [ | ||||
|       #     "met" | ||||
|       #     "radio_browser" | ||||
|       #     "isal" | ||||
|       #     "zha" | ||||
|       #     "jellyfin" | ||||
|       #     "webostv" | ||||
|       #     "tailscale" | ||||
|       #     "syncthing" | ||||
|       #     "sonos" | ||||
|       #     "analytics_insights" | ||||
|       #     "unifi" | ||||
|       #     "openweathermap" | ||||
|       #   ]; | ||||
|       #   config = { | ||||
|       #     http = { | ||||
|       #       server_port = 8082; | ||||
|       #       use_x_forwarded_for = true; | ||||
|       #       trusted_proxies = ["127.0.0.1" "::1"]; | ||||
|       #       ip_ban_enabled = true; | ||||
|       #       login_attempts_threshold = 10; | ||||
|       #     }; | ||||
|       #     # recorder.db_url = "postgresql://@/${db_user}"; | ||||
|       #     "automation manual" = []; | ||||
|       #     "automation ui" = "!include automations.yaml"; | ||||
|       #   }; | ||||
|       #   extraPackages = python3Packages: | ||||
|       #     with python3Packages; [ | ||||
|       #       hassil | ||||
|       #       numpy | ||||
|       #       gtts | ||||
|       #     ]; | ||||
|       # }; | ||||
|       # host = { | ||||
|       #   reverse_proxy.subdomains.${config.host.home-assistant.subdomain} = { | ||||
|       #     target = "http://localhost:${toString config.services.home-assistant.config.http.server_port}"; | ||||
|       services.home-assistant = { | ||||
|         configDir = configDir; | ||||
|         extraComponents = [ | ||||
|           "met" | ||||
|           "radio_browser" | ||||
|           "isal" | ||||
|           "zha" | ||||
|           "jellyfin" | ||||
|           "webostv" | ||||
|           "tailscale" | ||||
|           "syncthing" | ||||
|           "sonos" | ||||
|           "analytics_insights" | ||||
|           "unifi" | ||||
|           "openweathermap" | ||||
|           "ollama" | ||||
|         ]; | ||||
|         config = { | ||||
|           http = { | ||||
|             server_port = 8123; | ||||
|             use_x_forwarded_for = true; | ||||
|             trusted_proxies = ["127.0.0.1" "::1"]; | ||||
|             ip_ban_enabled = true; | ||||
|             login_attempts_threshold = 10; | ||||
|           }; | ||||
|           recorder.db_url = "postgresql://@/${dbUser}"; | ||||
|           "automation manual" = []; | ||||
|           "automation ui" = "!include automations.yaml"; | ||||
|         }; | ||||
|         extraPackages = python3Packages: | ||||
|           with python3Packages; [ | ||||
|             hassil | ||||
|             numpy | ||||
|             gtts | ||||
|           ]; | ||||
|       }; | ||||
| 
 | ||||
|       #     websockets.enable = true; | ||||
|       #     forwardHeaders.enable = true; | ||||
| 
 | ||||
|       #     extraConfig = '' | ||||
|       #       add_header Upgrade $http_upgrade; | ||||
|       #       add_header Connection \"upgrade\"; | ||||
| 
 | ||||
|       #       proxy_buffering off; | ||||
| 
 | ||||
|       #       proxy_read_timeout 90; | ||||
|       #     ''; | ||||
|       #   }; | ||||
|       # }; | ||||
|       systemd.tmpfiles.rules = [ | ||||
|         "f ${config.services.home-assistant.configDir}/automations.yaml 0755 hass hass" | ||||
|       ]; | ||||
|     } | ||||
|     (lib.mkIf (config.services.home-assistant.database == "postgres") { | ||||
|       host = { | ||||
|         postgres = { | ||||
|           enable = true; | ||||
|           extraUsers = { | ||||
|             ${dbUser} = { | ||||
|               isClient = true; | ||||
|               createUser = true; | ||||
|             }; | ||||
|           }; | ||||
|           extraDatabases = { | ||||
|             ${dbUser} = { | ||||
|               name = dbUser; | ||||
|             }; | ||||
|           }; | ||||
|         }; | ||||
|       }; | ||||
| 
 | ||||
|       services.home-assistant = { | ||||
|         extraPackages = python3Packages: | ||||
|           with python3Packages; [ | ||||
|             psycopg2 | ||||
|           ]; | ||||
|       }; | ||||
| 
 | ||||
|       systemd.services.home-assistant = { | ||||
|         requires = [ | ||||
|           config.systemd.services.postgresql.name | ||||
|         ]; | ||||
|       }; | ||||
|     }) | ||||
|     (lib.mkIf config.host.impermanence.enable { | ||||
|       # assertions = [ | ||||
|       #   { | ||||
|       #     assertion = config.services.home-assistant.configDir == configDir; | ||||
|       #     message = "home assistant config directory does not match persistence"; | ||||
|       #   } | ||||
|       # ]; | ||||
|       # environment.persistence."/persist/system/root" = { | ||||
|       #   enable = true; | ||||
|       #   hideMounts = true; | ||||
|       #   directories = [ | ||||
|       #     { | ||||
|       #       directory = configDir; | ||||
|       #       user = "hass"; | ||||
|       #       group = "hass"; | ||||
|       #     } | ||||
|       #   ]; | ||||
|       # }; | ||||
|       assertions = [ | ||||
|         { | ||||
|           assertion = config.services.home-assistant.configDir == configDir; | ||||
|           message = "home assistant config directory does not match persistence"; | ||||
|         } | ||||
|       ]; | ||||
|       environment.persistence."/persist/system/root" = { | ||||
|         enable = true; | ||||
|         hideMounts = true; | ||||
|         directories = [ | ||||
|           { | ||||
|             directory = configDir; | ||||
|             user = "hass"; | ||||
|             group = "hass"; | ||||
|           } | ||||
|         ]; | ||||
|       }; | ||||
|     }) | ||||
|   ]); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue