diff --git a/modules/features/mumble/default.nix b/modules/features/mumble/default.nix new file mode 100644 index 0000000..bdb8d1f --- /dev/null +++ b/modules/features/mumble/default.nix @@ -0,0 +1,75 @@ +{ + self, + inputs, + ... +}: { + flake.nixosModules.mumble = { + pkgs, + lib, + ... + }: let + modules = with self.nixosModules; [ + audio + ]; + in { + imports = modules; + services.murmur = { + enable = true; + bandwidth = 540000; + bonjour = true; + password = "password"; + autobanTime = 0; + }; + + environment.systemPackages = with pkgs; [ + mumble + ]; + + services.pipewire.extraConfig.pipewire = { + "97-null-sink" = { + "context.objects" = [ + { + factory = "adapter"; + args = { + "factory.name" = "support.null-audio-sink"; + "node.name" = "Null-Sink"; + "node.description" = "Null Sink"; + "media.class" = "Audio/Sink"; + "audio.position" = "FL,FR"; + }; + } + { + factory = "adapter"; + args = { + "factory.name" = "support.null-audio-sink"; + "node.name" = "Null-Source"; + "node.description" = "Null Source"; + "media.class" = "Audio/Source"; + "audio.position" = "FL,FR"; + }; + } + ]; + }; + "98-virtual-mic" = { + "context.modules" = [ + { + name = "libpipewire-module-loopback"; + args = { + "audio.position" = "FL,FR"; + "node.description" = "Mumble as Microphone"; + "capture.props" = { + # Mumble's output node name. + "node.target" = "Mumble"; + "node.passive" = true; + }; + "playback.props" = { + "node.name" = "Virtual-Mumble-Microphone"; + "media.class" = "Audio/Source"; + }; + }; + } + ]; + }; + }; + }; +}