Merge pull request #98962 from Zopieux/snapcast-fixes

Snapcast: v0.20.0 → v0.23.0, including various fixes to nixos/snapserver

Changed files
+30 -9
nixos
modules
services
tests
pkgs
applications
audio
snapcast
+19 -5
nixos/modules/services/audio/snapserver.nix
···
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.
···
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;
···
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";
···
ProtectKernelTunables = true;
ProtectControlGroups = true;
ProtectKernelModules = true;
-
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX";
+
RestrictAddressFamilies = "AF_INET AF_INET6 AF_UNIX AF_NETLINK";
RestrictNamespaces = true;
RuntimeDirectory = name;
StateDirectory = name;
+7
nixos/tests/snapcast.nix
···
port = 10004;
tcpPort = 10005;
httpPort = 10080;
+
tcpStreamPort = 10006;
in {
name = "snapcast";
meta = with pkgs.lib.maintainers; {
···
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}";
+
};
};
};
};
···
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")
+4 -4
pkgs/applications/audio/snapcast/default.nix
···
aixlog = dependency {
name = "aixlog";
-
version = "1.2.1";
-
sha256 = "1rh4jib5g41b85bqrxkl5g74hk5ryf187y9fw0am76g59xlymfpr";
+
version = "1.4.0";
+
sha256 = "0f2bs5j1jjajcpa251dslnwkgglaam3b0cm6wdx5l7mbwvnmib2g";
};
popl = dependency {
···
stdenv.mkDerivation rec {
pname = "snapcast";
-
version = "0.20.0";
+
version = "0.23.0";
src = fetchFromGitHub {
owner = "badaix";
repo = "snapcast";
rev = "v${version}";
-
sha256 = "152ic8hlyawcmj9pykb33xc6yx7il6yb9ilmsy6m9nlh40m8yxls";
+
sha256 = "0183hhghzn0fhw2qzc1s009q7miabpcf0pxaqjdscsl8iivxqknd";
};
nativeBuildInputs = [ cmake pkg-config boost170.dev ];