diff options
author | tv <tv@krebsco.de> | 2015-11-25 01:51:35 +0100 |
---|---|---|
committer | tv <tv@krebsco.de> | 2015-11-25 01:51:35 +0100 |
commit | d0913afc37d7da6c22d97b7da3c687d494567041 (patch) | |
tree | f1cd5e2c7e675a9c5de1346fa7ec3e0f445a561e /tv/2configs/pulse.nix | |
parent | 2650803ff620e35de22ad91226f30d2b4ab9404f (diff) |
tv: UNIX domain socket based pulseaudio with XMonad controls
Diffstat (limited to 'tv/2configs/pulse.nix')
-rw-r--r-- | tv/2configs/pulse.nix | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tv/2configs/pulse.nix b/tv/2configs/pulse.nix new file mode 100644 index 000000000..0ddc52789 --- /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"; + }; + }; +} |