diff options
author | Alyssa Ross <hi@alyssa.is> | 2022-12-06 19:57:55 +0000 |
---|---|---|
committer | Alyssa Ross <hi@alyssa.is> | 2023-02-08 13:48:30 +0000 |
commit | bf3aadfdd39aa197e18bade671fab6726349ffa4 (patch) | |
tree | 698567af766ed441d757b57a7b21e68d4a342a2b /nixpkgs/pkgs/tools/audio | |
parent | f4afc5a01d9539ce09e47494e679c51f80723d07 (diff) | |
parent | 99665eb45f58d959d2cb9e49ddb960c79d596f33 (diff) | |
download | nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.gz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.bz2 nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.lz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.xz nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.tar.zst nixlib-bf3aadfdd39aa197e18bade671fab6726349ffa4.zip |
Merge commit '99665eb45f58d959d2cb9e49ddb960c79d596f33'
Diffstat (limited to 'nixpkgs/pkgs/tools/audio')
40 files changed, 1023 insertions, 583 deletions
diff --git a/nixpkgs/pkgs/tools/audio/abcmidi/default.nix b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix index 17f4d8848481..b5b484159c36 100644 --- a/nixpkgs/pkgs/tools/audio/abcmidi/default.nix +++ b/nixpkgs/pkgs/tools/audio/abcmidi/default.nix @@ -2,11 +2,11 @@ stdenv.mkDerivation rec { pname = "abcMIDI"; - version = "2022.02.21"; + version = "2022.08.01"; src = fetchzip { url = "https://ifdo.ca/~seymour/runabc/${pname}-${version}.zip"; - hash = "sha256-oGGtJhVugqTvXD34Q2f8L5qoYoyyT5JjuBhqh4VYAAo="; + hash = "sha256-qFk/Rij7P17ZlJFjsrW8snp2anCGjqxfytzopIyHLL0="; }; meta = with lib; { diff --git a/nixpkgs/pkgs/tools/audio/asap/default.nix b/nixpkgs/pkgs/tools/audio/asap/default.nix new file mode 100644 index 000000000000..5ce3a80bd737 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/asap/default.nix @@ -0,0 +1,53 @@ +{ stdenv +, lib +, fetchzip +, SDL +}: + +stdenv.mkDerivation rec { + pname = "asap"; + version = "5.2.0"; + + src = fetchzip { + url = "mirror://sourceforge/project/asap/asap/${version}/asap-${version}.tar.gz"; + sha256 = "1riwfds5ipgh19i3ibsyqhxlh70xix9452y4wqih9xdkixmxqbqm"; + }; + + outputs = [ "out" "dev" ]; + + buildInputs = [ + SDL + ]; + + enableParallelBuilding = true; + + buildFlags = [ + "CC=${stdenv.cc.targetPrefix}cc" + # Only targets that don't need cito transpiler + "asapconv" + "asap-sdl" + "lib" + ]; + + installFlags = [ + "prefix=${placeholder "dev"}" + "bindir=${placeholder "out"}/bin" + "install-asapconv" + "install-sdl" + "install-lib" + ]; + + meta = with lib; { + homepage = "http://asap.sourceforge.net/"; + mainProgram = "asap-sdl"; + description = "Another Slight Atari Player"; + longDescription = '' + ASAP (Another Slight Atari Player) plays and converts 8-bit Atari POKEY + music (*.sap, *.cmc, *.mpt, *.rmt, *.tmc, ...) on modern computers and + mobile devices. + ''; + maintainers = with maintainers; [ OPNA2608 ]; + license = licenses.gpl2Plus; + platforms = platforms.all; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch b/nixpkgs/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch deleted file mode 100644 index 6956183344c4..000000000000 --- a/nixpkgs/pkgs/tools/audio/beets/badfiles-plugin-nix-paths.patch +++ /dev/null @@ -1,21 +0,0 @@ -diff --git i/beetsplug/badfiles.py w/beetsplug/badfiles.py -index 36b45de3..5208b696 100644 ---- i/beetsplug/badfiles.py -+++ w/beetsplug/badfiles.py -@@ -71,14 +71,14 @@ class BadFiles(BeetsPlugin): - return status, errors, [line for line in output.split("\n") if line] - - def check_mp3val(self, path): -- status, errors, output = self.run_command(["mp3val", path]) -+ status, errors, output = self.run_command(["@mp3val@/bin/mp3val", path]) - if status == 0: - output = [line for line in output if line.startswith("WARNING:")] - errors = len(output) - return status, errors, output - - def check_flac(self, path): -- return self.run_command(["flac", "-wst", path]) -+ return self.run_command(["@flac@/bin/flac", "-wst", path]) - - def check_custom(self, command): - def checker(path): diff --git a/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix b/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix new file mode 100644 index 000000000000..1fef39ef72f5 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/beets/builtin-plugins.nix @@ -0,0 +1,95 @@ +{ stdenv +, aacgain +, essentia-extractor +, ffmpeg +, flac +, imagemagick +, keyfinder-cli +, lib +, mp3gain +, mp3val +, python3Packages +, ... +}: { + absubmit = { + enable = lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms; + wrapperBins = [ essentia-extractor ]; + }; + acousticbrainz.propagatedBuildInputs = [ python3Packages.requests ]; + albumtypes = { }; + aura.propagatedBuildInputs = with python3Packages; [ flask pillow ]; + badfiles.wrapperBins = [ mp3val flac ]; + bareasc = { }; + beatport.propagatedBuildInputs = [ python3Packages.requests-oauthlib ]; + bench = { }; + bpd = { }; + bpm = { }; + bpsync = { }; + bucket = { }; + chroma.propagatedBuildInputs = [ python3Packages.pyacoustid ]; + convert.wrapperBins = [ ffmpeg ]; + deezer.propagatedBuildInputs = [ python3Packages.requests ]; + discogs.propagatedBuildInputs = with python3Packages; [ discogs-client requests ]; + duplicates = { }; + edit = { }; + embedart = { + propagatedBuildInputs = with python3Packages; [ pillow ]; + wrapperBins = [ imagemagick ]; + }; + embyupdate.propagatedBuildInputs = [ python3Packages.requests ]; + export = { }; + fetchart = { + propagatedBuildInputs = with python3Packages; [ requests pillow ]; + wrapperBins = [ imagemagick ]; + }; + filefilter = { }; + fish = { }; + freedesktop = { }; + fromfilename = { }; + ftintitle = { }; + fuzzy = { }; + gmusic = { }; + hook = { }; + ihate = { }; + importadded = { }; + importfeeds = { }; + info = { }; + inline = { }; + ipfs = { }; + keyfinder.wrapperBins = [ keyfinder-cli ]; + kodiupdate.propagatedBuildInputs = [ python3Packages.requests ]; + lastgenre.propagatedBuildInputs = [ python3Packages.pylast ]; + lastimport.propagatedBuildInputs = [ python3Packages.pylast ]; + loadext.propagatedBuildInputs = [ python3Packages.requests ]; + lyrics.propagatedBuildInputs = [ python3Packages.beautifulsoup4 ]; + mbcollection = { }; + mbsubmit = { }; + mbsync = { }; + metasync = { }; + missing = { }; + mpdstats.propagatedBuildInputs = [ python3Packages.mpd2 ]; + mpdupdate.propagatedBuildInputs = [ python3Packages.mpd2 ]; + parentwork = { }; + permissions = { }; + play = { }; + playlist.propagatedBuildInputs = [ python3Packages.requests ]; + plexupdate = { }; + random = { }; + replaygain.wrapperBins = [ aacgain ffmpeg mp3gain ]; + rewrite = { }; + scrub = { }; + smartplaylist = { }; + sonosupdate.propagatedBuildInputs = [ python3Packages.soco ]; + spotify = { }; + subsonicplaylist.propagatedBuildInputs = [ python3Packages.requests ]; + subsonicupdate.propagatedBuildInputs = [ python3Packages.requests ]; + the = { }; + thumbnails = { + propagatedBuildInputs = with python3Packages; [ pillow pyxdg ]; + wrapperBins = [ imagemagick ]; + }; + types.testPaths = [ "test/test_types_plugin.py" ]; + unimported = { }; + web.propagatedBuildInputs = [ python3Packages.flask ]; + zero = { }; +} diff --git a/nixpkgs/pkgs/tools/audio/beets/common.nix b/nixpkgs/pkgs/tools/audio/beets/common.nix new file mode 100644 index 000000000000..968544f2790e --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/beets/common.nix @@ -0,0 +1,176 @@ +{ stdenv +, bashInteractive +, diffPlugins +, glibcLocales +, gobject-introspection +, gst_all_1 +, lib +, python3Packages +, runtimeShell +, writeScript + + # plugin deps +, aacgain +, essentia-extractor +, ffmpeg +, flac +, imagemagick +, keyfinder-cli +, mp3gain +, mp3val + +, src +, version +, pluginOverrides ? { } +, disableAllPlugins ? false + + # tests +, runCommand +, beets +}@inputs: +let + inherit (lib) attrNames attrValues concatMap; + + mkPlugin = { enable ? !disableAllPlugins, builtin ? false, propagatedBuildInputs ? [ ], testPaths ? [ ], wrapperBins ? [ ] }: { + inherit enable builtin propagatedBuildInputs testPaths wrapperBins; + }; + + basePlugins = lib.mapAttrs (_: a: { builtin = true; } // a) (import ./builtin-plugins.nix inputs); + allPlugins = lib.mapAttrs (_: mkPlugin) (lib.recursiveUpdate basePlugins pluginOverrides); + builtinPlugins = lib.filterAttrs (_: p: p.builtin) allPlugins; + enabledPlugins = lib.filterAttrs (_: p: p.enable) allPlugins; + disabledPlugins = lib.filterAttrs (_: p: !p.enable) allPlugins; + + pluginWrapperBins = concatMap (p: p.wrapperBins) (attrValues enabledPlugins); +in +python3Packages.buildPythonApplication rec { + pname = "beets"; + inherit src version; + + patches = [ + # Bash completion fix for Nix + ./patches/bash-completion-always-print.patch + ]; + + propagatedBuildInputs = with python3Packages; [ + confuse + gobject-introspection + gst-python + jellyfish + mediafile + munkres + musicbrainzngs + mutagen + pygobject3 + pyyaml + reflink + unidecode + ] ++ (concatMap (p: p.propagatedBuildInputs) (attrValues enabledPlugins)); + + # see: https://github.com/NixOS/nixpkgs/issues/56943#issuecomment-1131643663 + nativeBuildInputs = [ + gobject-introspection + ]; + + buildInputs = [ + ] ++ (with gst_all_1; [ + gst-plugins-base + gst-plugins-good + gst-plugins-ugly + ]); + + postInstall = '' + mkdir -p $out/share/zsh/site-functions + cp extra/_beet $out/share/zsh/site-functions/ + ''; + + doInstallCheck = true; + + installCheckPhase = '' + runHook preInstallCheck + + tmphome="$(mktemp -d)" + + EDITOR="${writeScript "beetconfig.sh" '' + #!${runtimeShell} + cat > "$1" <<CFG + plugins: ${lib.concatStringsSep " " (attrNames enabledPlugins)} + CFG + ''}" HOME="$tmphome" "$out/bin/beet" config -e + EDITOR=true HOME="$tmphome" "$out/bin/beet" config -e + + runHook postInstallCheck + ''; + + makeWrapperArgs = [ + "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" + "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\"" + "--prefix PATH : ${lib.makeBinPath pluginWrapperBins}" + ]; + + checkInputs = with python3Packages; [ + pytest + mock + rarfile + responses + ] ++ pluginWrapperBins; + + disabledTestPaths = lib.flatten (attrValues (lib.mapAttrs (n: v: v.testPaths ++ [ "test/test_${n}.py" ]) disabledPlugins)); + + checkPhase = '' + runHook preCheck + + # Check for undefined plugins + find beetsplug -mindepth 1 \ + \! -path 'beetsplug/__init__.py' -a \ + \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \ + | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \ + | sort -u > plugins_available + ${diffPlugins (attrNames builtinPlugins) "plugins_available"} + + export BEETS_TEST_SHELL="${bashInteractive}/bin/bash --norc" + export HOME="$(mktemp -d)" + + args=" -m pytest -r fEs" + eval "disabledTestPaths=($disabledTestPaths)" + for path in ''${disabledTestPaths[@]}; do + if [ -e "$path" ]; then + args+=" --ignore $path" + else + echo "Skipping non-existent test path '$path'" + fi + done + + python $args + + runHook postCheck + ''; + + + passthru.plugins = allPlugins; + + passthru.tests.gstreamer = runCommand "beets-gstreamer-test" { + meta.timeout = 60; + } + '' + set -euo pipefail + export HOME=$(mktemp -d) + mkdir $out + + cat << EOF > $out/config.yaml +replaygain: + backend: gstreamer +EOF + + echo $out/config.yaml + ${beets}/bin/beet -c $out/config.yaml > /dev/null + ''; + + meta = with lib; { + description = "Music tagger and library organizer"; + homepage = "https://beets.io"; + license = licenses.mit; + maintainers = with maintainers; [ aszlig doronbehar lovesegfault pjones ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch b/nixpkgs/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch deleted file mode 100644 index 1bc178934486..000000000000 --- a/nixpkgs/pkgs/tools/audio/beets/convert-plugin-ffmpeg-path.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff --git i/beetsplug/convert.py w/beetsplug/convert.py -index 6bc07c28..039fb452 100644 ---- i/beetsplug/convert.py -+++ w/beetsplug/convert.py -@@ -118,22 +118,22 @@ class ConvertPlugin(BeetsPlugin): - 'id3v23': 'inherit', - 'formats': { - 'aac': { -- 'command': 'ffmpeg -i $source -y -vn -acodec aac ' -+ 'command': '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec aac ' - '-aq 1 $dest', - 'extension': 'm4a', - }, - 'alac': { -- 'command': 'ffmpeg -i $source -y -vn -acodec alac $dest', -+ 'command': '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec alac $dest', - 'extension': 'm4a', - }, -- 'flac': 'ffmpeg -i $source -y -vn -acodec flac $dest', -- 'mp3': 'ffmpeg -i $source -y -vn -aq 2 $dest', -+ 'flac': '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec flac $dest', -+ 'mp3': '@ffmpeg@/bin/ffmpeg -i $source -y -vn -aq 2 $dest', - 'opus': -- 'ffmpeg -i $source -y -vn -acodec libopus -ab 96k $dest', -+ '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec libopus -ab 96k $dest', - 'ogg': -- 'ffmpeg -i $source -y -vn -acodec libvorbis -aq 3 $dest', -+ '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec libvorbis -aq 3 $dest', - 'wma': -- 'ffmpeg -i $source -y -vn -acodec wmav2 -vn $dest', -+ '@ffmpeg@/bin/ffmpeg -i $source -y -vn -acodec wmav2 -vn $dest', - }, - 'max_bitrate': 500, - 'auto': False, diff --git a/nixpkgs/pkgs/tools/audio/beets/default.nix b/nixpkgs/pkgs/tools/audio/beets/default.nix index 6789bd5f9622..f68a0381e12a 100644 --- a/nixpkgs/pkgs/tools/audio/beets/default.nix +++ b/nixpkgs/pkgs/tools/audio/beets/default.nix @@ -1,279 +1,50 @@ -{ stdenv -, lib +{ lib +, callPackage , fetchFromGitHub -, writeScript -, glibcLocales -, diffPlugins -, substituteAll -, pythonPackages -# can be null, if you wish to disable a reference to it. It's needed for the -# artresizer, see: -# https://beets.readthedocs.io/en/v1.6.0/plugins/fetchart.html#image-resizing -, imagemagick -, gobject-introspection -, gst_all_1 -, runtimeShell - -# external plugins package set -, beetsExternalPlugins - -, enableAbsubmit ? lib.elem stdenv.hostPlatform.system essentia-extractor.meta.platforms, essentia-extractor -, enableAcousticbrainz ? true -, enableAcoustid ? true -, enableAura ? true -, enableBadfiles ? true, flac, mp3val -, enableBeatport ? true -, enableBpsync ? true -, enableConvert ? true, ffmpeg -, enableDeezer ? true -, enableDiscogs ? true -, enableEmbyupdate ? true -, enableFetchart ? true -, enableKeyfinder ? true, keyfinder-cli -, enableKodiupdate ? true -, enableLastfm ? true -, enableLoadext ? true -, enableLyrics ? true -, enableMpd ? true -, enablePlaylist ? true -, enableReplaygain ? true -, enableSonosUpdate ? true -, enableSubsonicplaylist ? true -, enableSubsonicupdate ? true -, enableThumbnails ? true -, enableWeb ? true - -# External plugins -, enableAlternatives ? false -, enableCopyArtifacts ? false -, enableExtraFiles ? false - -, bashInteractive, bash-completion }: - -assert enableBpsync -> enableBeatport; - -let - optionalPlugins = { - absubmit = enableAbsubmit; - acousticbrainz = enableAcousticbrainz; - aura = enableAura; - badfiles = enableBadfiles; - beatport = enableBeatport; - bpsync = enableBpsync; - chroma = enableAcoustid; - convert = enableConvert; - deezer = enableDeezer; - discogs = enableDiscogs; - embyupdate = enableEmbyupdate; - fetchart = enableFetchart; - keyfinder = enableKeyfinder; - kodiupdate = enableKodiupdate; - lastgenre = enableLastfm; - lastimport = enableLastfm; - loadext = enableLoadext; - lyrics = enableLyrics; - mpdstats = enableMpd; - mpdupdate = enableMpd; - playlist = enablePlaylist; - replaygain = enableReplaygain; - sonosupdate = enableSonosUpdate; - subsonicplaylist = enableSubsonicplaylist; - subsonicupdate = enableSubsonicupdate; - thumbnails = enableThumbnails; - web = enableWeb; +/* +** To customize the enabled beets plugins, use the pluginOverrides input to the +** derivation. +** Examples: +** +** Disabling a builtin plugin: +** beets.override { pluginOverrides = { beatport.enable = false; }; } +** +** Enabling an external plugin: +** beets.override { pluginOverrides = { +** alternatives = { enable = true; propagatedBuildInputs = [ beetsPackages.alternatives ]; }; +** }; } +*/ +lib.makeExtensible (self: { + beets = self.beets-stable; + + beets-stable = callPackage ./common.nix rec { + version = "1.6.0"; + src = fetchFromGitHub { + owner = "beetbox"; + repo = "beets"; + rev = "v${version}"; + hash = "sha256-fT+rCJJQR7bdfAcmeFRaknmh4ZOP4RCx8MXpq7/D8tM="; + }; }; - pluginsWithoutDeps = [ - "albumtypes" "bareasc" "bench" "bpd" "bpm" "bucket" "duplicates" "edit" "embedart" - "export" "filefilter" "fish" "freedesktop" "fromfilename" "ftintitle" "fuzzy" - "hook" "ihate" "importadded" "importfeeds" "info" "inline" "ipfs" "gmusic" - "mbcollection" "mbsubmit" "mbsync" "metasync" "missing" "parentwork" "permissions" "play" - "plexupdate" "random" "rewrite" "scrub" "smartplaylist" "spotify" "the" - "types" "unimported" "zero" - ]; - - enabledOptionalPlugins = lib.attrNames (lib.filterAttrs (_: lib.id) optionalPlugins); - - allPlugins = pluginsWithoutDeps ++ lib.attrNames optionalPlugins; - allEnabledPlugins = pluginsWithoutDeps ++ enabledOptionalPlugins; - - testShell = "${bashInteractive}/bin/bash --norc"; - completion = "${bash-completion}/share/bash-completion/bash_completion"; - -in pythonPackages.buildPythonApplication rec { - pname = "beets"; - version = "1.6.0"; - - src = fetchFromGitHub { - owner = "beetbox"; - repo = "beets"; - rev = "v${version}"; - sha256 = "sha256-fT+rCJJQR7bdfAcmeFRaknmh4ZOP4RCx8MXpq7/D8tM="; + beets-minimal = self.beets.override { disableAllPlugins = true; }; + + beets-unstable = callPackage ./common.nix { + version = "unstable-2022-05-08"; + src = fetchFromGitHub { + owner = "beetbox"; + repo = "beets"; + rev = "e06cf7969bfdfa4773049699320471be45d56054"; + hash = "sha256-yWwxYSzSSmx2UfCn0EBH23hQGZKSRn/c8ryvxLUeHdM="; + }; + pluginOverrides = { + # unstable has a new plugin, so we register it here. + limit = { builtin = true; }; + }; }; - propagatedBuildInputs = [ - pythonPackages.six - pythonPackages.enum34 - pythonPackages.jellyfish - pythonPackages.munkres - pythonPackages.musicbrainzngs - pythonPackages.mutagen - pythonPackages.pyyaml - pythonPackages.unidecode - pythonPackages.gst-python - pythonPackages.pygobject3 - pythonPackages.reflink - pythonPackages.confuse - pythonPackages.mediafile - gobject-introspection - ] ++ lib.optional enableAbsubmit essentia-extractor - ++ lib.optional enableAcoustid pythonPackages.pyacoustid - ++ lib.optional enableBeatport pythonPackages.requests_oauthlib - ++ lib.optional enableConvert ffmpeg - ++ lib.optional enableDiscogs pythonPackages.discogs-client - ++ lib.optional (enableFetchart - || enableDeezer - || enableEmbyupdate - || enableKodiupdate - || enableLoadext - || enablePlaylist - || enableSubsonicplaylist - || enableSubsonicupdate - || enableAcousticbrainz) pythonPackages.requests - ++ lib.optional enableKeyfinder keyfinder-cli - ++ lib.optional enableLastfm pythonPackages.pylast - ++ lib.optional enableLyrics pythonPackages.beautifulsoup4 - ++ lib.optional enableMpd pythonPackages.mpd2 - ++ lib.optional enableSonosUpdate pythonPackages.soco - ++ lib.optional enableThumbnails pythonPackages.pyxdg - ++ lib.optional (enableAura - || enableWeb) pythonPackages.flask - ++ lib.optional enableAlternatives beetsExternalPlugins.alternatives - ++ lib.optional enableCopyArtifacts beetsExternalPlugins.copyartifacts - ++ lib.optional enableExtraFiles beetsExternalPlugins.extrafiles - ; - - buildInputs = [ - ] ++ (with gst_all_1; [ - gst-plugins-base - gst-plugins-good - gst-plugins-ugly - ]); - - checkInputs = with pythonPackages; [ - beautifulsoup4 - mock - nose - rarfile - responses - # Although considered as plugin dependencies, they are needed for the - # tests, for disabling them via an override makes the build fail. see: - # https://github.com/beetbox/beets/blob/v1.6.0/setup.py - pylast - mpd2 - discogs-client - pyxdg - ]; - - patches = [ - # Bash completion fix for Nix - ./bash-completion-always-print.patch - ] - # Fix path to imagemagick, used for the artresizer.py file. This reference - # to imagemagick might be expensive for some people, so the patch can be - # disabled if imagemagick is set to null - ++ lib.optional (imagemagick != null) (substituteAll { - src = ./imagemagick-nix-path.patch; - inherit imagemagick; - }) - # We need to force ffmpeg as the default, since we do not package - # bs1770gain, and set the absolute path there, to avoid impurities. - ++ lib.optional enableReplaygain (substituteAll { - src = ./replaygain-default-ffmpeg.patch; - ffmpeg = lib.getBin ffmpeg; - }) - # Put absolute Nix paths in place - ++ lib.optional enableConvert (substituteAll { - src = ./convert-plugin-ffmpeg-path.patch; - ffmpeg = lib.getBin ffmpeg; - }) - ++ lib.optional enableBadfiles (substituteAll { - src = ./badfiles-plugin-nix-paths.patch; - inherit mp3val flac; - }) - ; - - # Disable failing tests - postPatch = '' - echo echo completion tests passed > test/rsrc/test_completion.sh - - # https://github.com/beetbox/beets/issues/1187 - sed -i -e 's/len(mf.images)/0/' test/test_zero.py - ''; - - postInstall = '' - mkdir -p $out/share/zsh/site-functions - cp extra/_beet $out/share/zsh/site-functions/ - ''; - - doCheck = true; - - preCheck = '' - find beetsplug -mindepth 1 \ - \! -path 'beetsplug/__init__.py' -a \ - \( -name '*.py' -o -path 'beetsplug/*/__init__.py' \) -print \ - | sed -n -re 's|^beetsplug/([^/.]+).*|\1|p' \ - | sort -u > plugins_available - - ${diffPlugins allPlugins "plugins_available"} - ''; - - checkPhase = '' - runHook preCheck - - LANG=en_US.UTF-8 \ - LOCALE_ARCHIVE=${assert stdenv.isLinux; glibcLocales}/lib/locale/locale-archive \ - BEETS_TEST_SHELL="${testShell}" \ - BASH_COMPLETION_SCRIPT="${completion}" \ - HOME="$(mktemp -d)" nosetests -v - - runHook postCheck - ''; - - doInstallCheck = true; - - installCheckPhase = '' - runHook preInstallCheck - - tmphome="$(mktemp -d)" - - EDITOR="${writeScript "beetconfig.sh" '' - #!${runtimeShell} - cat > "$1" <<CFG - plugins: ${lib.concatStringsSep " " allEnabledPlugins} - CFG - ''}" HOME="$tmphome" "$out/bin/beet" config -e - EDITOR=true HOME="$tmphome" "$out/bin/beet" config -e - - runHook postInstallCheck - ''; - - makeWrapperArgs = [ - "--set GI_TYPELIB_PATH \"$GI_TYPELIB_PATH\"" - "--set GST_PLUGIN_SYSTEM_PATH_1_0 \"$GST_PLUGIN_SYSTEM_PATH_1_0\"" - ]; - - passthru = { - # FIXME: remove in favor of pkgs.beetsExternalPlugins - externalPlugins = beetsExternalPlugins; - }; - - meta = with lib; { - description = "Music tagger and library organizer"; - homepage = "https://beets.io"; - license = licenses.mit; - maintainers = with maintainers; [ aszlig doronbehar lovesegfault pjones ]; - platforms = platforms.linux; - }; -} + alternatives = callPackage ./plugins/alternatives.nix { beets = self.beets-minimal; }; + copyartifacts = callPackage ./plugins/copyartifacts.nix { beets = self.beets-minimal; }; + extrafiles = callPackage ./plugins/extrafiles.nix { beets = self.beets-minimal; }; +}) diff --git a/nixpkgs/pkgs/tools/audio/beets/imagemagick-nix-path.patch b/nixpkgs/pkgs/tools/audio/beets/imagemagick-nix-path.patch deleted file mode 100644 index 9a77703ede7c..000000000000 --- a/nixpkgs/pkgs/tools/audio/beets/imagemagick-nix-path.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff --git i/beets/util/artresizer.py w/beets/util/artresizer.py -index 8683e228..2f38b4d6 100644 ---- i/beets/util/artresizer.py -+++ w/beets/util/artresizer.py -@@ -334,13 +334,8 @@ class ArtResizer(metaclass=Shareable): - # not, fall back to the older, separate convert and identify - # commands. - if self.method[0] == IMAGEMAGICK: -- self.im_legacy = self.method[2] -- if self.im_legacy: -- self.im_convert_cmd = ['convert'] -- self.im_identify_cmd = ['identify'] -- else: -- self.im_convert_cmd = ['magick'] -- self.im_identify_cmd = ['magick', 'identify'] -+ self.im_convert_cmd = ['@imagemagick@/bin/magick'] -+ self.im_identify_cmd = ['@imagemagick@/bin/magick', 'identify'] - - def resize( - self, maxwidth, path_in, path_out=None, quality=0, max_filesize=0 diff --git a/nixpkgs/pkgs/tools/audio/beets/bash-completion-always-print.patch b/nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch index 8a31fe22f728..8a31fe22f728 100644 --- a/nixpkgs/pkgs/tools/audio/beets/bash-completion-always-print.patch +++ b/nixpkgs/pkgs/tools/audio/beets/patches/bash-completion-always-print.patch diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix index 146e9f506641..635854d4576a 100644 --- a/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix +++ b/nixpkgs/pkgs/tools/audio/beets/plugins/alternatives.nix @@ -1,6 +1,6 @@ -{ lib, fetchFromGitHub, beets, pythonPackages }: +{ lib, fetchFromGitHub, beets, python3Packages }: -pythonPackages.buildPythonApplication rec { +python3Packages.buildPythonApplication rec { pname = "beets-alternatives"; version = "unstable-2021-02-01"; @@ -18,7 +18,7 @@ pythonPackages.buildPythonApplication rec { nativeBuildInputs = [ beets ]; - checkInputs = with pythonPackages; [ + checkInputs = with python3Packages; [ pytestCheckHook mock ]; diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix index 2f1ecdfc3695..623ca2fcf172 100644 --- a/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix +++ b/nixpkgs/pkgs/tools/audio/beets/plugins/copyartifacts.nix @@ -1,6 +1,6 @@ -{ lib, fetchFromGitHub, beets, pythonPackages, glibcLocales }: +{ lib, fetchFromGitHub, beets, python3Packages }: -pythonPackages.buildPythonApplication { +python3Packages.buildPythonApplication { pname = "beets-copyartifacts"; version = "unstable-2020-02-15"; @@ -15,20 +15,20 @@ pythonPackages.buildPythonApplication { sed -i -e '/install_requires/,/\]/{/beets/d}' setup.py sed -i -e '/namespace_packages/d' setup.py printf 'from pkgutil import extend_path\n__path__ = extend_path(__path__, __name__)\n' >beetsplug/__init__.py - - # Skip test which is already failing upstream. - sed -i -e '1i import unittest' \ - -e 's/\(^ *\)# failing/\1@unittest.skip/' \ - tests/test_reimport.py ''; - nativeBuildInputs = [ beets pythonPackages.nose glibcLocales ]; + pytestFlagsArray = [ "-r fEs" ]; - checkPhase = "LANG=en_US.UTF-8 nosetests"; + checkInputs = with python3Packages; [ + pytestCheckHook + beets + six + ]; meta = { description = "Beets plugin to move non-music files during the import process"; homepage = "https://github.com/sbarakat/beets-copyartifacts"; license = lib.licenses.mit; + inherit (beets.meta) platforms; }; } diff --git a/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix b/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix index 0d3ccc0d7a71..7cd4c76d5045 100644 --- a/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix +++ b/nixpkgs/pkgs/tools/audio/beets/plugins/extrafiles.nix @@ -1,6 +1,6 @@ -{ lib, fetchFromGitHub, beets, pythonPackages }: +{ lib, fetchFromGitHub, beets, python3Packages }: -pythonPackages.buildPythonApplication rec { +python3Packages.buildPythonApplication { pname = "beets-extrafiles"; version = "unstable-2020-12-13"; @@ -17,17 +17,21 @@ pythonPackages.buildPythonApplication rec { sed -i -e 's/mediafile~=0.6.0/mediafile>=0.6.0/' setup.py ''; - nativeBuildInputs = [ beets ]; + propagatedBuildInputs = with python3Packages; [ mediafile ]; - propagatedBuildInputs = with pythonPackages; [ mediafile ]; + checkInputs = [ + python3Packages.pytestCheckHook + beets + ]; preCheck = '' - HOME=$TEMPDIR + HOME="$(mktemp -d)" ''; meta = { homepage = "https://github.com/Holzhaus/beets-extrafiles"; description = "A plugin for beets that copies additional files and directories during the import process"; license = lib.licenses.mit; + inherit (beets.meta) platforms; }; } diff --git a/nixpkgs/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch b/nixpkgs/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch deleted file mode 100644 index e441997cae58..000000000000 --- a/nixpkgs/pkgs/tools/audio/beets/replaygain-default-ffmpeg.patch +++ /dev/null @@ -1,26 +0,0 @@ -diff --git i/beetsplug/replaygain.py w/beetsplug/replaygain.py -index b6297d93..5c1cbbc0 100644 ---- i/beetsplug/replaygain.py -+++ w/beetsplug/replaygain.py -@@ -139,7 +139,7 @@ class FfmpegBackend(Backend): - - def __init__(self, config, log): - super().__init__(config, log) -- self._ffmpeg_path = "ffmpeg" -+ self._ffmpeg_path = "@ffmpeg@/bin/ffmpeg" - - # check that ffmpeg is installed - try: -@@ -975,11 +975,10 @@ class ReplayGainPlugin(BeetsPlugin): - def __init__(self): - super().__init__() - -- # default backend is 'command' for backward-compatibility. - self.config.add({ - 'overwrite': False, - 'auto': True, -- 'backend': 'command', -+ 'backend': 'ffmpeg', - 'threads': cpu_count(), - 'parallel_on_import': False, - 'per_disc': False, diff --git a/nixpkgs/pkgs/tools/audio/botamusique/default.nix b/nixpkgs/pkgs/tools/audio/botamusique/default.nix index a1c78768f6ab..249e9629a6f1 100644 --- a/nixpkgs/pkgs/tools/audio/botamusique/default.nix +++ b/nixpkgs/pkgs/tools/audio/botamusique/default.nix @@ -15,7 +15,7 @@ , nodePackages }: let - nodejs = pkgs.nodejs-12_x; + nodejs = pkgs.nodejs-14_x; nodeEnv = import ../../../development/node-packages/node-env.nix { inherit (pkgs) stdenv lib python2 runCommand writeTextFile writeShellScript; inherit pkgs nodejs; diff --git a/nixpkgs/pkgs/tools/audio/darkice/default.nix b/nixpkgs/pkgs/tools/audio/darkice/default.nix index bc3bcbe4eff2..73c71ee6f1a1 100644 --- a/nixpkgs/pkgs/tools/audio/darkice/default.nix +++ b/nixpkgs/pkgs/tools/audio/darkice/default.nix @@ -32,6 +32,6 @@ stdenv.mkDerivation rec { homepage = "http://darkice.org/"; description = "Live audio streamer"; license = lib.licenses.gpl3; - maintainers = with lib.maintainers; [ ikervagyok fpletz ]; + maintainers = with lib.maintainers; [ ikervagyok ]; }; } diff --git a/nixpkgs/pkgs/tools/audio/dsp/default.nix b/nixpkgs/pkgs/tools/audio/dsp/default.nix new file mode 100644 index 000000000000..01b1ed107be9 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/dsp/default.nix @@ -0,0 +1,52 @@ +{ lib +, stdenv +, fetchFromGitHub +, pkg-config +, fftw +, zita-convolver +, fftwFloat +, libsndfile +, ffmpeg +, alsa-lib +, libao +, libmad +, ladspaH +, libtool +, libpulseaudio +}: + +stdenv.mkDerivation rec { + pname = "dsp"; + version = "1.9"; + + src = fetchFromGitHub { + owner = "bmc0"; + repo = "dsp"; + rev = "v${version}"; + sha256 = "sha256-S1pzVQ/ceNsx0vGmzdDWw2TjPVLiRgzR4edFblWsekY="; + }; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ + fftw + zita-convolver + fftwFloat + libsndfile + ffmpeg + alsa-lib + libao + libmad + ladspaH + libtool + libpulseaudio + ]; + + meta = with lib; { + homepage = "https://github.com/bmc0/dsp"; + description = "An audio processing program with an interactive mode"; + license = licenses.isc; + maintainers = with maintainers; [ aaronjheng ]; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/fmtoy/default.nix b/nixpkgs/pkgs/tools/audio/fmtoy/default.nix new file mode 100644 index 000000000000..dd3f04021327 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/fmtoy/default.nix @@ -0,0 +1,72 @@ +{ stdenv +, lib +, fetchFromGitHub +, unstableGitUpdater +, dos2unix +, pkg-config +, zlib +, alsa-lib +, libjack2 +}: + +stdenv.mkDerivation rec { + pname = "fmtoy"; + version = "unstable-2021-12-24"; + + src = fetchFromGitHub { + owner = "vampirefrog"; + repo = "fmtoy"; + rev = "0de6703b3373eb5bf19fd3deaae889286f330c21"; + sha256 = "0sr6klkmjd2hd2kyb9y0x986d6lsy8bziizfc6cmhkqcq92fh45c"; + }; + + postPatch = '' + dos2unix Makefile + # Don't hardcode compilers + sed -i -e '/CC=/d' -e '/CXX=/d' Makefile + '' + lib.optionalString stdenv.hostPlatform.isDarwin '' + # Remove Linux-only program & its dependencies + sed -i -e '/PROGS/ s/fmtoy_jack//' Makefile + substituteInPlace Makefile \ + --replace '$(shell pkg-config alsa jack --cflags)' "" + ''; + + nativeBuildInputs = [ + dos2unix + ] ++ lib.optionals stdenv.hostPlatform.isLinux [ + pkg-config + ]; + + buildInputs = [ + zlib + ] ++ lib.optionals stdenv.hostPlatform.isLinux [ + alsa-lib + libjack2 + ]; + + enableParallelBuilding = true; + + installPhase = '' + runHook preInstall + + for prog in $(grep 'PROGS=' Makefile | cut -d= -f2-); do + install -Dm755 $prog $out/bin/$prog + done + + runHook postInstall + ''; + + passthru.updateScript = unstableGitUpdater { + url = "https://github.com/vampirefrog/fmtoy.git"; + }; + + meta = with lib; { + homepage = "https://github.com/vampirefrog/fmtoy"; + description = "Tools for FM voices for Yamaha YM chips (OPL, OPM and OPN series)"; + # Unknown license situation + # https://github.com/vampirefrog/fmtoy/issues/1 + license = licenses.unfree; + maintainers = with maintainers; [ OPNA2608 ]; + platforms = platforms.all; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/glyr/default.nix b/nixpkgs/pkgs/tools/audio/glyr/default.nix index 60585c3b3541..0f13addfcd92 100644 --- a/nixpkgs/pkgs/tools/audio/glyr/default.nix +++ b/nixpkgs/pkgs/tools/audio/glyr/default.nix @@ -16,10 +16,11 @@ stdenv.mkDerivation rec { buildInputs = [ sqlite glib curl ]; meta = with lib; { - license = licenses.lgpl3; description = "A music related metadata searchengine"; homepage = "https://github.com/sahib/glyr"; + license = licenses.lgpl3; maintainers = [ maintainers.sternenseemann ]; + mainProgram = "glyrc"; platforms = platforms.unix; }; } diff --git a/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix b/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix new file mode 100644 index 000000000000..2e4f63185190 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/headset-charge-indicator/default.nix @@ -0,0 +1,63 @@ +{ lib, stdenv, fetchFromGitHub, headsetcontrol, wrapGAppsHook, python3, gtk3 +, gobject-introspection, libayatana-appindicator-gtk3 }: + +stdenv.mkDerivation rec { + # The last versioned release is 1.0.0.0 from 2020, since then there were updates but no versioned release. + # This is not marked unstable because upstream encourages installation from source. + pname = "headset-charge-indicator"; + version = "2021-08-15"; + + src = fetchFromGitHub { + owner = "centic9"; + repo = "headset-charge-indicator"; + rev = "6e20f81a4d6118c7385b831044c468af83103193"; + sha256 = "sha256-eaAbqeFY+B3CcKJywC3vaRsWZNQENTbALc7L7uW0W6U="; + }; + + nativeBuildInputs = [ wrapGAppsHook ]; + + buildInputs = [ + (python3.withPackages (ps: with ps; [ pygobject3 ])) + headsetcontrol + gtk3 + gobject-introspection + libayatana-appindicator-gtk3 + ]; + + installPhase = '' + mkdir -p $out/bin + cp $src/headset-charge-indicator.py $out/bin/headset-charge-indicator.py + chmod +x $out/bin/headset-charge-indicator.py + + substituteInPlace \ + $out/bin/headset-charge-indicator.py \ + --replace "default='headsetcontrol'" "default='${headsetcontrol}/bin/headsetcontrol'" + + cat << EOF > ${pname}.desktop + [Desktop Entry] + Name=Wireless headset app-indicator + Categories=Application;System + Exec=$out/bin/headset-charge-indicator.py + Terminal=false + Type=Application + X-GNOME-AutoRestart=true + X-GNOME-Autostart-enabled=true + EOF + + mkdir -p $out/share/applications + mkdir -p $out/etc/xdg/autostart + cp ${pname}.desktop $out/share/applications/${pname}.desktop + cp ${pname}.desktop $out/etc/xdg/autostart/${pname}.desktop + ''; + + meta = with lib; { + homepage = "https://github.com/centic9/headset-charge-indicator"; + description = + "A app-indicator for GNOME desktops for controlling some features of various wireless headsets"; + longDescription = + "A simple app-indicator for GNOME desktops to display the battery charge of some wireless headsets which also allows to control some functions like LEDs, sidetone and others."; + platforms = platforms.linux; + maintainers = with maintainers; [ zebreus ]; + license = licenses.bsd2; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix b/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix index 3a66791932d5..294b2cc7b931 100644 --- a/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix +++ b/nixpkgs/pkgs/tools/audio/headsetcontrol/default.nix @@ -7,13 +7,13 @@ stdenv.mkDerivation rec { pname = "headsetcontrol"; - version = "2.6"; + version = "2.6.1"; src = fetchFromGitHub { owner = "Sapd"; repo = "HeadsetControl"; rev = version; - sha256 = "0a7zimzi71416pmn6z0l1dn1c2x8p702hkd0k6da9rsznff85a88"; + sha256 = "sha256-SVOcRzR52RYZsk/OWAr1/s+Nm6x48OxG0TF7yQ+Kb94="; }; nativeBuildInputs = [ diff --git a/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix index 1c52e6796b7b..b390c943cd2a 100644 --- a/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix +++ b/nixpkgs/pkgs/tools/audio/liquidsoap/full.nix @@ -1,74 +1,99 @@ { lib, stdenv, makeWrapper, fetchurl, which, pkg-config +, libjpeg , ocamlPackages -, libao, portaudio, alsa-lib, libpulseaudio, libjack2 -, libsamplerate, libmad, taglib, lame, libogg -, libvorbis, speex, libtheora, libopus, zlib -, faad2, flac, ladspaH, ffmpeg, frei0r, dssi +, awscli2, curl, ffmpeg, youtube-dl +, runtimePackages ? [ awscli2 curl ffmpeg youtube-dl ] }: let pname = "liquidsoap"; - version = "1.4.2"; - - ocaml-ffmpeg = fetchurl { - url = "https://github.com/savonet/ocaml-ffmpeg/releases/download/v0.4.2/ocaml-ffmpeg-0.4.2.tar.gz"; - sha256 = "1lx5s1avds9fsh77828ifn71r2g89rxakhs8pp995a675phm9viw"; - }; - - packageFilters = map (p: "-e '/ocaml-${p}/d'" ) - [ "gstreamer" "shine" "aacplus" "schroedinger" - "voaacenc" "soundtouch" "gavl" "lo" - ]; + version = "2.0.6"; in stdenv.mkDerivation { - name = "${pname}-full-${version}"; + inherit pname version; src = fetchurl { - url = "https://github.com/savonet/${pname}/releases/download/v${version}/${pname}-${version}-full.tar.gz"; - sha256 = "0wkwnzj1a0vizv7sr1blwk5gzm2qi0n02ndijnq1i50cwrgxs1a4"; + url = "https://github.com/savonet/${pname}/releases/download/v${version}/${pname}-${version}.tar.bz2"; + sha256 = "sha256-1wD9BApbDA/ovzZoniay+jciP/V2C8EoGQehd5N8PPQ="; }; - # Use ocaml-srt and ocaml-fdkaac from nixpkgs - # Use ocaml-ffmpeg at 0.4.2 for compatibility with ffmpeg 4.3 - prePatch = '' - rm -rf ocaml-srt*/ ocaml-fdkaac*/ ocaml-ffmpeg*/ - tar xzf ${ocaml-ffmpeg} - ''; - - preConfigure = /* we prefer system-wide libs */ '' - sed -i "s|gsed|sed|" Makefile - make bootstrap - # autoreconf -vi # use system libraries - - sed ${toString packageFilters} PACKAGES.default > PACKAGES - ''; - postFixup = '' - wrapProgram $out/bin/liquidsoap --set LIQ_LADSPA_PATH /run/current-system/sw/lib/ladspa + wrapProgram $out/bin/liquidsoap \ + --set LIQ_LADSPA_PATH /run/current-system/sw/lib/ladspa \ + --prefix PATH : ${lib.makeBinPath runtimePackages} ''; - configureFlags = [ "--localstatedir=/var" ]; - nativeBuildInputs = [ makeWrapper pkg-config ]; - buildInputs = - [ which ocamlPackages.ocaml ocamlPackages.findlib - libao portaudio alsa-lib libpulseaudio libjack2 - libsamplerate libmad taglib lame libogg - libvorbis speex libtheora libopus zlib - faad2 flac ladspaH ffmpeg frei0r dssi - ocamlPackages.xmlm ocamlPackages.ocaml_pcre + buildInputs = [ + libjpeg + which + ocamlPackages.ocaml ocamlPackages.findlib + + # Mandatory dependencies + ocamlPackages.dtools + ocamlPackages.duppy + ocamlPackages.mm + ocamlPackages.ocaml_pcre + ocamlPackages.menhir ocamlPackages.menhirLib + ocamlPackages.sedlex + + # Recommended dependencies ocamlPackages.camomile + ocamlPackages.samplerate + + # Optional dependencies + ocamlPackages.camlimages + ocamlPackages.gd4o + ocamlPackages.alsa + ocamlPackages.ao + ocamlPackages.bjack + ocamlPackages.cry + ocamlPackages.dssi + ocamlPackages.faad ocamlPackages.fdkaac - ocamlPackages.srt ocamlPackages.sedlex_2 ocamlPackages.menhir ocamlPackages.menhirLib - ]; + ocamlPackages.srt + ocamlPackages.ffmpeg + ocamlPackages.flac + ocamlPackages.frei0r + ocamlPackages.gstreamer + ocamlPackages.inotify + ocamlPackages.ladspa + ocamlPackages.lame + ocamlPackages.lastfm + ocamlPackages.lo + ocamlPackages.mad + ocamlPackages.magic + ocamlPackages.ogg + ocamlPackages.opus + ocamlPackages.portaudio + ocamlPackages.pulseaudio + ocamlPackages.shine + ocamlPackages.soundtouch + ocamlPackages.speex + ocamlPackages.srt + ocamlPackages.ssl + ocamlPackages.taglib + ocamlPackages.theora + ocamlPackages.vorbis + ocamlPackages.xmlplaylist + ocamlPackages.posix-time2 + ocamlPackages.tsdl + ocamlPackages.tsdl-image + ocamlPackages.tsdl-ttf - hardeningDisable = [ "format" "fortify" ]; + # Undocumented dependencies + ocamlPackages.ocurl + ocamlPackages.lilv + ocamlPackages.graphics + ocamlPackages.yojson + ocamlPackages.cohttp-lwt-unix + ]; meta = with lib; { description = "Swiss-army knife for multimedia streaming"; homepage = "https://www.liquidsoap.info/"; - maintainers = with maintainers; [ ehmry ]; - license = licenses.gpl2; + maintainers = with maintainers; [ dandellion ehmry ]; + license = licenses.gpl2Plus; platforms = ocamlPackages.ocaml.meta.platforms or []; }; } diff --git a/nixpkgs/pkgs/tools/audio/mictray/default.nix b/nixpkgs/pkgs/tools/audio/mictray/default.nix new file mode 100644 index 000000000000..e757bac96682 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/mictray/default.nix @@ -0,0 +1,53 @@ +{ fetchFromGitHub +, gtk3 +, lib +, libgee +, libnotify +, meson +, ninja +, pkg-config +, pulseaudio +, stdenv +, vala +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "mictray"; + version = "0.2.5"; + + src = fetchFromGitHub { + owner = "Junker"; + repo = "mictray"; + rev = "1f879aeda03fbe87ae5a761f46c042e09912e1c0"; + sha256 = "0achj6r545c1sigls79c8qdzryz3sgldcyzd3pwak1ymim9i9c74"; + }; + + nativeBuildInputs = [ + meson + ninja + pkg-config + vala + wrapGAppsHook + ]; + + buildInputs = [ + gtk3 + libgee + libnotify + pulseaudio + ]; + + doCheck = true; + + meta = with lib; { + homepage = "https://github.com/Junker/mictray"; + description = "System tray application for microphone"; + longDescription = '' + MicTray is a Lightweight system tray application which lets you control the microphone state and volume. + ''; + license = licenses.gpl3; + platforms = platforms.linux; + maintainers = [ maintainers.anpryl ]; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix b/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix index 9d8a55d77060..7f363d28dcfb 100644 --- a/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix +++ b/nixpkgs/pkgs/tools/audio/mpd-discord-rpc/default.nix @@ -1,20 +1,28 @@ -{ lib +{ stdenv +, lib , rustPlatform , fetchFromGitHub +, pkg-config +, openssl +, Security }: rustPlatform.buildRustPackage rec { pname = "mpd-discord-rpc"; - version = "1.4.1"; + version = "1.5.2"; src = fetchFromGitHub { owner = "JakeStanger"; repo = pname; rev = "v${version}"; - sha256 = "sha256-CdgR9G598LmxA9lhY6yppP3ZZUhTqgMcWccEhSuCcJQ="; + sha256 = "sha256-/QWIoP6KcrI8cYTh3x2lQz7nPSvzb1zRWg8TFoYY9vE="; }; - cargoSha256 = "sha256-WhlVWQCUGP+K9md0yp6ZD6mGYMso1fUYKDuXXrC2FeI="; + cargoSha256 = "sha256-46PS1+ud7GYuMOJMp93Hf7+nlngvgL67zedaF44TcYY="; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security; meta = with lib; { description = "Rust application which displays your currently playing song / album / artist from MPD in Discord using Rich Presence"; diff --git a/nixpkgs/pkgs/tools/audio/mpdcron/default.nix b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix index afb1c9a3dcda..94ba5a56d032 100644 --- a/nixpkgs/pkgs/tools/audio/mpdcron/default.nix +++ b/nixpkgs/pkgs/tools/audio/mpdcron/default.nix @@ -31,9 +31,8 @@ in stdenv.mkDerivation { sha256 = "0vdksf6lcgmizqr5mqp0bbci259k0dj7gpmhx32md41jlmw5skaw"; }; + nativeBuildInputs = [ autoconf automake ]; buildInputs = [ - autoconf - automake libtool pkg-config glib diff --git a/nixpkgs/pkgs/tools/audio/mpdris2/default.nix b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix index 4cd3921fb550..a367da9828ed 100644 --- a/nixpkgs/pkgs/tools/audio/mpdris2/default.nix +++ b/nixpkgs/pkgs/tools/audio/mpdris2/default.nix @@ -11,7 +11,7 @@ python3.pkgs.buildPythonApplication rec { pname = "mpDris2"; - version = "0.8"; + version = "0.9.1"; format = "other"; strictDeps = false; # https://github.com/NixOS/nixpkgs/issues/56943 @@ -19,7 +19,7 @@ python3.pkgs.buildPythonApplication rec { owner = "eonpatapon"; repo = pname; rev = version; - sha256 = "048b8acsd1b8kcxzd9fsh5p9g2an9c4rznicfcpyrsjz5syv894h"; + sha256 = "sha256-1Y6K3z8afUXeKhZzeiaEF3yqU0Ef7qdAj9vAkRlD2p8="; }; preConfigure = '' @@ -49,7 +49,7 @@ python3.pkgs.buildPythonApplication rec { description = "MPRIS 2 support for mpd"; homepage = "https://github.com/eonpatapon/mpDris2/"; license = licenses.gpl3; - maintainers = with maintainers; []; + maintainers = with maintainers; [ ]; platforms = platforms.unix; }; } diff --git a/nixpkgs/pkgs/tools/audio/mpdsync/default.nix b/nixpkgs/pkgs/tools/audio/mpdsync/default.nix deleted file mode 100644 index c89404fbba1c..000000000000 --- a/nixpkgs/pkgs/tools/audio/mpdsync/default.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ stdenv, python2, fetchFromGitHub }: -with python2.pkgs; -stdenv.mkDerivation { - pname = "mpdsync"; - version = "unstable-2017-06-15"; - - src = fetchFromGitHub { - owner = "alphapapa"; - repo = "mpdsync"; - rev = "da90058f44dd9578cc5f2fb96a1fb2b26da40d07"; - sha256 = "1mfg3ipqj5dvyyqbgp6ia6sc1ja5gmm2c9mfrwx0jw2dl182if6q"; - }; - - pythonPath = [ mpd2 ]; - - nativeBuildInputs = [ - wrapPython - ]; - - dontBuild = true; - - installPhase = "install -D mpdsync.py $out/bin/mpdsync"; - postFixup = "wrapPythonPrograms"; - -} diff --git a/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix b/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix index 93960a5278fd..16070c91dd90 100644 --- a/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix +++ b/nixpkgs/pkgs/tools/audio/mpris-scrobbler/default.nix @@ -15,13 +15,13 @@ stdenv.mkDerivation rec { pname = "mpris-scrobbler"; - version = "0.4.0.1"; + version = "0.4.95"; src = fetchFromGitHub { owner = "mariusor"; repo = "mpris-scrobbler"; rev = "v${version}"; - sha256 = "0jzmgcb9a19hl8y7iwy8l3cc2vgzi0scw7r5q72kszfyxn0yk2gs"; + sha256 = "sha256-Cqf0egS4XSDiKLdizNHPdS0Zt3jQxw9e78S7n23CuKI="; }; postPatch = '' diff --git a/nixpkgs/pkgs/tools/audio/nanotts/default.nix b/nixpkgs/pkgs/tools/audio/nanotts/default.nix new file mode 100644 index 000000000000..85f786d20810 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/nanotts/default.nix @@ -0,0 +1,35 @@ +{ lib, stdenv, fetchFromGitHub, autoconf, automake, libtool, popt, alsa-lib }: + +stdenv.mkDerivation { + pname = "nano-tts"; + version = "unstable-2021-02-22"; + + src = fetchFromGitHub { + repo = "nanotts"; + owner = "gmn"; + rev = "d8b91f3d9d524c30f6fe8098ea7a0a638c889cf9"; + sha256 = "sha256-bFu3U50zc90iQeWkqOsCipkueJUZI3cW5342jjYSnGI="; + }; + + strictDeps = true; + nativeBuildInputs = [ autoconf automake libtool ]; + buildInputs = [ popt alsa-lib ]; + + patchPhase = '' + substituteInPlace "src/main.cpp" --replace "/usr/share/pico/lang" "$out/share/lang" + echo "" > update_build_version.sh + ''; + + installPhase = '' + install -Dm755 -t $out/bin nanotts + install -Dm644 -t $out/share/lang $src/lang/* + ''; + + meta = { + description = "Speech synthesizer commandline utility that improves pico2wave, included with SVOX PicoTTS"; + homepage = "https://github.com/gmn/nanotts"; + license = lib.licenses.asl20; + maintainers = [ lib.maintainers.strikerlulu ]; + platforms = lib.platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/pa-applet/default.nix b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix index 4f67c86864d8..3d881717e792 100644 --- a/nixpkgs/pkgs/tools/audio/pa-applet/default.nix +++ b/nixpkgs/pkgs/tools/audio/pa-applet/default.nix @@ -11,9 +11,9 @@ stdenv.mkDerivation { sha256 = "sha256-ihvZFXHgr5YeqMKmVY/GB86segUkQ9BYqJYfE3PTgog="; }; - nativeBuildInputs = [ pkg-config ]; + nativeBuildInputs = [ pkg-config autoconf automake ]; buildInputs = [ - gtk3 libpulseaudio glibc automake autoconf libnotify libX11 xf86inputevdev + gtk3 libpulseaudio glibc libnotify libX11 xf86inputevdev ]; preConfigure = '' diff --git a/nixpkgs/pkgs/tools/audio/spotdl/default.nix b/nixpkgs/pkgs/tools/audio/spotdl/default.nix index c9270ce58357..32dc47f53188 100644 --- a/nixpkgs/pkgs/tools/audio/spotdl/default.nix +++ b/nixpkgs/pkgs/tools/audio/spotdl/default.nix @@ -6,13 +6,13 @@ python3.pkgs.buildPythonApplication rec { pname = "spotdl"; - version = "3.9.3"; + version = "3.9.6"; src = fetchFromGitHub { owner = "spotDL"; repo = "spotify-downloader"; - rev = "v${version}"; - sha256 = "sha256-sx6UtblpsetKPwhlXB3Kj3OMIOyW9QluzB+YbtQGdYQ="; + rev = "refs/tags/v${version}"; + hash = "sha256-JoeNVMuEslz7A7G4ZvikimZrG75YrH5Mx3Oamtfy4cM="; }; propagatedBuildInputs = with python3.pkgs; [ @@ -22,10 +22,11 @@ python3.pkgs.buildPythonApplication rec { rapidfuzz mutagen ytmusicapi + yt-dlp beautifulsoup4 requests unidecode - yt-dlp + setuptools ]; checkInputs = with python3.pkgs; [ diff --git a/nixpkgs/pkgs/tools/audio/stt/default.nix b/nixpkgs/pkgs/tools/audio/stt/default.nix index c8fff7ddbb4a..91e18f409a21 100644 --- a/nixpkgs/pkgs/tools/audio/stt/default.nix +++ b/nixpkgs/pkgs/tools/audio/stt/default.nix @@ -27,6 +27,7 @@ stdenv.mkDerivation rec { meta = with lib; { homepage = "https://github.com/coqui-ai/STT"; description = "Deep learning toolkit for Speech-to-Text, battle-tested in research and production"; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; license = licenses.mpl20; platforms = [ "x86_64-linux" ]; maintainers = with maintainers; [ rvolosatovs ]; diff --git a/nixpkgs/pkgs/tools/audio/tts/default.nix b/nixpkgs/pkgs/tools/audio/tts/default.nix index a15a29f9d574..159d68feac0f 100644 --- a/nixpkgs/pkgs/tools/audio/tts/default.nix +++ b/nixpkgs/pkgs/tools/audio/tts/default.nix @@ -31,18 +31,19 @@ let in python.pkgs.buildPythonApplication rec { pname = "tts"; - version = "0.6.1"; + version = "0.7.1"; format = "setuptools"; src = fetchFromGitHub { owner = "coqui-ai"; repo = "TTS"; rev = "v${version}"; - sha256 = "sha256-YzMR/Tl1UvjdSqV/h4lYR6DuarEqEIM7RReqYznFU4Q="; + sha256 = "sha256-ch+711soRfZj1egyaF0+6NrUJtf7JqfZuxQ4eDf1zas="; }; postPatch = let relaxedConstraints = [ + "cython" "gruut" "librosa" "mecab-python3" @@ -50,6 +51,7 @@ python.pkgs.buildPythonApplication rec { "numpy" "umap-learn" "unidic-lite" + "pyworld" ]; in '' sed -r -i \ @@ -129,9 +131,14 @@ python.pkgs.buildPythonApplication rec { "test_text_to_ids_phonemes_with_eos_bos_and_blank" # Takes too long "test_parametrized_wavernn_dataset" + + # requires network + "test_voice_conversion" ]; disabledTestPaths = [ + # Requires network acccess to download models + "tests/aux_tests/test_remove_silence_vad_script.py" # phonemes mismatch between espeak-ng and gruuts phonemizer "tests/text_tests/test_phonemizer.py" # no training, it takes too long @@ -146,7 +153,6 @@ python.pkgs.buildPythonApplication rec { "tests/tts_tests/test_tacotron2_d-vectors_train.py" "tests/tts_tests/test_tacotron2_speaker_emb_train.py" "tests/tts_tests/test_tacotron2_train.py" - "tests/tts_tests/test_tacotron2_train_fsspec_path.py" "tests/tts_tests/test_tacotron_train.py" "tests/tts_tests/test_vits_d-vectors_train.py" "tests/tts_tests/test_vits_multilingual_speaker_emb_train.py" diff --git a/nixpkgs/pkgs/tools/audio/vgmtools/default.nix b/nixpkgs/pkgs/tools/audio/vgmtools/default.nix new file mode 100644 index 000000000000..ce6add702e74 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/vgmtools/default.nix @@ -0,0 +1,44 @@ +{ stdenv +, lib +, fetchFromGitHub +, unstableGitUpdater +, cmake +, zlib +}: + +stdenv.mkDerivation rec { + pname = "vgmtools"; + version = "unstable-2022-05-23"; + + src = fetchFromGitHub { + owner = "vgmrips"; + repo = "vgmtools"; + rev = "e0df1511ddf7b1207b448487616ff18a9049c278"; + sha256 = "2nM3E/XeZ1OeOj3fPqvuJgQcPOtBerduGpVfpGLVhHQ="; + }; + + nativeBuildInputs = [ + cmake + ]; + + buildInputs = [ + zlib + ]; + + # Some targets are not enabled by default + makeFlags = [ + "all" "opt_oki" "optdac" "optvgm32" + ]; + + passthru.updateScript = unstableGitUpdater { + url = "https://github.com/vgmrips/vgmtools.git"; + }; + + meta = with lib; { + homepage = "https://github.com/vgmrips/vgmtools"; + description = "A collection of tools for the VGM file format"; + license = licenses.gpl2; # Not clarified whether Only or Plus + maintainers = with maintainers; [ OPNA2608 ]; + platforms = platforms.all; + }; +} diff --git a/nixpkgs/pkgs/tools/audio/volumeicon/default.nix b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix index 4d726cbd2a9e..00690d016329 100644 --- a/nixpkgs/pkgs/tools/audio/volumeicon/default.nix +++ b/nixpkgs/pkgs/tools/audio/volumeicon/default.nix @@ -1,24 +1,36 @@ -{ pkgs, fetchurl, lib, stdenv, gtk3, pkg-config, intltool, alsa-lib }: +{ fetchFromGitHub, lib, stdenv +, autoreconfHook, intltool, pkg-config +, gtk3, alsa-lib +}: -stdenv.mkDerivation { +stdenv.mkDerivation rec { pname = "volumeicon"; version = "0.5.1"; - src = fetchurl { - url = "http://softwarebakery.com/maato/files/volumeicon/volumeicon-0.5.1.tar.gz"; - sha256 = "182xl2w8syv6ky2h2bc9imc6ap8pzh0p7rp63hh8nw0xm38c3f14"; + src = fetchFromGitHub { + owner = "Maato"; + repo = "volumeicon"; + rev = version; + hash = "sha256-zYKC7rOoLf08rV4B43TrGNBcXfSBFxWZCe9bQD9JzaA"; }; - nativeBuildInputs = [ pkg-config ]; - buildInputs = [ gtk3 intltool alsa-lib ]; + nativeBuildInputs = [ + autoreconfHook + intltool + pkg-config + ]; + + buildInputs = [ + gtk3 + alsa-lib + ]; meta = with lib; { description = "A lightweight volume control that sits in your systray"; - homepage = "http://softwarebakery.com/maato/volumeicon.html"; - platforms = pkgs.lib.platforms.linux; + homepage = "http://nullwise.com/volumeicon.html"; + platforms = platforms.linux; maintainers = with maintainers; [ bobvanderlinden ]; - license = pkgs.lib.licenses.gpl3; + license = licenses.gpl3; }; - } diff --git a/nixpkgs/pkgs/tools/audio/yabridge/default.nix b/nixpkgs/pkgs/tools/audio/yabridge/default.nix index 40c3b594dc98..6287c532382f 100644 --- a/nixpkgs/pkgs/tools/audio/yabridge/default.nix +++ b/nixpkgs/pkgs/tools/audio/yabridge/default.nix @@ -1,7 +1,6 @@ { lib , multiStdenv , fetchFromGitHub -, fetchpatch , substituteAll , pkgsi686Linux , libnotify @@ -9,17 +8,24 @@ , ninja , pkg-config , wine -, boost , libxcb , nix-update-script }: let + # Derived from subprojects/asio.wrap + asio = fetchFromGitHub { + owner = "chriskohlhoff"; + repo = "asio"; + rev = "asio-1-22-1"; + sha256 = "sha256-UDLhx2yI6Txg0wP5H4oNIhgKIB2eMxUGCyT2x/7GgVg="; + }; + # Derived from subprojects/bitsery.wrap bitsery = fetchFromGitHub { owner = "fraillt"; repo = "bitsery"; - rev = "c0fc083c9de805e5825d7553507569febf6a6f93"; + rev = "v5.2.2"; sha256 = "sha256-VwzVtxt+E/SVcxqIJw8BKPO2q7bu/hkhY+nB7FHrZpY="; }; @@ -27,15 +33,23 @@ let function2 = fetchFromGitHub { owner = "Naios"; repo = "function2"; - rev = "02ca99831de59c7c3a4b834789260253cace0ced"; + rev = "4.2.0"; sha256 = "sha256-wrt+fCcM6YD4ZRZYvqqB+fNakCNmltdPZKlNkPLtgMs="; }; + # Derived from subprojects/ghc_filesystem.wrap + ghc_filesystem = fetchFromGitHub { + owner = "gulrak"; + repo = "filesystem"; + rev = "v1.5.12"; + sha256 = "sha256-j4RE5Ach7C7Kef4+H9AHSXa2L8OVyJljDwBduKcC4eE="; + }; + # Derived from subprojects/tomlplusplus.wrap tomlplusplus = fetchFromGitHub { owner = "marzer"; repo = "tomlplusplus"; - rev = "8e669aa6990e0ed219c169d491472d749f54c393"; + rev = "v3.0.1"; sha256 = "sha256-l8ckbCqjz3GUfwStcl3H2C+un5dZfT2uLtayvdu93D4="; }; @@ -43,29 +57,29 @@ let vst3 = fetchFromGitHub { owner = "robbert-vdh"; repo = "vst3sdk"; - rev = "v3.7.4_build_25-patched"; + rev = "v3.7.5_build_44-patched"; fetchSubmodules = true; - sha256 = "sha256-oHRJZItw+he5M+beVZkUrhJir6rgFZ80ORzA73mJT2A="; + sha256 = "sha256-6cuEUa+BXa6MnAYIBq873n0NRLadcPfMX+kpf4ysE6M="; }; in multiStdenv.mkDerivation rec { pname = "yabridge"; - version = "3.8.0"; + version = "4.0.2"; # NOTE: Also update yabridgectl's cargoHash when this is updated src = fetchFromGitHub { owner = "robbert-vdh"; repo = pname; rev = version; - sha256 = "sha256-XacJjHxsp60/l36pFPGonUyOsyFF2lmqplAaisHXZDY="; + sha256 = "sha256-rce6gxnB+RpG84Xakw0h4vZ8lyEQ41swWQGuwpomV2I="; }; # Unpack subproject sources postUnpack = ''( cd "$sourceRoot/subprojects" + cp -R --no-preserve=mode,ownership ${asio} asio cp -R --no-preserve=mode,ownership ${bitsery} bitsery - cp packagefiles/bitsery/* bitsery cp -R --no-preserve=mode,ownership ${function2} function2 - cp packagefiles/function2/* function2 + cp -R --no-preserve=mode,ownership ${ghc_filesystem} ghc_filesystem cp -R --no-preserve=mode,ownership ${tomlplusplus} tomlplusplus cp -R --no-preserve=mode,ownership ${vst3} vst3 )''; @@ -74,22 +88,23 @@ in multiStdenv.mkDerivation rec { # Hard code bitbridge & runtime dependencies (substituteAll { src = ./hardcode-dependencies.patch; - boost32 = pkgsi686Linux.boost; libxcb32 = pkgsi686Linux.xorg.libxcb; inherit libnotify wine; }) - # Remove with next yabridge update - (fetchpatch { - name = "fix-for-wine-7.1.patch"; - url = "https://github.com/robbert-vdh/yabridge/commit/de470d345ab206b08f6d4a147b6af1d285a4211f.patch"; - sha256 = "sha256-xJx1zvxD+DIjbkm7Ovoy4RaAvjx936/j/7AYUPh/kOo="; - includes = [ "src/wine-host/xdnd-proxy.cpp" ]; - }) + # Patch the chainloader to search for libyabridge through NIX_PROFILES + ./libyabridge-from-nix-profiles.patch ]; postPatch = '' patchShebangs . + ( + cd subprojects + cp packagefiles/asio/* asio + cp packagefiles/bitsery/* bitsery + cp packagefiles/function2/* function2 + cp packagefiles/ghc_filesystem/* ghc_filesystem + ) ''; nativeBuildInputs = [ @@ -100,18 +115,12 @@ in multiStdenv.mkDerivation rec { ]; buildInputs = [ - boost libxcb ]; - # Meson is no longer able to pick up Boost automatically. - # https://github.com/NixOS/nixpkgs/issues/86131 - BOOST_INCLUDEDIR = "${lib.getDev boost}/include"; - BOOST_LIBRARYDIR = "${lib.getLib boost}/lib"; - mesonFlags = [ "--cross-file" "cross-wine.conf" - "-Dwith-bitbridge=true" + "-Dbitbridge=true" # Requires CMake and is unnecessary "-Dtomlplusplus:generate_cmake_config=false" @@ -120,10 +129,8 @@ in multiStdenv.mkDerivation rec { installPhase = '' runHook preInstall mkdir -p "$out/bin" "$out/lib" - cp yabridge-group*.exe{,.so} "$out/bin" - cp yabridge-host*.exe{,.so} "$out/bin" - cp libyabridge-vst2.so "$out/lib" - cp libyabridge-vst3.so "$out/lib" + cp yabridge-host{,-32}.exe{,.so} "$out/bin" + cp libyabridge{,-chainloader}-{vst2,vst3}.so "$out/lib" runHook postInstall ''; @@ -140,8 +147,8 @@ in multiStdenv.mkDerivation rec { }; meta = with lib; { - description = "Yet Another VST bridge, run Windows VST2 plugins under Linux"; - homepage = "https://github.com/robbert-vdh/yabridge"; + description = "A modern and transparent way to use Windows VST2 and VST3 plugins on Linux"; + homepage = src.meta.homepage; license = licenses.gpl3Plus; maintainers = with maintainers; [ kira-bruneau ]; platforms = [ "x86_64-linux" ]; diff --git a/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch b/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch index 9f6bc0c9a9d5..e54ba1e9386d 100644 --- a/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch +++ b/nixpkgs/pkgs/tools/audio/yabridge/hardcode-dependencies.patch @@ -1,16 +1,8 @@ diff --git a/meson.build b/meson.build -index 95ecb728..cb30f3af 100644 +index bfab6361..9085db0f 100644 --- a/meson.build +++ b/meson.build -@@ -201,6 +201,7 @@ if with_32bit_libraries or with_bitbridge - 'boost_filesystem', - static : with_static_boost, - dirs : [ -+ '@boost32@/lib', - # Used by Arch based distros - '/usr/local/lib32', - '/usr/lib32', -@@ -224,7 +225,7 @@ if is_64bit_system +@@ -187,7 +187,7 @@ if is_64bit_system xcb_64bit_dep = dependency('xcb') endif if with_32bit_libraries or with_bitbridge @@ -19,25 +11,29 @@ index 95ecb728..cb30f3af 100644 endif # These are all headers-only libraries, and thus won't require separate 32-bit +diff --git a/src/common/notifications.cpp b/src/common/notifications.cpp +index da27a1bf..18482e06 100644 +--- a/src/common/notifications.cpp ++++ b/src/common/notifications.cpp +@@ -49,7 +49,7 @@ bool send_notification(const std::string& title, + } + } + +- Process process("notify-send"); ++ Process process("@libnotify@/bin/notify-send"); + process.arg("--urgency=normal"); + process.arg("--app-name=yabridge"); + process.arg(title); diff --git a/src/plugin/utils.cpp b/src/plugin/utils.cpp -index 1a457f03..20ca1e63 100644 +index acd431bc..8566281c 100644 --- a/src/plugin/utils.cpp +++ b/src/plugin/utils.cpp -@@ -107,7 +107,7 @@ std::string PluginInfo::wine_version() const { - access(wineloader_path.c_str(), X_OK) == 0) { - wine_path = wineloader_path; - } else { -- wine_path = bp::search_path("wine").string(); -+ wine_path = "@wine@/bin/wine"; - } - - bp::ipstream output; -@@ -436,7 +436,7 @@ Configuration load_config_for(const fs::path& yabridge_path) { - bool send_notification(const std::string& title, - const std::string body, - bool append_origin) { -- const fs::path notify_send_path = bp::search_path("notify-send"); -+ const fs::path notify_send_path = "@libnotify@/bin/notify-send"; - if (notify_send_path.empty()) { - return false; - } +@@ -93,7 +93,7 @@ std::string PluginInfo::wine_version() const { + // The '*.exe' scripts generated by winegcc allow you to override the binary + // used to run Wine, so will will handle this in the same way for our Wine + // version detection. We'll be using `execvpe` +- std::string wine_path = "wine"; ++ std::string wine_path = "@wine@/bin/wine"; + // NOLINTNEXTLINE(concurrency-mt-unsafe) + if (const char* wineloader_path = getenv("WINELOADER"); + wineloader_path && access(wineloader_path, X_OK) == 0) { diff --git a/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch b/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch new file mode 100644 index 000000000000..4d714d38fa20 --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/yabridge/libyabridge-from-nix-profiles.patch @@ -0,0 +1,71 @@ +diff --git a/src/chainloader/utils.cpp b/src/chainloader/utils.cpp +index ccd65d33..c7136b37 100644 +--- a/src/chainloader/utils.cpp ++++ b/src/chainloader/utils.cpp +@@ -29,8 +29,10 @@ + namespace fs = ghc::filesystem; + + void* find_plugin_library(const std::string& name) { ++ Logger logger = Logger::create_exception_logger(); ++ + // Just using a goto for this would probably be cleaner, but yeah... +- const auto impl = [&name]() -> void* { ++ const auto impl = [&name, &logger]() -> void* { + // If `name` exists right next to the Wine plugin host binary, then + // we'll try loading that. Otherwise we'll fall back to regular + // `dlopen()` for distro packaged versions of yabridge +@@ -52,27 +54,28 @@ void* find_plugin_library(const std::string& name) { + } + } + +- if (void* handle = dlopen(name.c_str(), RTLD_LAZY | RTLD_LOCAL)) { +- return handle; ++ auto nix_profiles = getenv("NIX_PROFILES"); ++ if (!nix_profiles || nix_profiles[0] == '\0') { ++ logger.log(""); ++ logger.log("ERROR: 'NIX_PROFILES' environment variable is not set"); ++ logger.log(""); ++ return nullptr; + } + +- // One last Hail Mary, in case ldconfig was not set up correctly. This +- // might be relevant for some of the `/usr/local/*` locations (although +- // you really, really shouldn't install yabridge there, please, thank +- // you). Yabridgectl searches through these same directories. +- for (const auto& lib_dir : { +- "/usr/lib", +- "/usr/lib/x86_64-linux-gnu", +- "/usr/lib64", +- "/usr/local/lib", +- "/usr/local/lib/x86_64-linux-gnu", +- "/usr/local/lib64", +- }) { +- const fs::path candidate = fs::path(lib_dir) / name; +- if (void* handle = +- dlopen(candidate.c_str(), RTLD_LAZY | RTLD_LOCAL)) { ++ // NIX_PROFILES is iterated in reverse from the most specific (the ++ // user profile) to the least specific (the system profile). ++ const std::string_view nix_profiles_view = nix_profiles; ++ auto segment_end = nix_profiles_view.size(); ++ while (segment_end != std::string::npos) { ++ const auto next_segment_end = nix_profiles_view.rfind(' ', segment_end - 1); ++ const auto segment_begin = next_segment_end + 1; ++ const auto profile = nix_profiles_view.substr(segment_begin, segment_end - segment_begin); ++ const auto candidate = fs::path(profile) / "lib" / name; ++ if (auto handle = dlopen(candidate.c_str(), RTLD_LAZY | RTLD_LOCAL)) { + return handle; + } ++ ++ segment_end = next_segment_end; + } + + return nullptr; +@@ -82,8 +85,6 @@ void* find_plugin_library(const std::string& name) { + if (!handle) { + const fs::path this_plugin_path = get_this_file_location(); + +- Logger logger = Logger::create_exception_logger(); +- + logger.log(""); + logger.log("Could not find '" + name + "'"); + logger.log(""); diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch b/nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch index 905068f75f8c..b687a6c01ae2 100644 --- a/nixpkgs/pkgs/tools/audio/yabridgectl/libyabridge-from-nix-profiles.patch +++ b/nixpkgs/pkgs/tools/audio/yabridgectl/chainloader-from-nix-profiles.patch @@ -1,23 +1,23 @@ diff --git a/tools/yabridgectl/src/config.rs b/tools/yabridgectl/src/config.rs -index bc5f6a81..0fcd38d3 100644 +index 523a083b..399302e0 100644 --- a/tools/yabridgectl/src/config.rs +++ b/tools/yabridgectl/src/config.rs -@@ -23,6 +23,7 @@ use std::collections::{BTreeMap, BTreeSet, HashSet}; +@@ -22,6 +22,7 @@ use serde_derive::{Deserialize, Serialize}; + use std::collections::{BTreeMap, BTreeSet, HashSet}; use std::env; - use std::fmt::Display; use std::fs; +use std::iter; use std::path::{Path, PathBuf}; use which::which; use xdg::BaseDirectories; -@@ -235,34 +236,27 @@ impl Config { +@@ -213,34 +214,27 @@ impl Config { } } None => { - // Search in the system library locations and in `~/.local/share/yabridge` if no - // path was set explicitely. We'll also search through `/usr/local/lib` just in case - // but since we advocate against installing yabridge there we won't list this path -- // in the error message when `libyabridge-vst2.so` can't be found. +- // in the error message when `libyabridge-chainloader-vst2.so` can't be found. - let system_path = Path::new("/usr/lib"); + // Search through NIX_PROFILES & data home directory if no path was set explicitly. + // NIX_PROFILES is iterated in reverse from the most specific (the user profile) to @@ -43,7 +43,7 @@ index bc5f6a81..0fcd38d3 100644 + let mut candidates = lib_directories - .iter() - .map(|directory| directory.join(LIBYABRIDGE_VST2_NAME)); + .map(|directory| directory.join(VST2_CHAINLOADER_NAME)); + match candidates.find(|directory| directory.exists()) { Some(candidate) => candidate, @@ -53,21 +53,21 @@ index bc5f6a81..0fcd38d3 100644 - default search path using 'yabridgectl set --path=<path>'.", + "Could not find '{}' through 'NIX_PROFILES' or '{}'. You can override the \ + default search path using 'yabridgectl set --path=<path>'.", - LIBYABRIDGE_VST2_NAME, + VST2_CHAINLOADER_NAME, - system_path.display(), user_path.display() )); } diff --git a/tools/yabridgectl/src/main.rs b/tools/yabridgectl/src/main.rs -index 48cce4fa..209e40e4 100644 +index 302ff8ae..9d9bbeac 100644 --- a/tools/yabridgectl/src/main.rs +++ b/tools/yabridgectl/src/main.rs -@@ -151,7 +151,7 @@ fn main() -> Result<()> { - .help("Path to the directory containing 'libyabridge-{vst2,vst3}.so'") +@@ -130,7 +130,7 @@ fn main() -> Result<()> { + .help("Path to the directory containing 'libyabridge-chainloader-{vst2,vst3}.so'") .long_help( - "Path to the directory containing 'libyabridge-{vst2,vst3}.so'. If this \ -- is not set, then yabridgectl will look in both '/usr/lib' and \ -+ is not set, then yabridgectl will look through 'NIX_PROFILES' and \ + "Path to the directory containing 'libyabridge-chainloader-{vst2,vst3}.so'. \ +- If this is not set, then yabridgectl will look in both '/usr/lib' and \ ++ If this is not set, then yabridgectl will look through 'NIX_PROFILES' and \ '~/.local/share/yabridge' by default.", ) .validator(validate_path) diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix b/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix index d2e8438e0c9e..ebd5577e7d13 100644 --- a/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix +++ b/nixpkgs/pkgs/tools/audio/yabridgectl/default.nix @@ -11,13 +11,14 @@ rustPlatform.buildRustPackage rec { src = yabridge.src; sourceRoot = "source/tools/yabridgectl"; - cargoSha256 = "sha256-pwy2Q2HUCihr7W81hGvDm9EiZHk9G8knSy0yxPy6hl8="; + cargoSha256 = "sha256-09GsrQAI08Qih/TpbEAh4hn7IfvwyFdEoyzsSjcjGXY="; patches = [ - # By default, yabridgectl locates libyabridge.so by using - # hard coded distro specific lib paths. This patch replaces those - # hard coded paths with lib paths from NIX_PROFILES. - ./libyabridge-from-nix-profiles.patch + # Patch yabridgectl to search for the chainloader through NIX_PROFILES + ./chainloader-from-nix-profiles.patch + + # Dependencies are hardcoded in yabridge, so the check is unnecessary and likely incorrect + ./remove-dependency-verification.patch ]; patchFlags = [ "-p3" ]; @@ -26,12 +27,14 @@ rustPlatform.buildRustPackage rec { postFixup = '' wrapProgram "$out/bin/yabridgectl" \ - --prefix PATH : ${lib.makeBinPath [ wine ]} + --prefix PATH : ${lib.makeBinPath [ + wine # winedump + ]} ''; meta = with lib; { description = "A small, optional utility to help set up and update yabridge for several directories at once"; - homepage = "https://github.com/robbert-vdh/yabridge/tree/master/tools/yabridgectl"; + homepage = "${src.meta.homepage}/tree/${version}/tools/yabridgectl"; license = licenses.gpl3Plus; maintainers = with maintainers; [ kira-bruneau ]; platforms = yabridge.meta.platforms; diff --git a/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch b/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch new file mode 100644 index 000000000000..2f860fb4f15e --- /dev/null +++ b/nixpkgs/pkgs/tools/audio/yabridgectl/remove-dependency-verification.patch @@ -0,0 +1,18 @@ +diff --git a/tools/yabridgectl/src/actions.rs b/tools/yabridgectl/src/actions.rs +index 9ecdb140..061a8ff3 100644 +--- a/tools/yabridgectl/src/actions.rs ++++ b/tools/yabridgectl/src/actions.rs +@@ -712,13 +712,6 @@ pub fn do_sync(config: &mut Config, options: &SyncOptions) -> Result<()> { + // be the case if we get to this point though. + verify_path_setup(config)?; + +- // This check is only performed once per combination of Wine and yabridge versions +- verify_wine_setup(config)?; +- +- // Yabridge uses notify-send to relay important information when something's very wrong, so +- // we'll check whether this is installed +- verify_external_dependencies()?; +- + Ok(()) + } + |