{ lib, config, ... }: # configures icecast to only accept source from localhost # to a audio optimized stream on services.icecast.mount # made available via nginx for http access on # https://host/mount let cfg = config.services.icecast; in { options.services.icecast = { mount = lib.mkOption { type = lib.types.str; example = "stream.mp3"; }; fallback = lib.mkOption { type = lib.types.str; example = "fallback.mp3"; }; }; config = lib.mkIf cfg.enable { services.icecast = { listen.address = "127.0.0.1"; listen.port = 8001; admin.password = "hackme"; extraConf = '' hackme
/${cfg.mount} 30 64000 false false /${cfg.fallback} 1 /${cfg.fallback} 30 64000 false false ''; }; services.nginx.virtualHosts.${cfg.hostname} = { enableACME = true; forceSSL = true; locations."/${cfg.mount}" = { proxyPass = "http://localhost:${toString cfg.listen.port}/${cfg.mount}"; extraConfig = '' add_header Access-Control-Allow-Origin *; ''; }; }; }; }