Files
nixconfig/modules/server/containers/apps/homepage.nix
soraefir d013b4ae88 test
2026-05-31 01:07:52 +02:00

129 lines
4.6 KiB
Nix

{ 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 = "{{JELLYFIN_API}}";
};
};
})
(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";
key = "\${NEXTCLOUD}";
};
};
})
(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"
];
};
};
};
}