nixos/snapserver: update available stream types for v0.21.0

* Add 'librespot' (new name for 'spotify'), 'alsa', 'tcp'.
* Add a warning about the spotify -> librespot rename.
* Fix the deprecated example `mode = "listen"` for type 'pipe'.
* Update the tests to include a straightforward 'tcp' test.
This commit is contained in:
Alexandre Macabies 2020-09-27 20:49:23 +02:00
parent 5fd8747939
commit a36cc03d96
2 changed files with 25 additions and 4 deletions

View file

@ -198,13 +198,14 @@ in {
type = with types; attrsOf (submodule {
options = {
location = mkOption {
type = types.path;
type = types.oneOf [ types.path types.str ];
description = ''
The location of the pipe.
The location of the pipe, file, Librespot/Airplay/process binary, or a TCP address.
Use an empty string for alsa.
'';
};
type = mkOption {
type = types.enum [ "pipe" "file" "process" "spotify" "airplay" ];
type = types.enum [ "pipe" "librespot" "airplay" "file" "process" "tcp" "alsa" "spotify" ];
default = "pipe";
description = ''
The type of input stream.
@ -219,13 +220,21 @@ in {
example = literalExample ''
# for type == "pipe":
{
mode = "listen";
mode = "create";
};
# for type == "process":
{
params = "--param1 --param2";
logStderr = "true";
};
# for type == "tcp":
{
mode = "client";
}
# for type == "alsa":
{
device = "hw:0,0";
}
'';
};
inherit sampleFormat;
@ -255,6 +264,11 @@ in {
config = mkIf cfg.enable {
# https://github.com/badaix/snapcast/blob/98ac8b2fb7305084376607b59173ce4097c620d8/server/streamreader/stream_manager.cpp#L85
warnings = filter (w: w != "") (mapAttrsToList (k: v: if v.type == "spotify" then ''
services.snapserver.streams.${k}.type = "spotify" is deprecated, use services.snapserver.streams.${k}.type = "librespot" instead.
'' else "") cfg.streams);
systemd.services.snapserver = {
after = [ "network.target" ];
description = "Snapserver";

View file

@ -4,6 +4,7 @@ let
port = 10004;
tcpPort = 10005;
httpPort = 10080;
tcpStreamPort = 10006;
in {
name = "snapcast";
meta = with pkgs.lib.maintainers; {
@ -21,11 +22,16 @@ in {
mpd = {
type = "pipe";
location = "/run/snapserver/mpd";
query.mode = "create";
};
bluetooth = {
type = "pipe";
location = "/run/snapserver/bluetooth";
};
tcp = {
type = "tcp";
location = "127.0.0.1:${toString tcpStreamPort}";
};
};
};
};
@ -42,6 +48,7 @@ in {
server.wait_until_succeeds("ss -ntl | grep -q ${toString port}")
server.wait_until_succeeds("ss -ntl | grep -q ${toString tcpPort}")
server.wait_until_succeeds("ss -ntl | grep -q ${toString httpPort}")
server.wait_until_succeeds("ss -ntl | grep -q ${toString tcpStreamPort}")
with subtest("check that pipes are created"):
server.succeed("test -p /run/snapserver/mpd")