Add Homepage dashboard for FredOS-Mediaserver
Covers all running services: Jellyfin, Sonarr, Radarr, Bazarr, Prowlarr, qBittorrent, Nginx Proxy Manager, Authelia, go2rtc. Live widgets for *arr apps, Jellyfin now-playing, and qBittorrent speed use API keys loaded from /etc/homepage-secrets (outside the Nix store). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
549277ca0f
commit
29dae0c5ea
2 changed files with 179 additions and 0 deletions
|
|
@ -30,6 +30,7 @@
|
|||
./services/bazarr.nix
|
||||
./services/cloudflare-ddns.nix
|
||||
./services/fail2ban.nix
|
||||
./services/homepage.nix
|
||||
];
|
||||
|
||||
### Make build time quicker
|
||||
|
|
|
|||
178
services/homepage.nix
Normal file
178
services/homepage.nix
Normal file
|
|
@ -0,0 +1,178 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
{
|
||||
config = lib.mkIf (config.networking.hostName == "FredOS-Mediaserver") {
|
||||
|
||||
services.homepage-dashboard = {
|
||||
enable = true;
|
||||
openFirewall = true;
|
||||
listenPort = 8082;
|
||||
|
||||
# Allow access from anywhere on the LAN
|
||||
# Add your domain here too if you expose it via Nginx Proxy Manager
|
||||
allowedHosts = "localhost:8082,127.0.0.1:8082,192.168.4.74:8082";
|
||||
|
||||
# API keys loaded from a file that lives outside the Nix store
|
||||
# Create /etc/homepage-secrets with content like:
|
||||
# HOMEPAGE_VAR_JELLYFIN_KEY=your_api_key_here
|
||||
# HOMEPAGE_VAR_SONARR_KEY=your_api_key_here
|
||||
# HOMEPAGE_VAR_RADARR_KEY=your_api_key_here
|
||||
# HOMEPAGE_VAR_PROWLARR_KEY=your_api_key_here
|
||||
# HOMEPAGE_VAR_BAZARR_KEY=your_api_key_here
|
||||
# HOMEPAGE_VAR_QBIT_PASSWORD=your_password_here
|
||||
environmentFiles = [ "/etc/homepage-secrets" ];
|
||||
|
||||
settings = {
|
||||
title = "FredOS Mediaserver";
|
||||
theme = "dark";
|
||||
color = "slate";
|
||||
headerStyle = "clean";
|
||||
layout = {
|
||||
Media = { style = "row"; columns = 2; };
|
||||
Downloads = { style = "row"; columns = 2; };
|
||||
Infrastructure = { style = "row"; columns = 3; };
|
||||
};
|
||||
};
|
||||
|
||||
widgets = [
|
||||
{
|
||||
resources = {
|
||||
cpu = true;
|
||||
memory = true;
|
||||
disk = "/";
|
||||
label = "System";
|
||||
};
|
||||
}
|
||||
{
|
||||
search = {
|
||||
provider = "duckduckgo";
|
||||
target = "_blank";
|
||||
};
|
||||
}
|
||||
{
|
||||
datetime = {
|
||||
text_size = "xl";
|
||||
format = {
|
||||
timeStyle = "short";
|
||||
dateStyle = "short";
|
||||
hour12 = false;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
|
||||
services = [
|
||||
{
|
||||
Media = [
|
||||
{
|
||||
Jellyfin = {
|
||||
href = "http://192.168.4.74:8096";
|
||||
description = "Media server";
|
||||
icon = "jellyfin.png";
|
||||
widget = {
|
||||
type = "jellyfin";
|
||||
url = "http://192.168.4.74:8096";
|
||||
key = "{{HOMEPAGE_VAR_JELLYFIN_KEY}}";
|
||||
enableBlocks = true;
|
||||
enableNowPlaying = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
Bazarr = {
|
||||
href = "http://192.168.4.74:6767";
|
||||
description = "Subtitle management";
|
||||
icon = "bazarr.png";
|
||||
widget = {
|
||||
type = "bazarr";
|
||||
url = "http://192.168.4.74:6767";
|
||||
key = "{{HOMEPAGE_VAR_BAZARR_KEY}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
Sonarr = {
|
||||
href = "http://192.168.4.74:8989";
|
||||
description = "TV show management";
|
||||
icon = "sonarr.png";
|
||||
widget = {
|
||||
type = "sonarr";
|
||||
url = "http://192.168.4.74:8989";
|
||||
key = "{{HOMEPAGE_VAR_SONARR_KEY}}";
|
||||
enableQueue = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
Radarr = {
|
||||
href = "http://192.168.4.74:7878";
|
||||
description = "Movie management";
|
||||
icon = "radarr.png";
|
||||
widget = {
|
||||
type = "radarr";
|
||||
url = "http://192.168.4.74:7878";
|
||||
key = "{{HOMEPAGE_VAR_RADARR_KEY}}";
|
||||
enableQueue = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
Downloads = [
|
||||
{
|
||||
qBittorrent = {
|
||||
href = "http://192.168.4.74:8080";
|
||||
description = "Torrent client";
|
||||
icon = "qbittorrent.png";
|
||||
widget = {
|
||||
type = "qbittorrent";
|
||||
url = "http://192.168.4.74:8080";
|
||||
username = "admin";
|
||||
password = "{{HOMEPAGE_VAR_QBIT_PASSWORD}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
{
|
||||
Prowlarr = {
|
||||
href = "http://192.168.4.74:9696";
|
||||
description = "Indexer manager";
|
||||
icon = "prowlarr.png";
|
||||
widget = {
|
||||
type = "prowlarr";
|
||||
url = "http://192.168.4.74:9696";
|
||||
key = "{{HOMEPAGE_VAR_PROWLARR_KEY}}";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
{
|
||||
Infrastructure = [
|
||||
{
|
||||
"Nginx Proxy Manager" = {
|
||||
href = "http://192.168.4.74:81";
|
||||
description = "Reverse proxy";
|
||||
icon = "nginx-proxy-manager.png";
|
||||
};
|
||||
}
|
||||
{
|
||||
Authelia = {
|
||||
href = "http://192.168.4.74:9091";
|
||||
description = "SSO & 2FA";
|
||||
icon = "authelia.png";
|
||||
};
|
||||
}
|
||||
{
|
||||
go2rtc = {
|
||||
href = "http://192.168.4.74:1984";
|
||||
description = "Camera streams";
|
||||
icon = "go2rtc.png";
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue