From 154d9a8d8ad9a95c6a1e9d78569f7957bfcedf09 Mon Sep 17 00:00:00 2001 From: Lily Foster Date: Fri, 25 Feb 2022 10:49:16 -0500 Subject: [PATCH 1/5] maintainers: add lilyinstarlight --- maintainers/maintainer-list.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 287a20b2f048..4fb243f8e202 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -7184,6 +7184,13 @@ githubId = 714; name = "Lily Ballard"; }; + lilyinstarlight = { + email = "lily@lily.flowers"; + matrix = "@lily:lily.flowers"; + github = "lilyinstarlight"; + githubId = 298109; + name = "Lily Foster"; + }; limeytexan = { email = "limeytexan@gmail.com"; github = "limeytexan"; From 09f63fb46c65db37881d32afeb2913a6ce41b9b6 Mon Sep 17 00:00:00 2001 From: Lily Foster Date: Fri, 25 Feb 2022 10:49:16 -0500 Subject: [PATCH 2/5] supercollider: change maintainer to lilyinstarlight --- pkgs/development/interpreters/supercollider/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/development/interpreters/supercollider/default.nix b/pkgs/development/interpreters/supercollider/default.nix index 2a0ef3b0957c..b3eaf5839b15 100644 --- a/pkgs/development/interpreters/supercollider/default.nix +++ b/pkgs/development/interpreters/supercollider/default.nix @@ -33,7 +33,7 @@ mkDerivation rec { meta = with lib; { description = "Programming language for real time audio synthesis"; homepage = "https://supercollider.github.io"; - maintainers = with maintainers; [ mrmebelman ]; + maintainers = with maintainers; [ lilyinstarlight ]; license = licenses.gpl3Plus; platforms = platforms.linux; }; From 089f8b107ba9b3810905e54a6efaffbed0e4e38f Mon Sep 17 00:00:00 2001 From: Lily Foster Date: Fri, 25 Feb 2022 10:49:16 -0500 Subject: [PATCH 3/5] supercollider: add plugin support --- .../interpreters/supercollider/default.nix | 27 ++++---- .../supercollider-3.12.0-env-dirs.patch | 65 +++++++++++++++++++ .../interpreters/supercollider/wrapper.nix | 18 +++++ pkgs/top-level/all-packages.nix | 4 ++ 4 files changed, 101 insertions(+), 13 deletions(-) create mode 100644 pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch create mode 100644 pkgs/development/interpreters/supercollider/wrapper.nix diff --git a/pkgs/development/interpreters/supercollider/default.nix b/pkgs/development/interpreters/supercollider/default.nix index b3eaf5839b15..59c035dd135c 100644 --- a/pkgs/development/interpreters/supercollider/default.nix +++ b/pkgs/development/interpreters/supercollider/default.nix @@ -1,12 +1,9 @@ -{ lib, stdenv, mkDerivation, fetchurl, cmake, pkg-config, alsa-lib -, libjack2, libsndfile, fftw, curl, gcc -, libXt, qtbase, qttools, qtwebengine +{ lib, stdenv, mkDerivation, fetchurl, cmake +, pkg-config, alsa-lib, libjack2, libsndfile, fftw +, curl, gcc, libXt, qtbase, qttools, qtwebengine , readline, qtwebsockets, useSCEL ? false, emacs }: -let - inherit (lib) optional; -in mkDerivation rec { pname = "supercollider"; version = "3.12.2"; @@ -16,6 +13,17 @@ mkDerivation rec { sha256 = "sha256-1QYorCgSwBK+SVAm4k7HZirr1j+znPmVicFmJdvO3g4="; }; + patches = [ + # add support for SC_DATA_DIR and SC_PLUGIN_DIR env vars to override compile-time values + ./supercollider-3.12.0-env-dirs.patch + ]; + + nativeBuildInputs = [ cmake pkg-config qttools ]; + + buildInputs = [ gcc libjack2 libsndfile fftw curl libXt qtbase qtwebengine qtwebsockets readline ] + ++ lib.optional (!stdenv.isDarwin) alsa-lib + ++ lib.optional useSCEL emacs; + hardeningDisable = [ "stackprotector" ]; cmakeFlags = [ @@ -23,13 +31,6 @@ mkDerivation rec { "-DSC_EL=${if useSCEL then "ON" else "OFF"}" ]; - nativeBuildInputs = [ cmake pkg-config qttools ]; - - buildInputs = [ - gcc libjack2 libsndfile fftw curl libXt qtbase qtwebengine qtwebsockets readline ] - ++ optional (!stdenv.isDarwin) alsa-lib - ++ optional useSCEL emacs; - meta = with lib; { description = "Programming language for real time audio synthesis"; homepage = "https://supercollider.github.io"; diff --git a/pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch b/pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch new file mode 100644 index 000000000000..dd92028b5225 --- /dev/null +++ b/pkgs/development/interpreters/supercollider/supercollider-3.12.0-env-dirs.patch @@ -0,0 +1,65 @@ +diff --git a/common/SC_Filesystem_unix.cpp b/common/SC_Filesystem_unix.cpp +index 52dc1fd2d..aae09ed9c 100644 +--- a/common/SC_Filesystem_unix.cpp ++++ b/common/SC_Filesystem_unix.cpp +@@ -94,6 +94,10 @@ bool SC_Filesystem::isNonHostPlatformDirectoryName(const std::string& s) { + } + + Path SC_Filesystem::defaultSystemAppSupportDirectory() { ++ const char* sc_data_dir = getenv("SC_DATA_DIR"); ++ if (sc_data_dir) ++ return Path(sc_data_dir); ++ + # ifdef SC_DATA_DIR + return Path(SC_DATA_DIR); + # else +@@ -125,6 +129,10 @@ Path SC_Filesystem::defaultUserConfigDirectory() { + } + + Path SC_Filesystem::defaultResourceDirectory() { ++ const char* sc_data_dir = getenv("SC_DATA_DIR"); ++ if (sc_data_dir) ++ return Path(sc_data_dir); ++ + # ifdef SC_DATA_DIR + return Path(SC_DATA_DIR); + # else +diff --git a/server/scsynth/SC_Lib_Cintf.cpp b/server/scsynth/SC_Lib_Cintf.cpp +index f6219307e..28e13eb98 100644 +--- a/server/scsynth/SC_Lib_Cintf.cpp ++++ b/server/scsynth/SC_Lib_Cintf.cpp +@@ -178,9 +178,13 @@ void initialize_library(const char* uGensPluginPath) { + using DirName = SC_Filesystem::DirName; + + if (loadUGensExtDirs) { ++ const char* sc_plugin_dir = getenv("SC_PLUGIN_DIR"); ++ if (sc_plugin_dir) { ++ PlugIn_LoadDir(sc_plugin_dir, true); ++ } + #ifdef SC_PLUGIN_DIR + // load globally installed plugins +- if (bfs::is_directory(SC_PLUGIN_DIR)) { ++ else if (bfs::is_directory(SC_PLUGIN_DIR)) { + PlugIn_LoadDir(SC_PLUGIN_DIR, true); + } + #endif // SC_PLUGIN_DIR +diff --git a/server/supernova/server/main.cpp b/server/supernova/server/main.cpp +index b2b5adf4e..6cb8c411c 100644 +--- a/server/supernova/server/main.cpp ++++ b/server/supernova/server/main.cpp +@@ -224,8 +224,14 @@ void set_plugin_paths(server_arguments const& args, nova::sc_ugen_factory* facto + } + } + } else { ++ const char* sc_plugin_dir = getenv("SC_PLUGIN_DIR"); ++ if (sc_plugin_dir) { ++ factory->load_plugin_folder(sc_plugin_dir); ++ } + #ifdef SC_PLUGIN_DIR +- factory->load_plugin_folder(SC_PLUGIN_DIR); ++ else { ++ factory->load_plugin_folder(SC_PLUGIN_DIR); ++ } + #endif + factory->load_plugin_folder(SC_Filesystem::instance().getDirectory(DirName::Resource) / SC_PLUGIN_DIR_NAME); + factory->load_plugin_folder(SC_Filesystem::instance().getDirectory(DirName::SystemExtension)); diff --git a/pkgs/development/interpreters/supercollider/wrapper.nix b/pkgs/development/interpreters/supercollider/wrapper.nix new file mode 100644 index 000000000000..e9e97f2b98de --- /dev/null +++ b/pkgs/development/interpreters/supercollider/wrapper.nix @@ -0,0 +1,18 @@ +{ symlinkJoin, makeWrapper, supercollider, plugins }: + +symlinkJoin { + name = "supercollider-with-plugins-${supercollider.version}"; + paths = [ supercollider ] ++ plugins; + + nativeBuildInputs = [ makeWrapper ]; + + postBuild = '' + for exe in $out/bin/*; do + wrapProgram $exe \ + --set SC_PLUGIN_DIR "$out/lib/SuperCollider/plugins" \ + --set SC_DATA_DIR "$out/share/SuperCollider" + done + ''; + + inherit (supercollider) pname version meta; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5f4fc54285df..5b7c86b75531 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14432,6 +14432,10 @@ with pkgs; supercollider_scel = supercollider.override { useSCEL = true; }; + supercollider-with-plugins = callPackage ../development/interpreters/supercollider/wrapper.nix { + plugins = []; + }; + taktuk = callPackage ../applications/networking/cluster/taktuk { }; tcl = tcl-8_6; From 591754016f8733a6d860982faddbaeb5650882fd Mon Sep 17 00:00:00 2001 From: Lily Foster Date: Fri, 25 Feb 2022 10:49:16 -0500 Subject: [PATCH 4/5] supercolliderPlugins.sc3-plugins: init at 3.11.1 --- .../supercollider/plugins/sc3-plugins.nix | 33 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 10 ++++++ 2 files changed, 43 insertions(+) create mode 100644 pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix diff --git a/pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix b/pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix new file mode 100644 index 000000000000..a596d6d770ae --- /dev/null +++ b/pkgs/development/interpreters/supercollider/plugins/sc3-plugins.nix @@ -0,0 +1,33 @@ +{ stdenv, lib, fetchurl, cmake, supercollider, fftw }: + +stdenv.mkDerivation rec { + pname = "sc3-plugins"; + version = "3.11.1"; + + src = fetchurl { + url = "https://github.com/supercollider/sc3-plugins/releases/download/Version-${version}/sc3-plugins-${version}-Source.tar.bz2"; + sha256 = "sha256-JjUmu7PJ+x3yRibr+Av2gTREng51fPo7Rk+B4y2JvkQ="; + }; + + nativeBuildInputs = [ cmake ]; + + buildInputs = [ + supercollider + fftw + ]; + + cmakeFlags = [ + "-DSC_PATH=${supercollider}/include/SuperCollider" + "-DSUPERNOVA=ON" + ]; + + stripDebugList = [ "lib" "share" ]; + + meta = with lib; { + description = "Community plugins for SuperCollider"; + homepage = "https://supercollider.github.io/sc3-plugins/"; + maintainers = with maintainers; [ lilyinstarlight ]; + license = licenses.gpl2Plus; + platforms = platforms.linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5b7c86b75531..bb8a02945a03 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14432,10 +14432,20 @@ with pkgs; supercollider_scel = supercollider.override { useSCEL = true; }; + supercolliderPlugins = recurseIntoAttrs { + sc3-plugins = callPackage ../development/interpreters/supercollider/plugins/sc3-plugins.nix { + fftw = fftwSinglePrec; + }; + }; + supercollider-with-plugins = callPackage ../development/interpreters/supercollider/wrapper.nix { plugins = []; }; + supercollider-with-sc3-plugins = supercollider-with-plugins.override { + plugins = with supercolliderPlugins; [ sc3-plugins ]; + }; + taktuk = callPackage ../applications/networking/cluster/taktuk { }; tcl = tcl-8_6; From 2b7ebac344bc92a6ef43bd543eb104ac08610819 Mon Sep 17 00:00:00 2001 From: Lily Foster Date: Mon, 18 Apr 2022 06:20:02 -0400 Subject: [PATCH 5/5] supercollider: add sc3-plugins test --- .../interpreters/supercollider/default.nix | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/pkgs/development/interpreters/supercollider/default.nix b/pkgs/development/interpreters/supercollider/default.nix index 59c035dd135c..0446e5d540c1 100644 --- a/pkgs/development/interpreters/supercollider/default.nix +++ b/pkgs/development/interpreters/supercollider/default.nix @@ -2,6 +2,8 @@ , pkg-config, alsa-lib, libjack2, libsndfile, fftw , curl, gcc, libXt, qtbase, qttools, qtwebengine , readline, qtwebsockets, useSCEL ? false, emacs +, supercollider-with-plugins, supercolliderPlugins +, writeText, runCommand }: mkDerivation rec { @@ -31,6 +33,26 @@ mkDerivation rec { "-DSC_EL=${if useSCEL then "ON" else "OFF"}" ]; + passthru.tests = { + # test to make sure sclang runs and included plugins are successfully found + sclang-sc3-plugins = let + supercollider-with-test-plugins = supercollider-with-plugins.override { + plugins = with supercolliderPlugins; [ sc3-plugins ]; + }; + testsc = writeText "test.sc" '' + var err = 0; + try { + MdaPiano.name.postln; + } { + err = 1; + }; + err.exit; + ''; + in runCommand "sclang-sc3-plugins-test" {} '' + timeout 60s env XDG_CONFIG_HOME="$(mktemp -d)" QT_QPA_PLATFORM=minimal ${supercollider-with-test-plugins}/bin/sclang ${testsc} >$out + ''; + }; + meta = with lib; { description = "Programming language for real time audio synthesis"; homepage = "https://supercollider.github.io";