1 { lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, qt5, cmake
2 , avahi, boost, libopus, libsndfile, protobuf, speex, libcap
11 , iceSupport ? true, zeroc-ice
12 , jackSupport ? false, libjack2
13 , pipewireSupport ? true, pipewire
14 , pulseSupport ? true, libpulseaudio
15 , speechdSupport ? false, speechd-minimal
19 generic = overrides: source: (overrides.stdenv or stdenv).mkDerivation (source // overrides // {
20 pname = overrides.type;
21 version = source.version;
23 nativeBuildInputs = [ cmake pkg-config python3 qt5.wrapQtAppsHook qt5.qttools ]
24 ++ (overrides.nativeBuildInputs or [ ]);
26 buildInputs = [ avahi boost poco protobuf ]
27 ++ (overrides.buildInputs or [ ]);
31 "-D CMAKE_CXX_STANDARD=17" # protobuf >22 requires C++ 17
32 ] ++ (overrides.configureFlags or [ ]);
38 passthru.tests.connectivity = nixosTests.mumble;
41 description = "Low-latency, high quality voice chat software";
42 homepage = "https://mumble.info";
43 license = licenses.bsd3;
44 maintainers = with maintainers; [ felixsinger lilacious ];
45 platforms = platforms.linux;
49 client = source: generic {
52 nativeBuildInputs = [ qt5.qttools ];
53 buildInputs = [ flac libogg libopus libsndfile libvorbis qt5.qtsvg rnnoise speex ]
54 ++ lib.optional (!jackSupport) alsa-lib
55 ++ lib.optional jackSupport libjack2
56 ++ lib.optional speechdSupport speechd-minimal
57 ++ lib.optional pulseSupport libpulseaudio
58 ++ lib.optional pipewireSupport pipewire;
64 "-D bundled-speex=OFF"
65 "-D bundle-qt-translations=OFF"
67 "-D overlay-xcompile=OFF"
69 "-D warnings-as-errors=OFF" # conversion error workaround
70 ] ++ lib.optional (!speechdSupport) "-D speechd=OFF"
71 ++ lib.optional (!pulseSupport) "-D pulseaudio=OFF"
72 ++ lib.optional (!pipewireSupport) "-D pipewire=OFF"
73 ++ lib.optional jackSupport "-D alsa=OFF -D jackaudio=ON";
75 env.NIX_CFLAGS_COMPILE = lib.optionalString speechdSupport "-I${speechd-minimal}/include/speech-dispatcher";
78 wrapProgram $out/bin/mumble \
79 --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath (lib.optional pulseSupport libpulseaudio ++ lib.optional pipewireSupport pipewire)}"
83 server = source: generic {
88 ] ++ lib.optional (!iceSupport) "-D ice=OFF"
89 ++ lib.optionals iceSupport [
90 "-D Ice_HOME=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
91 "-D CMAKE_PREFIX_PATH=${lib.getDev zeroc-ice};${lib.getLib zeroc-ice}"
92 "-D Ice_SLICE_DIR=${lib.getDev zeroc-ice}/share/ice/slice"
95 buildInputs = [ libcap ]
96 ++ lib.optional iceSupport zeroc-ice;
99 overlay = source: generic {
100 stdenv = stdenv_32bit;
101 type = "mumble-overlay";
114 src = fetchFromGitHub {
115 owner = "mumble-voip";
118 hash = "sha256-d9XmXHq264rTT80zphYcKLxS+AyUhjb19D3DuBJvMI4=";
119 fetchSubmodules = true;
124 name = "GCC14.patch";
125 url = "https://github.com/mumble-voip/mumble/commit/56945a9dfb62d29dccfe561572ebf64500deaed1.patch";
126 hash = "sha256-Frct9XJ/ZuHPglx+GB9h3vVycR8YY039dStIbfkPPDk=";
131 mumble = lib.recursiveUpdate (client source) {meta.mainProgram = "mumble";};
132 murmur = lib.recursiveUpdate (server source) {meta.mainProgram = "mumble-server";};
133 overlay = overlay source;