{ lib, stdenv, fetchFromGitHub, cmake, pkg-config, fmt, liblo, alsa-lib, freetype, libX11, libXrandr, libXinerama, libXext, libXcursor, # Enabling JACK requires a JACK server at runtime, no fallback mechanism withJack ? false, libjack2, type ? "ADL", }: assert lib.assertOneOf "type" type [ "ADL" "OPN" ]; let chip = { ADL = "OPL3"; OPN = "OPN2"; } .${type}; mainProgram = "${type}plug"; in stdenv.mkDerivation { pname = "${lib.strings.toLower type}plug"; version = "unstable-2021-12-17"; src = fetchFromGitHub { owner = "jpcima"; repo = "ADLplug"; rev = "a488abedf1783c61cb4f0caa689f1b01bf9aa17d"; fetchSubmodules = true; sha256 = "1a5zw0rglqgc5wq1n0s5bxx7y59dsg6qy02236fakl34bvbk60yz"; }; cmakeFlags = [ (lib.cmakeFeature "ADLplug_CHIP" chip) (lib.cmakeBool "ADLplug_USE_SYSTEM_FMT" true) (lib.cmakeBool "ADLplug_Jack" withJack) ]; NIX_LDFLAGS = toString ( lib.optionals stdenv.hostPlatform.isDarwin [ # Framework that JUCE needs which don't get linked properly "-framework CoreAudioKit" "-framework QuartzCore" "-framework AudioToolbox" ] ++ lib.optionals stdenv.hostPlatform.isLinux [ # JUCE dlopen's these at runtime "-lX11" "-lXext" "-lXcursor" "-lXinerama" "-lXrandr" ] ); nativeBuildInputs = [ cmake pkg-config ]; buildInputs = [ fmt liblo ] ++ lib.optionals stdenv.hostPlatform.isLinux [ alsa-lib freetype libX11 libXrandr libXinerama libXext libXcursor ] ++ lib.optionals withJack [ libjack2 ]; postInstall = lib.optionalString stdenv.hostPlatform.isDarwin '' mkdir -p $out/{Applications,Library/Audio/Plug-Ins/{VST,Components}} mv $out/bin/${mainProgram}.app $out/Applications/ ln -s $out/{Applications/${mainProgram}.app/Contents/MacOS,bin}/${mainProgram} mv vst2/${mainProgram}.vst $out/Library/Audio/Plug-Ins/VST/ mv au/${mainProgram}.component $out/Library/Audio/Plug-Ins/Components/ ''; meta = { inherit mainProgram; description = "${chip} FM Chip Synthesizer"; homepage = "https://github.com/jpcima/ADLplug"; license = lib.licenses.boost; platforms = lib.platforms.all; maintainers = with lib.maintainers; [ OPNA2608 ]; }; }