nix-config/features/homelab-dashboard.nix

264 lines
7 KiB
Nix
Raw Normal View History

2024-07-14 16:01:31 +02:00
{
config,
lib,
pkgs,
...
}:
with lib;
let
2024-07-15 16:27:23 +02:00
cfg = config.homepage-dashboard;
ip = cfg.baseURL;
2024-07-14 16:01:31 +02:00
in
{
2024-07-14 16:01:31 +02:00
options = {
2024-07-15 16:27:23 +02:00
homelab-dashboard.baseURL = mkOption {
type = types.str;
default = "192.168.1.177";
};
homelab-dashboard.proxmoxVEIp = mkOption {
type = types.str;
default = "192.168.1.10";
};
homelab-dashboard.proxmoxBSIp = mkOption {
type = types.str;
default = "";
};
homelab-dashboard.piholeURL = mkOption {
type = types.str;
default = "192.168.1.25";
};
2024-07-14 16:01:31 +02:00
};
2024-07-15 16:27:23 +02:00
#TODO: add Radarr/Sonarr/... api key support
2024-07-14 16:01:31 +02:00
config = {
sops.defaultSopsFile = ../secrets/service-key.json;
2024-07-15 18:04:17 +02:00
sops.defaultSopsFormat = "json";
2024-07-15 18:33:15 +02:00
sops.secrets = {
sonarr = { };
radarr = { };
jellyfin = { };
jellyseerr = { };
pihole = { };
transmission = { };
prowlarr = { };
proxmoxPassword = { };
proxmoxUsername = { };
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
services.homepage-dashboard = {
enable = true;
settings = {
"headerStyle" = "boxed";
"language" = "fr";
};
2024-07-15 16:27:23 +02:00
widgets = [
{
resources = {
cpu = true;
disk = "/";
memory = true;
};
}
{
search = {
provider = "duckduckgo";
target = "_blank";
};
}
];
2024-07-14 16:01:31 +02:00
services = [
{
"Divertissement" = [
{
"Jellyfin" = {
icon = "jellyfin";
description = "Permet de regarder ou écouter du contenu.";
href = "http://${ip}:8096/";
2024-07-15 16:27:23 +02:00
widget = {
type = "jellyfin";
url = "http://${ip}:8096";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.jellyfin;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
"Calibre-web" = {
icon = "calibre";
description = "Serveur de livres";
href = "http://${ip}:8083";
};
}
2024-07-15 16:27:23 +02:00
{
"Serveur Minecraft poulet" = {
icon = "minecraft";
description = "serveur des trois poulets";
};
}
2024-07-14 16:01:31 +02:00
];
}
{
"Téléchargement" = [
{
"Jellyseerr" = {
icon = "jellyseerr";
description = "Moteur de recherche de films/séries";
href = "http://${ip}:5055";
2024-07-15 16:27:23 +02:00
widget = {
type = "jellyseerr";
url = "http://${ip}:5055";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.jellyseerr;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
"slskd" = {
icon = "slskd";
description = "Pour télécharger/partager de la musique";
href = "http://${ip}:5030";
};
}
{
"Readarr" = {
icon = "readarr";
description = "Moteur de recherche de livres";
href = "http://${ip}:8787/";
2024-07-15 16:27:23 +02:00
widget = {
type = "readarr";
url = "http://$ip:8787";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.readarr;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
"Prowlarr" = {
icon = "prowlarr";
description = "Indexe les différents sites de téléchargement";
href = "http://${ip}:9696/";
2024-07-15 16:27:23 +02:00
widget = {
type = "prowlarr";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.prowlarr;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
2024-07-14 16:01:31 +02:00
"Sonarr" = {
icon = "sonarr";
description = "Moteur de recherche pour les séries";
href = "http://${ip}:8989";
2024-07-15 16:27:23 +02:00
widget = {
type = "sonarr";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.sonarr;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
"Radarr" = {
icon = "radarr";
description = "Moteur de recherche pour les films";
href = "http://${ip}:7878";
2024-07-15 16:27:23 +02:00
widget = {
type = "radarr";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.radarr;
2024-07-15 16:27:23 +02:00
};
2024-07-14 16:01:31 +02:00
};
}
{
2024-07-14 16:01:31 +02:00
"Transmission" = {
icon = "transmission";
description = "s'occupe du téléchargement des fichiers";
href = "http://${ip}:9091";
2024-07-15 16:27:23 +02:00
widget = {
type = "transmission";
};
2024-07-14 16:01:31 +02:00
};
}
];
}
{
"Utilitaires" = [
{
"Photoprism" = {
icon = "photoprism";
description = "Sauvegarde de photos";
href = "http://${ip}:2342";
};
2024-07-14 16:01:31 +02:00
}
{
"Searx" = {
icon = "searx";
description = "Moteur de recherche privé pour remplacer Google.";
href = "http://${ip}:8080";
};
}
];
}
{
"Administration" = [
2024-07-15 16:27:23 +02:00
/*
{
"Proxmox Backup Server" = {
icon = "proxmox-light";
description = "Permet de sauvegarder le serveur.";
href = "https://${cfg.proxmoxBSIp}:8007";
};
}
*/
2024-07-14 16:01:31 +02:00
{
2024-07-15 16:27:23 +02:00
"Proxmox VE" = {
icon = "proxmox";
description = "Panneau de controle des machines virtuelles";
href = "https://${cfg.proxmoxVEIp}:8006";
widget = {
type = "proxmox";
2024-07-15 18:33:15 +02:00
username = config.sops.secrets.proxmoxUsername;
key = config.sops.secrets.proxmoxPassword;
2024-07-15 16:27:23 +02:00
url = "https://${cfg.proxmoxVEIp}:8006";
node = "pve";
};
2024-07-14 16:01:31 +02:00
};
}
{
2024-07-15 16:27:23 +02:00
"Pi.hole" = {
icon = "pihole";
description = "Bloqueur de pubs DNS/DHCP";
href = "http://${cfg.piholeURL}";
widget = {
type = "pihole";
2024-07-15 18:33:15 +02:00
key = config.sops.secrets.pihole;
2024-07-15 16:27:23 +02:00
url = "http://${cfg.piholeURL}";
};
};
}
{
"Grafana" = {
icon = "grafana";
description = "Visualiseur de graphiques";
href = "";
};
}
{
"InfluxDB" = {
description = "Traite les statistiques du serveur Proxmox";
2024-07-15 16:27:23 +02:00
};
}
{
"Uptime Kuma" = {
icon = "uptimekuma";
description = "Surveille l'état des différents services";
};
2024-07-14 16:01:31 +02:00
}
];
}
];
2024-07-14 16:01:31 +02:00
};
};
}