diff options
| author | Max Audron <audron@cocaine.farm> | 2025-08-01 15:45:28 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2025-08-01 15:45:28 +0200 |
| commit | e7d81af57fe372e08b7d0193d31a9ff614d7a737 (patch) | |
| tree | 063c2a219699a3171957b31c0a8a1d0d18cc8c94 /modules/homepage | |
| parent | disable not used gameservers (diff) | |
add homepage dashboard
Diffstat (limited to 'modules/homepage')
| -rw-r--r-- | modules/homepage/default.nix | 242 |
1 files changed, 242 insertions, 0 deletions
diff --git a/modules/homepage/default.nix b/modules/homepage/default.nix new file mode 100644 index 0000000..3dafa47 --- /dev/null +++ b/modules/homepage/default.nix @@ -0,0 +1,242 @@ +{ self, config, lib, pkgs, ... }: + +with self.lib.nginx; +{ + services.homepage-dashboard = { + enable = true; + allowedHosts = "vapor.systems"; + + environmentFile = config.secrets.homepage.dest; + + settings = { + hideVersion = true; + + headerStyle = "clean"; + statusStyle = "dot"; + + theme = "dark"; + background = "/images/backgrounds/wallhaven-39gogv.jpg"; + cardBlur = "xl"; + + useEqualHeights = true; + layout = [ + { + "Media" = { + style = "row"; + columns = 5; + }; + } + { + "Games" = { + style = "row"; + columns = 4; + }; + } + { + "Hosting" = { + style = "row"; + columns = 2; + header = false; + "Monitoring" = { + style = "row"; + columns = 1; + }; + "Development" = { + style = "row"; + columns = 2; + }; + }; + } + ]; + }; + + services = [ + { + "Media" = [ + { + "Jellyfin" = { + icon = "sh-jellyfin"; + description = "Media Server"; + href = "https://media.cocaine.farm"; + siteMonitor = "https://media.cocaine.farm"; + + widget = { + type = "jellyfin"; + url = "https://media.cocaine.farm"; + key = "{{HOMEPAGE_VAR_JELLYFIN_KEY}}"; + enableBlocks = true; + enableNowPlaying = true; + enableUser = true; + enableMediaControl = false; + showEpisodeNumber = false; + expandOneStreamToTwoRows = false; + }; + }; + } + { + "Radarr" = { + icon = "sh-radarr"; + description = "Movie Management"; + href = "https://radarr.media.cocaine.farm"; + siteMonitor = "https://radarr.media.cocaine.farm"; + widget = { + type = "radarr"; + url = "http://phaenn:7878"; + key = "{{HOMEPAGE_VAR_RADARR_KEY}}"; + enableQueue = true; + }; + }; + } + { + "Sonarr" = { + icon = "sh-sonarr"; + description = "Series Management"; + href = "https://sonarr.media.cocaine.farm"; + siteMonitor = "https://sonarr.media.cocaine.farm"; + widget = { + type = "sonarr"; + url = "http://phaenn:8989"; + key = "{{HOMEPAGE_VAR_SONARR_KEY}}"; + enableQueue = true; + }; + }; + } + { + "Prowlarr" = { + icon = "sh-prowlarr"; + description = "Tracker Management"; + href = "https://prowlarr.media.cocaine.farm"; + siteMonitor = "https://prowlarr.media.cocaine.farm"; + widget = { + type = "prowlarr"; + url = "http://phaenn:9696"; + key = "{{HOMEPAGE_VAR_PROWLARR_KEY}}"; + }; + }; + } + { + "ruTorrent" = { + icon = "/images/icons/rutorrent.png"; + description = "Torrent Client"; + href = "https://torrent.media.cocaine.farm"; + siteMonitor = "https://torrent.media.cocaine.farm"; + widget = { + type = "rutorrent"; + url = "http://10.10.0.2"; + }; + }; + } + ]; + } + { + "Games" = [ + { "Minecraft - Dungeons & Taverns" = { + icon = "sh-minecraft"; + description = "c0re.space:25566"; + widgets = [ + { type = "prometheusmetric"; + url = "http://ettves:9090"; + refreshInterval = 10000; + metrics = [ + { label = "Players"; + query = ''sum(minecraft_players_online)''; + } + { label = "TPS"; + query = ''round(minecraft_tps)''; + } + ]; + } + ]; + }; + } + { "Minecraft - Vanilla" = { + icon = "sh-minecraft"; + description = "c0re.space:25565"; + widgets = [ + { type = "prometheusmetric"; + url = "http://ettves:9090"; + refreshInterval = 10000; + metrics = [ + { label = "Players"; + query = ''sum(mc_players_online_total)''; + } + { label = "TPS"; + query = ''round(mc_tps)''; + } + ]; + } + ]; + }; + } + { "Factorio - Space Age" = { + icon = "/images/icons/factorio.png"; + description = "cocaine.farm"; + }; + } + { "Assetto Corsa Competizione" = { + icon = "/images/icons/ac-logo-white.svg"; + description = "cocaine.farm:9231"; + }; + } + ]; + } + { + "Hosting" = [ + { + "Monitoring" = [ + { + "Prometheus" = { + icon = "sh-prometheus"; + description = "Monitoring & Metrics Database"; + href = "https://prometheus.vapor.systems"; + siteMonitor = "https://prometheus.vapor.systems"; + }; + } + ]; + } + { + "Development" = [ + { + "Gitea" = { + icon = "sh-gitea"; + description = "Git Repository Host"; + href = "https://git.vapor.systems"; + siteMonitor = "https://git.vapor.systems"; + }; + } + { + "Hydra" = { + icon = "sh-nixos"; + description = "Nix Build System"; + href = "https://hydra.vapor.systems"; + siteMonitor = "https://hydra.vapor.systems"; + }; + } + ]; + } + ]; + } + ]; + }; + + secrets = { + homepage = { + source = ../../secrets/homepage.env; + dest = "/etc/secrets/homepage.env"; + }; + }; + + services.nginx = { + enable = true; + virtualHosts = { + "vapor.systems" = lib.mkMerge [ + (proxyDomain "vapor.systems" "http://localhost:8082/") + { + locations."/images" = { + root = "/var/www/vapor.systems"; + }; + } + ]; + }; + }; +} |
