From d0913afc37d7da6c22d97b7da3c687d494567041 Mon Sep 17 00:00:00 2001 From: tv Date: Wed, 25 Nov 2015 01:51:35 +0100 Subject: tv: UNIX domain socket based pulseaudio with XMonad controls --- tv/2configs/pulse.nix | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 tv/2configs/pulse.nix (limited to 'tv/2configs/pulse.nix') diff --git a/tv/2configs/pulse.nix b/tv/2configs/pulse.nix new file mode 100644 index 00000000..0ddc5278 --- /dev/null +++ b/tv/2configs/pulse.nix @@ -0,0 +1,83 @@ +{ config, lib, pkgs, ... }: + +let + pkg = pkgs.pulseaudioLight; + runDir = "/run/pulse"; + + alsaConf = pkgs.writeText "asound.conf" '' + ctl_type.pulse { + libs.native = ${pkgs.alsaPlugins}/lib/alsa-lib/libasound_module_ctl_pulse.so; + } + pcm_type.pulse { + libs.native = ${pkgs.alsaPlugins}/lib/alsa-lib/libasound_module_pcm_pulse.so; + } + ctl.!default { + type pulse + } + pcm.!default { + type pulse + } + ''; + + clientConf = pkgs.writeText "client.conf" '' + autospawn=no + default-server = unix:${runDir}/socket + ''; + + configFile = pkgs.writeText "default.pa" '' + .include ${pkg}/etc/pulse/default.pa + load-module ${toString [ + "module-native-protocol-unix" + "auth-anonymous=1" + "socket=${runDir}/socket" + ]} + ''; +in + +{ + systemd.tmpfiles.rules = [ + "d ${runDir} 0750 pulse pulse - -" + "d ${runDir}/home 0700 pulse pulse - -" + ]; + + system.activationScripts.pulseaudio-hack = '' + ln -fns ${clientConf} /etc/pulse/client.conf + ''; + + environment = { + etc = { + "asound.conf".source = alsaConf; + #"pulse/client.conf" = lib.mkForce { source = clientConf; }; + "pulse/default.pa".source = configFile; + }; + systemPackages = [ pkg ]; + }; + + # Allow PulseAudio to get realtime priority using rtkit. + security.rtkit.enable = true; + + systemd.services.pulse = { + wantedBy = [ "sound.target" ]; + before = [ "sound.target" ]; + environment = { + PULSE_RUNTIME_PATH = "${runDir}/home"; + #DISPLAY = ":${toString config.services.xserver.display}"; + }; + serviceConfig = { + ExecStart = "${pkg}/bin/pulseaudio"; + User = "pulse"; + }; + }; + + users = let + id = 3768151709; # genid pulse + in { + groups.pulse.gid = id; + users.pulse = { + uid = id; + group = "pulse"; + extraGroups = [ "audio" ]; + home = "${runDir}/home"; + }; + }; +} -- cgit v1.2.3