nixpkgs/modules/services/audio/alsa.nix
Eelco Dolstra c55f496c52 * The ALSA job shouldn't be started until udevtrigger has finished.
Otherwise the sound card drivers may not have been loaded yet, and
  restoring the mixer settings will fail.  Also, since the ALSA job
  itself will fail, it won't save the mixer settings on shutdown.

svn path=/nixos/trunk/; revision=23245
2010-08-19 11:55:52 +00:00

85 lines
1.6 KiB
Nix

# ALSA sound support.
{ config, pkgs, ... }:
with pkgs.lib;
let
inherit (pkgs) alsaUtils;
soundState = "/var/lib/alsa/asound.state";
in
{
###### interface
options = {
sound = {
enable = mkOption {
default = true;
description = ''
Whether to enable ALSA sound.
'';
merge = mergeEnableOption;
};
enableOSSEmulation = mkOption {
default = true;
description = ''
Whether to enable ALSA OSS emulation (with certain cards sound mixing may not work!).
'';
};
};
};
###### implementation
config = mkIf config.sound.enable {
environment.systemPackages = [alsaUtils];
users.extraGroups = singleton
{ # Alsalib seems to require the existence of this group, even
# if it's not used (e.g., doesn't own any devices).
name = "audio";
gid = config.ids.gids.audio;
};
jobs.alsa =
{ startOn = "stopped udevtrigger";
preStart =
''
mkdir -m 0755 -p $(dirname ${soundState})
# Load some additional modules.
${optionalString config.sound.enableOSSEmulation
''
for mod in snd_pcm_oss; do
${config.system.sbin.modprobe}/sbin/modprobe $mod || true
done
''
}
# Restore the sound state.
${alsaUtils}/sbin/alsactl -f ${soundState} restore || true
'';
postStop =
''
# Save the sound state.
${alsaUtils}/sbin/alsactl -f ${soundState} store
'';
};
};
}