71 lines
1.7 KiB
Nix
71 lines
1.7 KiB
Nix
{ config, lib, ... }:
|
|
|
|
let
|
|
cfg = config.homelab.apps.homepage;
|
|
|
|
PUID = toString config.users.users.homepage.uid;
|
|
PGID = toString config.users.groups.apps.gid;
|
|
|
|
homepage-config = "/srv/homepage-config";
|
|
|
|
proxyNet = config.homelab.apps.traefik.sharedNetworkName;
|
|
in {
|
|
options.homelab.apps.homepage = {
|
|
enable = lib.mkEnableOption "homepage";
|
|
port = lib.mkOption {
|
|
type = lib.types.int;
|
|
default = 3000;
|
|
description = "homepage WebUI port";
|
|
};
|
|
exposePort = lib.mkEnableOption "expose homepage port";
|
|
};
|
|
|
|
config = lib.mkIf cfg.enable {
|
|
homelab = {
|
|
users.apps.enable = true;
|
|
virtualisation.containers.enable = true;
|
|
};
|
|
|
|
homelab.appUsers.homepage = {
|
|
uid = 3018;
|
|
};
|
|
|
|
homelab.nfsMounts."${homepage-config}" = {
|
|
device = "192.168.0.11:/mnt/SMALL/CONFIG/HOMEPAGE";
|
|
extraOptions = [
|
|
"auto"
|
|
];
|
|
};
|
|
|
|
homelab.traefikRouters.homepage = let
|
|
host = "homepage.${config.networking.domain}";
|
|
in {
|
|
rule = "Host(`${host}`)";
|
|
port = cfg.port;
|
|
};
|
|
|
|
virtualisation.oci-containers.containers.homepage = let
|
|
host = "homepage.${config.networking.domain}";
|
|
in {
|
|
hostname = "homepage";
|
|
image = "ghcr.io/gethomepage/homepage:v1.10.1";
|
|
autoStart = true;
|
|
user = "${toString PUID}:${toString PGID}";
|
|
ports = lib.mkIf cfg.exposePort [
|
|
"${toString cfg.port}:3000/tcp"
|
|
];
|
|
networks = [
|
|
proxyNet
|
|
];
|
|
volumes = [
|
|
"${homepage-config}:/app/config"
|
|
# "/var/run/docker.sock:/var/run/docker.sock:ro" # For docker integrations
|
|
];
|
|
environment = {
|
|
inherit PUID PGID;
|
|
|
|
HOMEPAGE_ALLOWED_HOSTS = "${host},192.168.0.91:3000";
|
|
};
|
|
};
|
|
};
|
|
}
|