tv: UNIX domain socket based pulseaudio with XMonad controls
This commit is contained in:
parent
2650803ff6
commit
d0913afc37
@ -10,6 +10,7 @@ with lib;
|
|||||||
#../2configs/consul-client.nix
|
#../2configs/consul-client.nix
|
||||||
../2configs/git.nix
|
../2configs/git.nix
|
||||||
../2configs/mail-client.nix
|
../2configs/mail-client.nix
|
||||||
|
../2configs/pulse.nix
|
||||||
../2configs/xserver
|
../2configs/xserver
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
@ -193,7 +194,6 @@ with lib;
|
|||||||
hardware.bumblebee.group = "video";
|
hardware.bumblebee.group = "video";
|
||||||
hardware.enableAllFirmware = true;
|
hardware.enableAllFirmware = true;
|
||||||
hardware.opengl.driSupport32Bit = true;
|
hardware.opengl.driSupport32Bit = true;
|
||||||
hardware.pulseaudio.enable = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
xlibs.fontschumachermisc
|
xlibs.fontschumachermisc
|
||||||
|
@ -13,6 +13,7 @@ with lib;
|
|||||||
#../2configs/consul-client.nix
|
#../2configs/consul-client.nix
|
||||||
../2configs/git.nix
|
../2configs/git.nix
|
||||||
../2configs/mail-client.nix
|
../2configs/mail-client.nix
|
||||||
|
../2configs/pulse.nix
|
||||||
../2configs/xserver
|
../2configs/xserver
|
||||||
{
|
{
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
@ -195,7 +196,6 @@ with lib;
|
|||||||
#hardware.bumblebee.group = "video";
|
#hardware.bumblebee.group = "video";
|
||||||
hardware.enableAllFirmware = true;
|
hardware.enableAllFirmware = true;
|
||||||
#hardware.opengl.driSupport32Bit = true;
|
#hardware.opengl.driSupport32Bit = true;
|
||||||
hardware.pulseaudio.enable = true;
|
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
#xlibs.fontschumachermisc
|
#xlibs.fontschumachermisc
|
||||||
|
83
tv/2configs/pulse.nix
Normal file
83
tv/2configs/pulse.nix
Normal 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";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -101,6 +101,8 @@ let
|
|||||||
#! ${pkgs.bash}/bin/bash
|
#! ${pkgs.bash}/bin/bash
|
||||||
set -efu
|
set -efu
|
||||||
export PATH; PATH=${makeSearchPath "bin" [
|
export PATH; PATH=${makeSearchPath "bin" [
|
||||||
|
# TODO put paths into a Haskell module instead of PATH
|
||||||
|
pkgs.alsaUtils
|
||||||
pkgs.rxvt_unicode
|
pkgs.rxvt_unicode
|
||||||
]}:/var/setuid-wrappers
|
]}:/var/setuid-wrappers
|
||||||
settle() {(
|
settle() {(
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
|
import Graphics.X11.ExtraTypes.XF86
|
||||||
import Text.Read (readEither)
|
import Text.Read (readEither)
|
||||||
import XMonad
|
import XMonad
|
||||||
import System.IO (hPutStrLn, stderr)
|
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)
|
--, (_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)
|
--, (_4S , xK_v ) & \k -> (k, gridselectWorkspace wsGSConfig { gs_navigate = makeGSNav k } W.shift)
|
||||||
--, (_4 , xK_b ) & \k -> (k, goToSelected wGSConfig { gs_navigate = makeGSNav k })
|
--, (_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
|
where
|
||||||
_4 = mod4Mask
|
_4 = mod4Mask
|
||||||
|
@ -10,6 +10,7 @@ Executable xmonad
|
|||||||
base,
|
base,
|
||||||
containers,
|
containers,
|
||||||
unix,
|
unix,
|
||||||
|
X11,
|
||||||
xmonad,
|
xmonad,
|
||||||
xmonad-contrib,
|
xmonad-contrib,
|
||||||
xmonad-stockholm
|
xmonad-stockholm
|
||||||
|
Loading…
Reference in New Issue
Block a user