{"id":25735961,"url":"https://github.com/small-hack/home-assistant-chart","last_synced_at":"2026-01-18T16:05:46.734Z","repository":{"id":222497287,"uuid":"757453485","full_name":"small-hack/home-assistant-chart","owner":"small-hack","description":"Helm chart for Home Assistant on Kubernetes, kept up to date by RenovateBot.","archived":false,"fork":false,"pushed_at":"2025-11-03T03:53:43.000Z","size":379,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-03T05:28:03.069Z","etag":null,"topics":["helm","home-assistant","home-assistant-config"],"latest_commit_sha":null,"homepage":"https://small-hack.github.io/home-assistant-chart/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/small-hack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["jessebot"]}},"created_at":"2024-02-14T14:27:27.000Z","updated_at":"2025-11-03T03:53:42.000Z","dependencies_parsed_at":"2024-04-08T20:42:21.918Z","dependency_job_id":"4446e099-2864-4857-bd02-46fcbbd4cea3","html_url":"https://github.com/small-hack/home-assistant-chart","commit_stats":null,"previous_names":["jessebot/home-assistant-helm","small-hack/home-assistant-chart"],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/small-hack/home-assistant-chart","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/small-hack%2Fhome-assistant-chart","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/small-hack%2Fhome-assistant-chart/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/small-hack%2Fhome-assistant-chart/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/small-hack%2Fhome-assistant-chart/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/small-hack","download_url":"https://codeload.github.com/small-hack/home-assistant-chart/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/small-hack%2Fhome-assistant-chart/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28541068,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T14:59:57.589Z","status":"ssl_error","status_checked_at":"2026-01-18T14:59:46.540Z","response_time":98,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["helm","home-assistant","home-assistant-config"],"created_at":"2025-02-26T05:34:32.792Z","updated_at":"2026-01-18T16:05:46.716Z","avatar_url":"https://github.com/small-hack.png","language":"Python","funding_links":["https://github.com/sponsors/jessebot"],"categories":[],"sub_categories":[],"readme":"# Home Assistant helm chart\n\u003ca href=\"https://github.com/small-hack/home-assistant-chart/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/small-hack/home-assistant-chart?style=plastic\u0026labelColor=blue\u0026color=green\u0026logo=GitHub\u0026logoColor=white\"\u003e\u003c/a\u003e\u003cbr /\u003e\nWho doesn't need more home assistant helm charts? This is a home assistant chart with some quality of life features.\n\n#### Features\n\n- values are documented [here](https://github.com/small-hack/home-assistant-chart/tree/main/charts/home-assistant#values) using [helm-docs](https://github.com/norwoodj/helm-docs)\n- Put a default `configuration.yaml`, `themes.yaml`, `automations.yaml`, and `scenes.yaml` in a place of your choosing with either:\n  - your own ConfigMap\n  - specifying an in-line yaml string for us to render as a ConfigMap for you\n- 🆕 Create an initial \"owner\" admin user (disables the registration page)\n  - supports existing k8s Secret for credentials\n- 🆕 post install job to setup [hacs](https://hacs.xyz/)\n- Kept up to date by RenovateBot\n\n## TLDR\n\n```bash\n# add the chart repo to your helm repos\nhelm repo add home-assistant https://small-hack.github.io/home-assistant-chart\n\n# download the values.yaml and edit it with your own values such as YOUR hostname\nhelm show values home-assistant/home-assistant \u003e values.yaml\n\n# install the chart\nhelm install --namespace home-assistant --create-namespace home-assistant/home-assistant --values values.yaml\n```\n\n* [Tips](#tips)\n  * [Creating an initial owner user](#creating-an-initial-owner-user)\n    * [User creation using an existing secret](#user-creation-using-an-existing-secret)\n    * [Troubleshooting User creation](#troubleshooting-user-creation)\n  * [Setup hacs](#setup-hacs)\n  * [Unit system, Temp Unit, and Time Zone](#unit-system-temp-unit-and-time-zone)\n  * [Making Ingress Nginx work for public domains](#making-ingress-nginx-work-for-public-domains)\n  * [Using an existing ConfigMap for configuration.yaml](#using-an-existing-configmap-for-configurationyaml)\n  * [USB Devices](#usb-devices)\n    * [Values.yaml](#valuesyaml)\n  * [Bluetooth devices](#bluetooth-devices)\n  * [Mobile config](#mobile-config)\n* [Status](#status)\n\n## Tips\n\n### Creating an initial owner user\n\nCreating a user using plain text values. This would be your values:\n\n```yaml\nhomeAssistant:\n  owner:\n    # -- whether to create an initial owner user to disable registration\n    create: true\n    # -- enable debug mode for the user creation job. WARNING: This reveals secret data\n    debug: false\n    # -- name of the owner user, ignored if owner.existingSecret is set\n    name: \"admin\"\n    # -- login username of the owner user, ignored if owner.existingSecret is set\n    username: \"admin\"\n    # -- login password of the owner user, ignored if owner.existingSecret is set\n    password: \"\"\n    # -- language of the owner user, ignored if owner.existingSecret is set\n    language: \"en\"\n    # -- if your home assistant is using ingress, this is the external url you connect to\n    # NOTE: if using ingress, this should be the same hostname you specified for that\n    # if using an internal IP for connecting, please use your IP for the url, like https://192.168.42.42/\n    externalURL: \"https://home-assistant.cooldogsonline.net/\"\n```\n\nNOTE: for user creation to work successfully, you need to have a configuration.yaml file in place with all the basic info filled out. For more basic config defaults, see: [home-assistant.io/docs/configuration/basic](https://www.home-assistant.io/docs/configuration/basic/)\n\n#### User creation using an existing secret\n\nThis would be your values:\n\n```yaml\nhomeAssistant:\n  owner:\n    create: true\n    existingSecret: \"home-assistant-owner\"\n```\n\nThis would be an example secret containing the important environment variables:\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: home-assistant-owner\n  # this should be the namespace you deploy this helm chart into\n  namespace: home-assistant\ntype: Opaque\ndata:\n  ADMIN_LANGUAGE: ZW4=\n  ADMIN_NAME: YWRtaW4=\n  ADMIN_PASSWORD: YWRtaW4=\n  ADMIN_USERNAME: YWRtaW4=\n  EXTERNAL_URL: aHR0cHM6Ly9oYS5leGFtcGxlLmNvbS8=\n```\n\n#### Troubleshooting User creation\n\nSometimes, the user creation job is buggy, as it is a hack anyway, so we take a DEBUG variable to output everything we get back from every command. If something has gone wrong, try deleting the helm release and then re-install with the following values:\n\n```yaml\nhomeAssistant:\n  owner:\n    create: true\n    # -- enable debug mode for the user creation job. WARNING: This reveals secret data\n    debug: true\n```\n\n⚠️ WARNING: Enabling the debug variable for the user creation job will print sensitive data including authorization codes and bearer tokens!\n\n### Setup hacs\n\nWe provide a post install hook job to setup [hacs](https://hacs.xyz/) for you. You can enable it like this:\n\n```yaml\n# persistence MUST be enabled to do this\npersistence:\n  # set to your preferred storageClass, this examples sets\n  # storageClass to local-path which is default on k3s\n  storageClass: \"local-path\"\n  enabled: true\n\nhomeAssistant:\n  setupHacsJobs:\n    enabled: true\n```\n\n### Unit system, Temp Unit, and Time Zone\n\n```yaml\nhomeAssistant:\n  configuration: |\n    homeassistant:\n      time_zone: Europe/Amsterdam\n      temperature_unit: C\n      unit_system: metric\n```\n\nFor more basic config defaults, see: [home-assistant.io/docs/configuration/basic](https://www.home-assistant.io/docs/configuration/basic/)\n\n### Making Ingress Nginx work for public domains\n\nI had to add the IP range of the k8s cluster to my trusted proxies in my home assistant `configuration.yaml` (also since this was public, I needed to declare an `external_url`).\nThis is what I added to my `values.yaml` to do that through this chart:\n\n```yaml\nhomeAssistant:\n  configuration: |\n    # this sets your extenral url\n    homeassistant:\n      external_url: 'https://iot.examplesforgooddogs.com'\n\n    # this enables proxies such as the ingress nginx controller\n    http:\n      use_x_forwarded_for: true\n      trusted_proxies:\n        - 10.0.0.0/8\n```\n\n\n### Using an existing ConfigMap for configuration.yaml\n\nFor the ConfigMap, make sure your ConfigMap has a key called `configuration.yaml` with in-line yaml data like this:\n\n```yaml\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: my-home-assistant-configmap\n  namespace: home-assistant\ndata:\n  configuration.yaml: |\n    http:\n      trusted_proxies:\n      - 10.0.0.0/8\n      use_x_forwarded_for: true\n```\n\nThen, you'd specify the name of your ConfigMap in your `values.yaml` like this:\n\n```yaml\nhomeAssistant:\n  existingConfigMap: \"my-home-assistant-configmap\"\n```\n\n\n### USB Devices\n\nIf you're on metal, make sure your device is accessible, which in the case of a USB device e.g. conbee II, will require you to install the [generic device plugin](https://github.com/squat/generic-device-plugin):\n\n```bash\nkubectl apply -f https://raw.githubusercontent.com/squat/generic-device-plugin/main/manifests/generic-device-plugin.yaml\n```\n\n#### Values.yaml\n\nTip from [pajikos/home-assistant](https://github.com/pajikos/home-assistant) for passing in USB devices via `values.yaml`:\n\n```yaml\nextraVolumes:\n  - name: usb\n    hostPath:\n      path: \u003e-\n        /dev/serial/by-id/usb-ITEAD_SONOFF_Zigbee_3.0_USB_Dongle_Plus_V2_20230509111242-if00\n      type: CharDevice\n\nextraVolumeMounts:\n  - name: usb\n    mountPath: /dev/ttyACM0\n    # note that this is readonly to prevent security issues\n    readOnly: true\n```\n\nKeep in mind that if you're using a USB device, you may only be able to use it with one pod at a time, so you would need to also set the deployment strategy to `\"Recreate\"` so that the Deployment deletes one pod before creating another, instead of `\"RollingUpdate\"` which is the default Deployment behavior which will create another pod and make sure it's ready before deleting the old pod. If set to `\"RollingUpdate\"` (the default for all Deployments), the old pod may indefinitely hold device and prevent the new pod from spinning up as the device is not available. Example for your `values.yaml`:\n\n```yaml\nstrategy:\n  type: Recreate\n```\n\n### Bluetooth devices\n\nIf you're on metal and using a USB bluetooth apator of some sort, the process is a little different from the above USB Devices section. You probably want to mount dbus. See a `values.yaml` example here:\n\n```yaml\nextraVolumes:\n  - name: bluetooth\n    hostPath:\n      path: /run/dbus\n\nextraVolumeMounts:\n  - name: bluetooth\n    mountPath: /run/dbus\n    # note that this is readonly to prevent security issues\n    readOnly: true\n```\n\n### Mobile config\n\nIf you're new to home assistant, you may be wondering how you connect to the companion app on your phone. This requires you to put a key with no value called `mobile:` in the `configuration.yaml`. This would break your values.yaml depending on the gitops solution you're using, so we take the configuration as an in-line yaml block string instead like this:\n\n```yaml\nhomeAssistant:\n  configuration: |\n    # this has no value\n    mobile:\n```\n\n## Status\nSeemingly stable. Feel free to submit PRs and Issues though :) It was originally written for use via [this Argo CD app](https://github.com/small-hack/argocd-apps/tree/main/home-assistant) which we deploy on metal with [`smol-k8s-lab`](https://github.com/small-hack/smol-k8s-lab), but it can be used anywhere. The [docker image](https://github.com/home-assistant/core/pkgs/container/home-assistant) is kept up to date with [RenovateBot](https://docs.renovatebot.com/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmall-hack%2Fhome-assistant-chart","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmall-hack%2Fhome-assistant-chart","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmall-hack%2Fhome-assistant-chart/lists"}