{ config, containerCfg, pkgs, lib, builder, name,... }: let version = "latest"; serverCfg = config.syscfg.server; settings = pkgs.writers.writeYAML "settings.yaml" { title = "My Self-Hosted Dashboard"; base = ""; theme = "dark"; # layout = { # Infrastructure = { # style = "grid"; # columns = 3; # }; # }; }; services = pkgs.writers.writeYAML "services.yaml" [ {Media = lib.flatten [ (lib.optional (serverCfg.containers?jellyfin) { Jellyfin={ icon = "jellyfin.png"; href = "https://${serverCfg.containers.jellyfin.subdomain}.${serverCfg.domain}"; widget = { type="jellyfin"; url = "http://jellyfin-server:8096"; key = "ca5bfeeb416d4ea9b0f45f2d6b1b5999"; }; }; }) (lib.optional (serverCfg.containers?invidious) { Invidious={ icon = "invidious.png"; href = "https://${serverCfg.containers.invidious.subdomain}.${serverCfg.domain}"; }; }) (lib.optional (serverCfg.containers?miniflux) { RSS={ icon = "miniflux.png"; href = "https://${serverCfg.containers.miniflux.subdomain}.${serverCfg.domain}"; }; }) ];} {Cloud = lib.flatten [ (lib.optional (serverCfg.containers?nextcloud) { Nextcloud={ icon = "nextcloud.png"; href = "https://${serverCfg.containers.nextcloud.subdomain}.${serverCfg.domain}"; widget = { type="nextcloud"; url = "http://nextcloud-server"; }; }; }) (lib.optional (serverCfg.containers?ethercalc) { Ethercalc={ icon = "ethercalc.png"; href = "https://${serverCfg.containers.ethercalc.subdomain}.${serverCfg.domain}"; }; }) (lib.optional (serverCfg.containers?etherpad) { Etherpad={ icon = "etherpad.png"; href = "https://${serverCfg.containers.etherpad.subdomain}.${serverCfg.domain}"; }; }) ];} {Dev = lib.flatten [ (lib.optional (serverCfg.containers?gitea) { Gitea={ icon = "gitea.png"; href = "https://${serverCfg.containers.gitea.subdomain}.${serverCfg.domain}"; }; }) ];} {Admin = lib.flatten [ (lib.optional (serverCfg.containers?authentik) { Authentik={ icon = "authentik.png"; href = "https://${serverCfg.containers.authentik.subdomain}.${serverCfg.domain}"; }; }) (lib.optional (serverCfg.containers?influx) { Influx={ icon = "influx.png"; href = "https://${serverCfg.containers.influx.subdomain}.${serverCfg.domain}"; }; }) (lib.optional (serverCfg.containers?handbrake) { Handbrake={ icon = "handbrake.png"; href = "https://${serverCfg.containers.handbrake.subdomain}.${serverCfg.domain}"; }; }) (lib.optional (serverCfg.containers?transmission) { Transmission={ icon = "transmission.png"; href = "https://${serverCfg.containers.transmission.subdomain}.${serverCfg.domain}/transmission"; }; }) ];} ]; in { sops = false; db = false; containers = { server = builder.mkContainer { subdomain = containerCfg.subdomain; image = "ghcr.io/gethomepage/homepage:${version}"; port = 3000; extraEnv = { HOMEPAGE_VAR_TITLE="${serverCfg.domain}"; HOMEPAGE_ALLOWED_HOSTS = "${containerCfg.subdomain}.${serverCfg.domain},${builder.host}"; }; extraLabels = { "traefik.http.routers.${containerCfg.subdomain}.service" = "${containerCfg.subdomain}"; }; overrides = { volumes = [ "${settings}:/app/config/settings.yaml:ro" "${services}:/app/config/services.yaml:ro" "/var/run/podman/podman.sock:/var/run/docker.sock" ]; }; }; }; }