{ lib, stdenv, directoryListingUpdater, fetchurl, alsa-lib, alsa-plugins, gettext, makeWrapper, ncurses, libsamplerate, pciutils, procps, which, fftw, pipewire, withPipewireLib ? true, symlinkJoin, }: let plugin-packages = [ alsa-plugins ] ++ lib.optional withPipewireLib pipewire; # Create a directory containing symlinks of all ALSA plugins. # This is necessary because ALSA_PLUGIN_DIR must reference only one directory. plugin-dir = symlinkJoin { name = "all-plugins"; paths = map (path: "${path}/lib/alsa-lib") plugin-packages; }; in stdenv.mkDerivation rec { pname = "alsa-utils"; version = "1.2.12"; src = fetchurl { url = "mirror://alsa/utils/alsa-utils-${version}.tar.bz2"; hash = "sha256-mLxmd9DAB0AGZ5BRgiMkoKsIea6lWKj2i1EXgNMM2SQ="; }; nativeBuildInputs = [ gettext makeWrapper ]; buildInputs = [ alsa-lib ncurses libsamplerate fftw ]; configureFlags = [ "--disable-xmlto" "--with-udev-rules-dir=$(out)/lib/udev/rules.d" ]; installFlags = [ "ASOUND_STATE_DIR=$(TMPDIR)/dummy" ]; postFixup = '' mv $out/bin/alsa-info.sh $out/bin/alsa-info wrapProgram $out/bin/alsa-info --prefix PATH : "${ lib.makeBinPath [ which pciutils procps ] }" wrapProgram $out/bin/aplay --set-default ALSA_PLUGIN_DIR ${plugin-dir} ''; passthru.updateScript = directoryListingUpdater { url = "https://www.alsa-project.org/files/pub/utils/"; }; meta = with lib; { homepage = "http://www.alsa-project.org/"; description = "ALSA, the Advanced Linux Sound Architecture utils"; longDescription = '' The Advanced Linux Sound Architecture (ALSA) provides audio and MIDI functionality to the Linux-based operating system. ''; license = licenses.gpl2; platforms = platforms.linux; maintainers = [ ]; }; }