mirror of
https://github.com/Jokiller230/puzzlevision.git
synced 2025-09-09 04:10:05 +00:00
62 lines
1.9 KiB
Nix
62 lines
1.9 KiB
Nix
{
|
|
lib,
|
|
self,
|
|
config,
|
|
...
|
|
}:
|
|
let
|
|
inherit (lib) mkEnableOption mkIf types;
|
|
inherit (self) namespace;
|
|
inherit (self.lib) mkOpt;
|
|
|
|
cfg = config.${namespace}.services.homepage;
|
|
in
|
|
{
|
|
options.${namespace}.services.homepage = {
|
|
enable = mkEnableOption "Homepage, an intuitive dashboard for your services.";
|
|
subdomain =
|
|
mkOpt types.str "home"
|
|
"The subdomain, of the system domain, the service should be exposed on.";
|
|
configDir =
|
|
mkOpt types.path null
|
|
"The config directory, which will be copied to the Homepage directory during compilation.";
|
|
};
|
|
|
|
config = mkIf cfg.enable {
|
|
systemd.tmpfiles.rules = [
|
|
"d /var/lib/containers/homepage 0700 root root -"
|
|
"d /var/lib/containers/homepage/config 0700 root root -"
|
|
"d /var/lib/containers/homepage/images 0700 root root -"
|
|
];
|
|
|
|
# Copy files from homepageConfigDirectory to the target directory
|
|
system.activationScripts.homepage = ''
|
|
cp -r ${cfg.configDir}/* /var/lib/containers/homepage/
|
|
'';
|
|
|
|
virtualisation.oci-containers.containers.homepage = {
|
|
image = "ghcr.io/gethomepage/homepage:latest";
|
|
autoStart = true;
|
|
hostname = config.networking.hostName;
|
|
labels = {
|
|
"traefik.enable" = "true";
|
|
"traefik.http.routers.homepage.entrypoints" = "websecure";
|
|
"traefik.http.routers.homepage.rule" = "Host(`${cfg.subdomain}.${
|
|
config.${namespace}.services.domain
|
|
}`)";
|
|
"traefik.http.services.homepage.loadbalancer.server.port" = "3000";
|
|
};
|
|
volumes = [
|
|
"/var/lib/containers/homepage/config:/app/config:rw"
|
|
"/var/lib/containers/homepage/images:/app/public/images:rw"
|
|
|
|
# Optional, used for docker integration.
|
|
"/var/run/docker.sock:/var/run/docker.sock:ro"
|
|
];
|
|
environment = {
|
|
"HOMEPAGE_ALLOWED_HOSTS" = "${cfg.subdomain}.${config.${namespace}.services.domain}";
|
|
};
|
|
extraOptions = [ "--network=proxy" ];
|
|
};
|
|
};
|
|
}
|