Customize and extend Home Assistant with themes, custom components, entity configurations, blueprints, and HACS integrations.
Create custom themes, entities, and HACS integrations for Home Assistant. Build reusable blueprints, style cards with CSS, and develop custom components with config flows.
/plugin marketplace add Lobbi-Docs/claude/plugin install home-assistant-architect@claude-orchestrationCustomize and extend Home Assistant with themes, custom components, entity configurations, blueprints, and HACS integrations.
name: ha-customization-expert
description: Customize HA with themes, custom components, and entity configurations
model: opus
category: customization
keywords:
- customize
- themes
- hacs
- custom
- components
- blueprints
- entity
# customize.yaml
# Apply to individual entities
light.living_room:
friendly_name: "Living Room Lights"
icon: mdi:floor-lamp
sensor.temperature:
friendly_name: "Indoor Temperature"
icon: mdi:thermometer
device_class: temperature
binary_sensor.front_door:
friendly_name: "Front Door"
icon: mdi:door
device_class: door
switch.coffee_maker:
friendly_name: "Coffee Maker"
icon: mdi:coffee-maker
assumed_state: false
# Bulk customization with customize_glob
customize_glob:
"light.*":
icon: mdi:lightbulb
"sensor.*_temperature":
icon: mdi:thermometer
device_class: temperature
"sensor.*_humidity":
icon: mdi:water-percent
device_class: humidity
"binary_sensor.*_motion":
device_class: motion
icon: mdi:motion-sensor
"switch.*_outlet":
icon: mdi:power-socket-us
# themes/modern_dark.yaml
modern_dark:
# Primary colors
primary-color: "#3b82f6"
accent-color: "#8b5cf6"
# Background colors
primary-background-color: "#0f172a"
secondary-background-color: "#1e293b"
card-background-color: "#1e293b"
# Text colors
primary-text-color: "#f1f5f9"
secondary-text-color: "#94a3b8"
disabled-text-color: "#475569"
# Sidebar
sidebar-background-color: "#0f172a"
sidebar-text-color: "#f1f5f9"
sidebar-selected-background-color: "#1e293b"
# Cards
ha-card-background: "#1e293b"
ha-card-border-radius: "16px"
ha-card-box-shadow: "0 4px 6px -1px rgba(0, 0, 0, 0.3)"
# States
state-icon-active-color: "#3b82f6"
state-icon-color: "#64748b"
state-light-on-color: "#fbbf24"
state-light-off-color: "#475569"
# Switches
switch-checked-color: "#3b82f6"
switch-unchecked-button-color: "#475569"
switch-unchecked-track-color: "#1e293b"
# Sliders
paper-slider-active-color: "#3b82f6"
paper-slider-secondary-color: "#475569"
paper-slider-container-color: "#1e293b"
# Buttons
paper-item-icon-active-color: "#3b82f6"
# Badges
label-badge-background-color: "#1e293b"
label-badge-text-color: "#f1f5f9"
# Dividers
divider-color: "#334155"
# App header
app-header-background-color: "#0f172a"
app-header-text-color: "#f1f5f9"
# Modes
modes:
light:
primary-background-color: "#f8fafc"
secondary-background-color: "#ffffff"
card-background-color: "#ffffff"
primary-text-color: "#0f172a"
secondary-text-color: "#475569"
# Per-card styling with card-mod
type: entities
title: My Styled Card
entities:
- entity: light.living_room
- entity: switch.tv
card_mod:
style: |
ha-card {
background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
border-radius: 24px;
border: 1px solid rgba(255,255,255,0.1);
}
.card-header {
color: #f1f5f9;
font-weight: 600;
letter-spacing: 0.5px;
}
state-badge {
background-color: rgba(59, 130, 246, 0.2);
}
custom_components/
└── my_integration/
├── __init__.py
├── manifest.json
├── config_flow.py
├── const.py
├── sensor.py
└── translations/
└── en.json
// manifest.json
{
"domain": "my_integration",
"name": "My Custom Integration",
"version": "1.0.0",
"documentation": "https://github.com/user/my_integration",
"issue_tracker": "https://github.com/user/my_integration/issues",
"dependencies": [],
"codeowners": ["@username"],
"requirements": ["some-library==1.0.0"],
"config_flow": true,
"iot_class": "local_polling"
}
# __init__.py
"""My Custom Integration."""
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
DOMAIN = "my_integration"
PLATFORMS = ["sensor"]
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Set up from a config entry."""
hass.data.setdefault(DOMAIN, {})
hass.data[DOMAIN][entry.entry_id] = entry.data
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
return True
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok:
hass.data[DOMAIN].pop(entry.entry_id)
return unload_ok
# sensor.py
"""Sensor platform for my integration."""
from homeassistant.components.sensor import SensorEntity
from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback
from .const import DOMAIN
async def async_setup_entry(
hass: HomeAssistant,
entry: ConfigEntry,
async_add_entities: AddEntitiesCallback,
) -> None:
"""Set up sensor platform."""
async_add_entities([MySensor(entry)])
class MySensor(SensorEntity):
"""My custom sensor."""
def __init__(self, entry: ConfigEntry) -> None:
"""Initialize the sensor."""
self._attr_name = "My Sensor"
self._attr_unique_id = f"{entry.entry_id}_sensor"
self._attr_native_value = None
async def async_update(self) -> None:
"""Update the sensor."""
# Fetch data here
self._attr_native_value = 42
# blueprints/automation/motion_light.yaml
blueprint:
name: Motion-activated Light
description: Turn on a light when motion is detected
domain: automation
input:
motion_entity:
name: Motion Sensor
description: The motion sensor to use
selector:
entity:
domain: binary_sensor
device_class: motion
light_target:
name: Light
description: The light to control
selector:
target:
entity:
domain: light
no_motion_wait:
name: Wait time
description: Time to leave the light on after motion clears
default: 120
selector:
number:
min: 0
max: 3600
unit_of_measurement: seconds
brightness:
name: Brightness
description: Brightness when turned on
default: 100
selector:
number:
min: 1
max: 100
unit_of_measurement: "%"
mode: restart
max_exceeded: silent
trigger:
- platform: state
entity_id: !input motion_entity
to: "on"
action:
- service: light.turn_on
target: !input light_target
data:
brightness_pct: !input brightness
- wait_for_trigger:
- platform: state
entity_id: !input motion_entity
to: "off"
for:
seconds: !input no_motion_wait
- service: light.turn_off
target: !input light_target
# Manual HACS installation
# 1. Download HACS
# 2. Extract to custom_components/hacs
# 3. Restart Home Assistant
# 4. Add HACS integration via UI
# Popular HACS repositories:
# Custom Cards:
# - custom-cards/button-card
# - piitaya/lovelace-mushroom
# - kalkih/mini-graph-card
# - thomasloven/lovelace-card-mod
# - thomasloven/lovelace-auto-entities
# Custom Integrations:
# - hacs/integration
# - custom-components/alexa_media_player
# - bramstroker/homeassistant-powercalc
# groups.yaml
all_lights:
name: All Lights
icon: mdi:lightbulb-group
entities:
- light.living_room
- light.bedroom
- light.kitchen
- light.bathroom
security_sensors:
name: Security Sensors
icon: mdi:shield-home
entities:
- binary_sensor.front_door
- binary_sensor.back_door
- binary_sensor.motion_hallway
- binary_sensor.motion_basement
family:
name: Family
icon: mdi:account-group
entities:
- person.owner
- person.spouse
- person.child
# scenes.yaml
- name: Movie Night
icon: mdi:movie
entities:
light.living_room:
state: on
brightness: 50
color_temp: 400
light.tv_backlight:
state: on
brightness: 30
rgb_color: [255, 100, 50]
switch.tv:
state: on
cover.living_room_blinds:
state: closed
media_player.living_room:
state: on
source: "Netflix"
- name: Good Morning
icon: mdi:weather-sunny
entities:
light.bedroom:
state: on
brightness: 100
color_temp: 250
cover.bedroom_blinds:
state: open
climate.thermostat:
state: heat
temperature: 72
When generating customizations:
Designs feature architectures by analyzing existing codebase patterns and conventions, then providing comprehensive implementation blueprints with specific files to create/modify, component designs, data flows, and build sequences