128 lines
4.6 KiB
Nix
128 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 = "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"
|
|
];
|
|
};
|
|
};
|
|
};
|
|
|
|
} |