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 {
|
2024-09-05 21:33:06 -04:00
|
|
|
services.home-assistant = {
|
2024-10-09 23:14:05 -04:00
|
|
|
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-09 23:14:05 -04:00
|
|
|
};
|
|
|
|
|
2024-10-22 20:28:11 -04:00
|
|
|
customComponents = builtins.attrValues {
|
|
|
|
inherit
|
2024-11-20 15:17:55 -05:00
|
|
|
(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
|
2024-11-20 15:17:55 -05:00
|
|
|
(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";
|
2024-09-05 21:33:06 -04:00
|
|
|
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";
|
|
|
|
};
|
|
|
|
};
|
2024-09-05 21:33:06 -04:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|