# -------------------------------------------------- # How to use? # * start the icecast # * connect via mixxx to it. # * add the podcast to mpd in the same network # -------------------------------------------------- { pkgs, config, lib, ... }: with lib; let # todo : make option user = "username"; password = "password"; mountPoint = "/radio.mp3"; maxListeners = 20; in { options.components.media.icecast.enable = mkOption { type = lib.types.bool; #default = config.components.media.enable; default = false; }; config = mkIf (config.components.media.icecast.enable) { services.icecast = { enable = true; hostname = config.networking.hostName; admin = { user = "palo"; password = "palo"; }; # http://icecast.org/docs/icecast-2.4.1/config-file.html extraConf = '' <mount type="normal"> <mount-name>${mountPoint}</mount-name> <username>${user}</username> <password>${password}</password> <max-listeners>${toString maxListeners}</max-listeners> <max-listener-duration>3600</max-listener-duration> <charset>UTF8</charset> <public>1</public> <stream-name>Palos Awesome Stream</stream-name> <stream-description>Kick ass Tracks</stream-description> <stream-url>https://ingolf-wagner.de</stream-url> <genre>classical</genre> <bitrate>320</bitrate> <type>application/ogg</type> <subtype>vorbis</subtype> <hidden>1</hidden> <burst-size>65536</burst-size> <mp3-metadata-interval>4096</mp3-metadata-interval> </mount> ''; }; # use port which I can see in iptable -L -v -n networking.firewall = { allowedTCPPorts = [ config.services.icecast.listen.port ]; allowedUDPPorts = [ config.services.icecast.listen.port ]; }; # don't want to have the service running all the time # --------------------------------------------------- systemd.services.icecast.wantedBy = lib.mkForce [ ]; systemd.services.icecast.after = lib.mkForce [ ]; }; }