Skip to content

Commit

Permalink
Initial commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasloven committed Aug 13, 2019
0 parents commit dfec8f2
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
**/__pycache__/
47 changes: 47 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
favicon
=======

Change the favicon and app icons of your Home Assistant instance

![browser](https://user-images.githubusercontent.com/1299821/62975860-ad283a80-be1b-11e9-836a-d58a1732fb21.png)

# Installation instructions

- Copy the contents of `custom_components/favicon/` to `<your config dir>/custom_components/favicon/`.

- Get some icons

There are some nice ones available [here](https://github.com/home-assistant/home-assistant-assets/tree/master/Alternates), and you can generate favicons from them using an online tool, such as [this one](https://realfavicongenerator.net/).

- Put your icons in e.g. `<your config dir>/www/favicons/`

- Add the following to your `configuration.yaml`:

```yaml
favicon:
favicon: /local/favicons/favicon.ico
apple: /local/favicons/apple-touch-icon-180x180.png
32: /local/favicons/favicon-32x32.png
512: /local/favicons/android-chrome-512x512.png
```
- Restart Home Assistant
- Make sure to clear the cache of your browser to get the new icons.
# Options
- `favicon` - an .ico file which is displayed in your browser tab or bookmark menu.

- `apple` - a 180 x 180 px image that will be displayed on your iDevice home screen if you save the link there

- `<number>` - a `<number>` x `<number>` px image that will be displayed wherever it's needed for non-apple devices.

You can add as few or as many of those you'd like. It's my understanding that the next smaller size will be used if one is requested which doesn't quite fit the need.

For reference, Home Assistant includes icons of sizes 192, 384, 512 and 1024 px square by default. Specifying even a single size will override all of those.

![iphone](https://user-images.githubusercontent.com/1299821/62975899-c29d6480-be1b-11e9-9b6b-9d160ef8b439.jpg)

---
<a href="https://www.buymeacoffee.com/uqD6KHCdJ" target="_blank"><img src="https://www.buymeacoffee.com/assets/img/custom_images/white_img.png" alt="Buy Me A Coffee" style="height: auto !important;width: auto !important;" ></a>
50 changes: 50 additions & 0 deletions custom_components/favicon/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import logging

import homeassistant.components.frontend
from homeassistant.components.frontend import _frontend_root

_LOGGER = logging.getLogger(__name__)

DOMAIN = "favicon"

async def async_setup(hass, config):

favicon = config[DOMAIN].get('favicon')
apple = config[DOMAIN].get('apple')

if favicon or apple:
get_template = homeassistant.components.frontend.IndexView.get_template

def new_get_template(self):
tpl = get_template(self)
render = tpl.render
def new_render(*args, **kwargs):
text = render(*args, **kwargs)
if favicon:
text = text.replace("/static/icons/favicon.ico", favicon)
if apple:
text = text.replace("/static/icons/favicon-apple-180x180.png", apple)
return text
tpl.render = new_render
return tpl

homeassistant.components.frontend.IndexView.get_template = new_get_template

icons = []
for size in config[DOMAIN]:
if not isinstance(size, int):
continue
i = config[DOMAIN].get(size)
if i:
icons.append({
"src": i,
"sizes": f"{size}x{size}",
"type": "image/png",
})

if icons:
homeassistant.components.frontend.MANIFEST_JSON["icons"] = icons

return True


8 changes: 8 additions & 0 deletions custom_components/favicon/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"domain": "favicon",
"name": "Favicon changer",
"documentation": "",
"dependencies": ["frontend"],
"codeowners": [],
"requirements": []
}

0 comments on commit dfec8f2

Please sign in to comment.