diff --git a/hosts/iron/services/snapcast/snapserver.nix b/hosts/iron/services/snapcast/snapserver.nix index 0d44d04..385c600 100644 --- a/hosts/iron/services/snapcast/snapserver.nix +++ b/hosts/iron/services/snapcast/snapserver.nix @@ -1,46 +1,30 @@ -{ lib, pkgs, config, ... }: +{ pkgs, config, ... }: let inherit (config.networking) ports; interfaces = import ../../interfaces.nix; + cfg = config.services.snapserver; + airplayPort1 = 5000; in { services.snapserver = { enable = true; - port = ports.snapserver.tcp; - tcp.port = ports.snapserverTcp.tcp; - http.port = ports.snapserverHttp.tcp; - streams = { - default = { - type = "meta"; - location = "meta:///hass/bluetooth/airplay/mopidy"; - query = { - chunk_ms = "30"; - buffer = "690"; - codec = "flac"; - }; + settings = { + tcp-streaming.port = ports.snapserver.tcp; + tcp = { + enabled = true; + port = ports.snapserverTcp.tcp; }; - mopidy = { - type = "pipe"; - location = "/run/snapserver/mopidy.fifo"; - }; - hass = { - type = "pipe"; - location = "/run/snapserver/hass.fifo"; - }; - bluetooth = { - location = ""; - type = "alsa"; - query = { - device = "hw:bluetooth,1"; - }; - }; - airplay = { - type = "airplay"; - location = lib.getExe' pkgs.shairport-sync "shairport-sync"; - query = { - devicename = "Snapcast"; - }; + http = { + enabled = true; + port = ports.snapserverHttp.tcp; }; + stream.source = [ + "airplay://${pkgs.shairport-sync}/bin/shairport-sync?name=airplay&devicename=Snapcast&port=${toString airplayPort1}" + #"alsa://?name=bluetooth&device=hw:bluetooth,1" + "pipe:///run/snapserver/hass.fifo?name=hass" + "pipe:///run/snapserver/mopidy.fifo?name=mopidy" + "meta:///hass/airplay/mopidy?name=default&buffer=690&chunk_ms=30&codec=flac" + ]; }; }; @@ -55,10 +39,10 @@ in networking.firewall.interfaces."${interfaces.lan}" = { allowedTCPPorts = [ - config.services.snapserver.http.port - config.services.snapserver.port - config.services.snapserver.tcp.port - 5000 # airplay + cfg.settings.http.port + cfg.settings.tcp.port + cfg.settings.tcp-streaming.port + airplayPort1 ]; allowedUDPPortRanges = [ { from = 6001; to = 6011; } # airplay @@ -67,7 +51,7 @@ in networking.firewall.interfaces.iot = { allowedTCPPorts = [ - config.services.snapserver.port + cfg.settings.stream.port ]; }; }