{ config, lib, namespace, ... }: with lib; let inherit (lib.${namespace}) mkOpt; name = "netbootxyz"; cfg = config.${namespace}.services.${name}; netbootxyzConfig = lib.${namespace}.mkModule { inherit config name; description = "netbootxyz"; options = { assetPort = mkOpt types.port 4001 "NGINX server for hosting assets."; tftpPort = mkOpt types.port 69 "HTTPS port for netbootxyz"; }; moduleConfig = { # Open firewall for netbootxyz if enabled networking.firewall = mkIf cfg.openFirewall { allowedTCPPorts = [ cfg.assetPort cfg.tftpPort ]; allowedUDPPorts = [ cfg.assetPort cfg.tftpPort ]; }; virtualisation.oci-containers = { containers.netbootxyz = { autoStart = true; image = "ghcr.io/netbootxyz/netbootxyz:latest"; ports = [ "${toString cfg.port}:3000" "${toString cfg.assetPort}:80" "${toString cfg.tftpPort}:69" ]; volumes = [ "${cfg.configDir}/netbootxyz:/config" "${cfg.dataDir}/isos:/assets" ]; }; }; }; }; in { imports = [ netbootxyzConfig ]; }