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 | f6cca2cdd06d5d65fdb4b08bfceff7a36403f678 (patch) | |
tree | 941546c6c5eb2dc46fa79433cb6990b142df93f1 /tv/2configs | |
parent | 3bc83b484ca797c48007fa37d5598f3c59c7da19 (diff) |
tv: UNIX domain socket based pulseaudio with XMonad controls
Diffstat (limited to 'tv/2configs')
-rw-r--r-- | tv/2configs/pulse.nix | 83 | ||||
-rw-r--r-- | tv/2configs/xserver/default.nix | 2 |
2 files changed, 85 insertions, 0 deletions
diff --git a/tv/2configs/pulse.nix b/tv/2configs/pulse.nix new file mode 100644 index 0000000..0ddc527 --- /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"; + }; + }; +} diff --git a/tv/2configs/xserver/default.nix b/tv/2configs/xserver/default.nix index afc2d69..f56da7d 100644 --- a/tv/2configs/xserver/default.nix +++ b/tv/2configs/xserver/default.nix @@ -101,6 +101,8 @@ let #! ${pkgs.bash}/bin/bash set -efu export PATH; PATH=${makeSearchPath "bin" [ + # TODO put paths into a Haskell module instead of PATH + pkgs.alsaUtils pkgs.rxvt_unicode ]}:/var/setuid-wrappers settle() {( |