nixos-configs/configurations/homie/modules/home-assistant/frontend.nix

333 lines
8 KiB
Nix
Raw Normal View History

2024-10-06 05:45:08 -04:00
{
caule-themes-src,
dracul-ha-src,
2024-10-06 20:33:37 -04:00
material-rounded-theme-src,
2024-10-31 10:57:50 -04:00
lib,
2024-10-06 05:45:08 -04:00
pkgs,
2024-10-16 20:12:23 -04:00
self,
2024-10-06 05:45:08 -04:00
...
}: let
2024-10-31 10:57:50 -04:00
inherit (lib) singleton;
2024-10-06 05:45:08 -04:00
inherit (pkgs.writers) writeYAML;
in {
services.home-assistant = {
configFiles = {
"themes/caule.yaml".source = "${caule-themes-src}/themes/caule-themes-pack-1.yaml";
"themes/dracul-ha.yaml".source = "${dracul-ha-src}/themes/dracul-ha.yaml";
"themes/material_rounded.yaml".source = "${material-rounded-theme-src}/themes/material_rounded.yaml";
2024-10-16 20:12:23 -04:00
"www/sidebar-config.yaml".source = writeYAML "sidebar" {
id = "my-sidebar";
order = [
# Top
{
item = "overview";
order = 1;
}
{
match = "href";
item = "calendar";
order = 2;
}
{
match = "href";
item = "todo";
order = 3;
}
# Bottom
{
bottom = true;
item = "esphome";
order = 5;
}
{
bottom = true;
item = "logbook";
order = 7;
}
{
bottom = true;
icon = "mdi:tools";
item = "developer tools";
name = "Developer tools";
order = 9;
}
{
bottom = true;
item = "settings";
order = 11;
}
# Hidden
{
hide = true;
item = "map";
}
{
hide = true;
item = "energy";
}
{
hide = true;
item = "history";
}
{
hide = true;
item = "media";
}
];
};
};
2024-10-22 20:28:11 -04:00
customComponents = builtins.attrValues {
inherit
(self.scopedPackages.${pkgs.system}.hass-components)
2024-10-22 20:28:11 -04:00
material-symbols
;
};
2024-10-06 20:33:37 -04:00
customLovelaceModules = builtins.attrValues {
inherit
(pkgs.home-assistant-custom-lovelace-modules)
card-mod
2024-10-23 00:30:24 -04:00
universal-remote-card
2024-10-06 20:33:37 -04:00
;
2024-10-16 20:12:23 -04:00
inherit
(self.scopedPackages.${pkgs.system}.lovelace-components)
2024-10-16 20:12:23 -04:00
custom-sidebar
;
2024-10-06 20:33:37 -04:00
};
2024-10-06 05:45:08 -04:00
config.frontend = {
themes = "!include_dir_merge_named themes";
2024-10-16 20:12:23 -04:00
extra_module_url = map (p: "/local/nixos-lovelace-modules/${p}.js") [
"card-mod"
"custom-sidebar-yaml"
];
2024-10-06 05:45:08 -04:00
};
2024-10-06 22:16:59 -04:00
config.template = [
{
2024-10-31 10:57:50 -04:00
sensor = singleton {
name = "Material Rounded Base Color Matt";
unique_id = "material_rounded_base_color_matt";
state = ''{{ states("sensor.pixel_8_accent_color") }}'';
};
2024-10-06 22:16:59 -04:00
}
];
2024-10-06 05:45:08 -04:00
lovelaceConfig = {
title = "Our House";
2024-10-31 10:57:50 -04:00
# I don't want multiple views
views = singleton {
path = "home";
title = "Home";
cards = [
{
type = "entities";
entities = [
"switch.smartplug1"
"switch.smartplug3"
];
}
{
type = "entities";
entities = [
"timer.assist_timer1"
"timer.assist_timer2"
"timer.assist_timer3"
];
}
{
type = "custom:android-tv-card";
visibility = singleton {
condition = "state";
entity = "remote.onn_4k_streaming_box";
state_not = ["unavailable" "unknown"];
};
media_player_id = "media_player.living_room_speaker";
keyboard_id = "remote.android_tv_192_168_0_106";
remote_id = "remote.onn_4k_streaming_box";
rows = [
"navigation_buttons"
[null "slider" null]
[null]
["jellyfin" "home" "back" "keyboard"]
[null]
];
custom_actions = [
{
name = "center";
type = "button";
icon = "mdi:checkbox-blank-circle";
styles = ''
:host {
--icon-color: rgb(94, 94, 94);
--size: 200px;
background: rgb(31, 31, 31);
border-radius: 200px;
margin: -70px;
padding: 70px;
}
'';
tap_action = {
action = "key";
key = "DPAD_CENTER";
};
}
{
name = "up";
type = "button";
icon = "mdi:chevron-up";
styles = ''
:host {
--icon-color: rgb(197, 199, 197);
z-index: 2;
top: 25px;
height: 90px;
width: 300px;
}
'';
hold_action = {action = "repeat";};
tap_action = {
action = "key";
key = "DPAD_UP";
};
}
{
name = "down";
type = "button";
icon = "mdi:chevron-down";
styles = ''
:host {
--icon-color: rgb(197, 199, 197);
z-index: 2;
bottom: 25px;
height: 90px;
width: 300px;
}
'';
hold_action = {action = "repeat";};
tap_action = {
action = "key";
key = "DPAD_DOWN";
};
}
{
name = "left";
type = "button";
icon = "mdi:chevron-left";
styles = ''
:host {
--icon-color: rgb(197, 199, 197);
z-index: 2;
left: 30px;
height: 170px;
width: 90px;
}
'';
hold_action = {action = "repeat";};
tap_action = {
action = "key";
key = "DPAD_LEFT";
};
}
{
name = "right";
type = "button";
icon = "mdi:chevron-right";
styles = ''
:host {
--icon-color: rgb(197, 199, 197);
z-index: 2;
right: 30px;
height: 170px;
width: 90px;
}
'';
hold_action = {action = "repeat";};
tap_action = {
action = "key";
key = "DPAD_RIGHT";
};
}
{
name = "slider";
type = "slider";
icon = "mdi:volume-high";
range = [0 1];
step = 0.01;
tap_action = {
action = "perform-action";
perform_action = "media_player.volume_set";
data = {
volume_level = "{{ value | float }}";
2024-10-23 00:30:24 -04:00
};
2024-10-31 10:57:50 -04:00
};
value_attribute = "volume_level";
}
];
styles = ''
#row-1 {
justify-content: center;
}
#row-2 {
justify-content: center;
}
#row-3 {
justify-content: center;
}
'';
}
];
};
2024-10-06 05:45:08 -04:00
};
config.lovelace.dashboards = {
esphome-dash = {
title = "ESPHome";
icon = "mdi:car-esp";
mode = "yaml";
2024-10-06 05:45:08 -04:00
show_in_sidebar = true;
require_admin = true;
filename = writeYAML "esphome.yaml" {
strategy = {
type = "iframe";
url = "https://esphome.nelim.org";
};
};
};
};
};
}