tv: UNIX domain socket based pulseaudio with XMonad controls

This commit is contained in:
tv 2015-11-25 01:51:35 +01:00
parent 2650803ff6
commit d0913afc37
6 changed files with 92 additions and 2 deletions

View File

@ -10,6 +10,7 @@ with lib;
#../2configs/consul-client.nix
../2configs/git.nix
../2configs/mail-client.nix
../2configs/pulse.nix
../2configs/xserver
{
environment.systemPackages = with pkgs; [
@ -193,7 +194,6 @@ with lib;
hardware.bumblebee.group = "video";
hardware.enableAllFirmware = true;
hardware.opengl.driSupport32Bit = true;
hardware.pulseaudio.enable = true;
environment.systemPackages = with pkgs; [
xlibs.fontschumachermisc

View File

@ -13,6 +13,7 @@ with lib;
#../2configs/consul-client.nix
../2configs/git.nix
../2configs/mail-client.nix
../2configs/pulse.nix
../2configs/xserver
{
environment.systemPackages = with pkgs; [
@ -195,7 +196,6 @@ with lib;
#hardware.bumblebee.group = "video";
hardware.enableAllFirmware = true;
#hardware.opengl.driSupport32Bit = true;
hardware.pulseaudio.enable = true;
environment.systemPackages = with pkgs; [
#xlibs.fontschumachermisc

83
tv/2configs/pulse.nix Normal file
View File

@ -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";
};
};
}

View File

@ -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() {(

View File

@ -7,6 +7,7 @@
module Main where
import Control.Exception
import Graphics.X11.ExtraTypes.XF86
import Text.Read (readEither)
import XMonad
import System.IO (hPutStrLn, stderr)
@ -187,6 +188,9 @@ myKeys conf = Map.fromList $
--, (_4 , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.view)
--, (_4S , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift)
--, (_4 , xK_b ) & \k -> (k, goToSelected wGSConfig { gs_navigate = makeGSNav k })
, ((noModMask, xF86XK_AudioLowerVolume), spawn "amixer sset Master 5%-")
, ((noModMask, xF86XK_AudioRaiseVolume), spawn "amixer sset Master 5%+")
, ((noModMask, xF86XK_AudioMute), spawn "amixer sset Master toggle")
]
where
_4 = mod4Mask

View File

@ -10,6 +10,7 @@ Executable xmonad
base,
containers,
unix,
X11,
xmonad,
xmonad-contrib,
xmonad-stockholm