diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/video')
365 files changed, 28589 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/video/adl/default.nix b/nixpkgs/pkgs/applications/video/adl/default.nix new file mode 100644 index 000000000000..6bf36cc375b8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/adl/default.nix @@ -0,0 +1,44 @@ +{ lib, stdenv, fetchFromGitHub, pkgs, makeWrapper, ... }: + +stdenv.mkDerivation rec { + pname = "adl"; + version = "3.0.1"; + + src = fetchFromGitHub { + owner = "RaitaroH"; + repo = "adl"; + rev = "65f68e1dcae4c0caa52668d3a854269e7d226f7c"; + sha256 = "sha256-huGpDtkWrhZyKDNKXat8T3qtAyMjBaq8HFd1w1ThUVk="; + }; + + nativeBuildInputs = [ makeWrapper ]; + + # https://github.com/RaitaroH/adl#requirements + buildInputs = with pkgs; [ + anime-downloader + frece + fzf + mpv + perl + trackma + ueberzug + ]; + + dontBuild = true; + + installPhase = '' + mkdir -p $out/bin + cp $src/adl $out/bin + wrapProgram $out/bin/adl \ + --prefix PATH : ${lib.makeBinPath buildInputs} + ''; + + meta = with lib; { + homepage = "https://github.com/RaitaroH/adl"; + description = "popcorn anime-downloader + trackma wrapper"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ ]; + mainProgram = "adl"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/aegisub/default.nix b/nixpkgs/pkgs/applications/video/aegisub/default.nix new file mode 100644 index 000000000000..2c01d052eeda --- /dev/null +++ b/nixpkgs/pkgs/applications/video/aegisub/default.nix @@ -0,0 +1,163 @@ +{ lib +, config +, stdenv +, fetchFromGitHub +, boost179 +, cmake +, expat +, harfbuzz +, ffmpeg +, ffms +, fftw +, fontconfig +, freetype +, fribidi +, glib +, icu +, intltool +, libGL +, libGLU +, libX11 +, libass +, libiconv +, libuchardet +, luajit +, pcre +, pkg-config +, which +, wrapGAppsHook +, wxGTK +, zlib + +, spellcheckSupport ? true +, hunspell ? null + +, openalSupport ? false +, openal ? null + +, alsaSupport ? stdenv.isLinux +, alsa-lib ? null + +, pulseaudioSupport ? config.pulseaudio or stdenv.isLinux +, libpulseaudio ? null + +, portaudioSupport ? false +, portaudio ? null + +, useBundledLuaJIT ? false +, darwin +}: + +assert spellcheckSupport -> (hunspell != null); +assert openalSupport -> (openal != null); +assert alsaSupport -> (alsa-lib != null); +assert pulseaudioSupport -> (libpulseaudio != null); +assert portaudioSupport -> (portaudio != null); + +let + luajit52 = luajit.override { enable52Compat = true; }; + inherit (lib) optional; + inherit (darwin.apple_sdk.frameworks) CoreText CoreFoundation AppKit Carbon IOKit Cocoa; +in +stdenv.mkDerivation rec { + pname = "aegisub"; + version = "3.3.3"; + + src = fetchFromGitHub { + owner = "wangqr"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-oKhLv81EFudrJaaJ2ga3pVh4W5Hd2YchpjsoYoqRm78="; + }; + + nativeBuildInputs = [ + intltool + luajit52 + pkg-config + which + cmake + wrapGAppsHook + ]; + + buildInputs = [ + boost179 + expat + ffmpeg + ffms + fftw + fontconfig + freetype + fribidi + glib + harfbuzz + icu + libGL + libGLU + libX11 + libass + libiconv + libuchardet + pcre + wxGTK + zlib + ] + ++ lib.optionals stdenv.isDarwin [ + CoreText + CoreFoundation + AppKit + Carbon + IOKit + Cocoa + ] + ++ optional alsaSupport alsa-lib + ++ optional openalSupport openal + ++ optional portaudioSupport portaudio + ++ optional pulseaudioSupport libpulseaudio + ++ optional spellcheckSupport hunspell + ; + + enableParallelBuilding = true; + + hardeningDisable = [ + "bindnow" + "relro" + ]; + + patches = lib.optionals (!useBundledLuaJIT) [ + ./remove-bundled-luajit.patch + ]; + + # error: unknown type name 'NSUInteger' + postPatch = '' + substituteInPlace src/dialog_colorpicker.cpp \ + --replace "NSUInteger" "size_t" + ''; + + env.NIX_CFLAGS_COMPILE = "-I${luajit52}/include"; + NIX_CFLAGS_LINK = "-L${luajit52}/lib"; + + configurePhase = '' + export FORCE_GIT_VERSION=${version} + # Workaround for a Nixpkgs bug; remove when the fix arrives + mkdir build-dir + cd build-dir + cmake -DCMAKE_INSTALL_PREFIX=$out .. + ''; + + meta = with lib; { + homepage = "https://github.com/wangqr/Aegisub"; + description = "An advanced subtitle editor"; + longDescription = '' + Aegisub is a free, cross-platform open source tool for creating and + modifying subtitles. Aegisub makes it quick and easy to time subtitles to + audio, and features many powerful tools for styling them, including a + built-in real-time video preview. + ''; + # The Aegisub sources are itself BSD/ISC, but they are linked against GPL'd + # softwares - so the resulting program will be GPL + license = licenses.bsd3; + maintainers = with maintainers; [ AndersonTorres wegank ]; + platforms = platforms.unix; + mainProgram = "aegisub"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/aegisub/remove-bundled-luajit.patch b/nixpkgs/pkgs/applications/video/aegisub/remove-bundled-luajit.patch new file mode 100644 index 000000000000..d2b7dd0b5755 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/aegisub/remove-bundled-luajit.patch @@ -0,0 +1,271 @@ +diff --git a/CMakeLists.test.txt b/CMakeLists.test.txt +index 4d1a03177..62fab05c9 100644 +--- a/CMakeLists.test.txt ++++ b/CMakeLists.test.txt +@@ -2,7 +2,7 @@ if(UNIX) + add_executable(aegisub-lua EXCLUDE_FROM_ALL + automation/tests/aegisub.cpp + ) +- target_link_libraries(aegisub-lua PRIVATE libaegisub luabins luajit "Boost::locale" "ICU::in") ++ target_link_libraries(aegisub-lua PRIVATE libaegisub luabins luajit-5.1 "Boost::locale" "ICU::in") + add_custom_target(test-automation + COMMAND sh -c "$(luarocks path); ${PROJECT_BINARY_DIR}/aegisub-lua tests/busted.lua -p moon tests/modules" + VERBATIM +diff --git a/CMakeLists.txt b/CMakeLists.txt +index ce2e355ff..4d4396451 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -13,210 +13,6 @@ if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) + endif() + +-## Build bundled LuaJIT with aegisub specific patches +-add_executable(luajit-minilua vendor/luajit/src/host/minilua.c) +-if(NOT WIN32) +- target_link_libraries(luajit-minilua m) +-endif() +-if(WIN32) +- if(CMAKE_SIZEOF_VOID_P EQUAL 8) +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -LN -D WIN -D JIT -D FFI -D P64 -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_x86.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- else() +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -LN -D WIN -D JIT -D FFI -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_x86.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- endif() +-elseif(APPLE) +- if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -D ENDIAN_LE -D P64 -D FFI -D DUALNUM -D FPU -D HFABI -D NO_UNWIND -D VER=80 -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_arm64.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- else() +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -D P64 -D JIT -D FFI -D FPU -D HFABI -D VER= -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_x64.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- endif() +-else() +- if(CMAKE_SIZEOF_VOID_P EQUAL 8) +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -D P64 -D JIT -D FFI -D FPU -D HFABI -D VER= -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_x86.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- else() +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" +- COMMAND luajit-minilua ../dynasm/dynasm.lua -D JIT -D FFI -D FPU -D HFABI -D VER= -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" vm_x86.dasc +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +- ) +- endif() +-endif() +- +-add_executable(luajit-buildvm +- vendor/luajit/src/host/buildvm.c +- vendor/luajit/src/host/buildvm_asm.c +- vendor/luajit/src/host/buildvm_peobj.c +- vendor/luajit/src/host/buildvm_lib.c +- vendor/luajit/src/host/buildvm_fold.c +- +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/buildvm_arch.h" +-) +-target_compile_definitions(luajit-buildvm PRIVATE LUAJIT_ENABLE_LUA52COMPAT) +-target_include_directories(luajit-buildvm PRIVATE vendor/luajit/src "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen") +- +-if(APPLE) +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.s" +- COMMAND luajit-buildvm -m machasm -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.s" +- ) +-elseif(UNIX) +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.s" +- COMMAND luajit-buildvm -m elfasm -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.s" +- ) +-elseif(MSVC) +- add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.obj" +- COMMAND luajit-buildvm -m peobj -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.obj" +- ) +-endif() +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_ffdef.h" +- COMMAND luajit-buildvm -m ffdef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_ffdef.h" lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_bcdef.h" +- COMMAND luajit-buildvm -m bcdef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_bcdef.h" lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_folddef.h" +- COMMAND luajit-buildvm -m folddef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_folddef.h" lj_opt_fold.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_recdef.h" +- COMMAND luajit-buildvm -m recdef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_recdef.h" lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_libdef.h" +- COMMAND luajit-buildvm -m libdef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_libdef.h" lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +-add_custom_command( +- OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/jit/vmdef.lua" +- COMMAND luajit-buildvm -m vmdef -o "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/jit/vmdef.lua" lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c +- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/vendor/luajit/src +-) +- +-add_library(luajit STATIC +- vendor/luajit/src/lib_base.c +- vendor/luajit/src/lib_math.c +- vendor/luajit/src/lib_bit.c +- vendor/luajit/src/lib_string.c +- vendor/luajit/src/lib_table.c +- vendor/luajit/src/lib_io.c +- vendor/luajit/src/lib_os.c +- vendor/luajit/src/lib_package.c +- vendor/luajit/src/lib_debug.c +- vendor/luajit/src/lib_jit.c +- vendor/luajit/src/lib_ffi.c +- vendor/luajit/src/lj_gc.c +- vendor/luajit/src/lj_err.c +- vendor/luajit/src/lj_char.c +- vendor/luajit/src/lj_bc.c +- vendor/luajit/src/lj_obj.c +- vendor/luajit/src/lj_buf.c +- vendor/luajit/src/lj_str.c +- vendor/luajit/src/lj_tab.c +- vendor/luajit/src/lj_func.c +- vendor/luajit/src/lj_udata.c +- vendor/luajit/src/lj_meta.c +- vendor/luajit/src/lj_debug.c +- vendor/luajit/src/lj_state.c +- vendor/luajit/src/lj_dispatch.c +- vendor/luajit/src/lj_vmevent.c +- vendor/luajit/src/lj_vmmath.c +- vendor/luajit/src/lj_strscan.c +- vendor/luajit/src/lj_strfmt.c +- vendor/luajit/src/lj_strfmt_num.c +- vendor/luajit/src/lj_api.c +- vendor/luajit/src/lj_profile.c +- vendor/luajit/src/lj_lex.c +- vendor/luajit/src/lj_parse.c +- vendor/luajit/src/lj_bcread.c +- vendor/luajit/src/lj_bcwrite.c +- vendor/luajit/src/lj_load.c +- vendor/luajit/src/lj_ir.c +- vendor/luajit/src/lj_opt_mem.c +- vendor/luajit/src/lj_opt_fold.c +- vendor/luajit/src/lj_opt_narrow.c +- vendor/luajit/src/lj_opt_dce.c +- vendor/luajit/src/lj_opt_loop.c +- vendor/luajit/src/lj_opt_split.c +- vendor/luajit/src/lj_opt_sink.c +- vendor/luajit/src/lj_mcode.c +- vendor/luajit/src/lj_snap.c +- vendor/luajit/src/lj_record.c +- vendor/luajit/src/lj_crecord.c +- vendor/luajit/src/lj_ffrecord.c +- vendor/luajit/src/lj_asm.c +- vendor/luajit/src/lj_trace.c +- vendor/luajit/src/lj_gdbjit.c +- vendor/luajit/src/lj_ctype.c +- vendor/luajit/src/lj_cdata.c +- vendor/luajit/src/lj_cconv.c +- vendor/luajit/src/lj_ccall.c +- vendor/luajit/src/lj_ccallback.c +- vendor/luajit/src/lj_carith.c +- vendor/luajit/src/lj_clib.c +- vendor/luajit/src/lj_cparse.c +- vendor/luajit/src/lj_lib.c +- vendor/luajit/src/lj_alloc.c +- vendor/luajit/src/lib_aux.c +- vendor/luajit/src/lib_init.c +- +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_ffdef.h" +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_bcdef.h" +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_folddef.h" +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_recdef.h" +- "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen/lj_libdef.h" +- # "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/jit/vmdef.lua" +-) +-target_compile_definitions(luajit PRIVATE LUAJIT_ENABLE_LUA52COMPAT) +-target_include_directories(luajit PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/gen" PUBLIC "vendor/luajit/src") +-if(WIN32) +- target_sources(luajit PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.obj") +-else() +- enable_language(ASM) +- target_sources(luajit PRIVATE "${CMAKE_CURRENT_BINARY_DIR}/vendor/luajit/src/lj_vm.s") +- target_link_libraries(luajit ${CMAKE_DL_LIBS}) +-endif() +-if(APPLE) +- if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64") +- target_compile_definitions(luajit-buildvm PRIVATE LUAJIT_ENABLE_GC64) +- target_compile_definitions(luajit PRIVATE LUAJIT_ENABLE_GC64) +- endif() +-endif() +- + add_subdirectory(vendor/luabins) + + ## libaegisub +@@ -310,18 +106,18 @@ if(APPLE) + else() + target_precompile_headers(libaegisub PRIVATE "libaegisub/lagi_pre.h") + endif() +-target_link_libraries(libaegisub PRIVATE luajit luabins) ++target_link_libraries(libaegisub PRIVATE luajit-5.1 luabins) + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/default_config.cpp" "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/default_config.h" + DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/default_config_platform.json" +- COMMAND luajit-minilua "${PROJECT_SOURCE_DIR}/tools/respack.lua" manifest.respack default_config.cpp default_config.h ++ COMMAND luajit "${PROJECT_SOURCE_DIR}/tools/respack.lua" manifest.respack default_config.cpp default_config.h + WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc" + ) + + add_custom_command( + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.cpp" "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.h" +- COMMAND luajit-minilua ../../tools/respack.lua manifest.respack "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.cpp" "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.h" ++ COMMAND luajit ../../tools/respack.lua manifest.respack "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.cpp" "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc/bitmap.h" + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src/bitmaps + ) + +@@ -496,7 +292,7 @@ add_executable(Aegisub WIN32 + src/video_slider.cpp + src/visual_feature.cpp + ) +-target_link_libraries(Aegisub PRIVATE ${CMAKE_DL_LIBS} libaegisub luajit) ++target_link_libraries(Aegisub PRIVATE ${CMAKE_DL_LIBS} libaegisub luajit-5.1) + target_compile_definitions(Aegisub PRIVATE CMAKE_BUILD) + target_include_directories(Aegisub PRIVATE "src/libresrc" "${CMAKE_CURRENT_BINARY_DIR}/src/libresrc") + if(APPLE) +diff --git a/vendor/luabins/CMakeLists.txt b/vendor/luabins/CMakeLists.txt +index 1fe1d2031..e2761527b 100644 +--- a/vendor/luabins/CMakeLists.txt ++++ b/vendor/luabins/CMakeLists.txt +@@ -36,4 +36,4 @@ add_library(luabins STATIC + src/savebuffer.c + src/write.c + ) +-target_link_libraries(luabins PRIVATE luajit) +\ No newline at end of file ++target_link_libraries(luabins PRIVATE luajit-5.1) +\ No newline at end of file diff --git a/nixpkgs/pkgs/applications/video/alass/default.nix b/nixpkgs/pkgs/applications/video/alass/default.nix new file mode 100644 index 000000000000..d6b6da1fd6b5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/alass/default.nix @@ -0,0 +1,34 @@ +{ lib +, fetchFromGitHub +, rustPlatform +, makeWrapper +, ffmpeg +}: + +rustPlatform.buildRustPackage rec { + pname = "alass"; + version = "2.0.0"; + + src = fetchFromGitHub { + owner = "kaegi"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-q1IV9TtmznpR7RO75iN0p16nmTja5ADWqFj58EOPWvU="; + }; + + cargoSha256 = "sha256-6swIoVp1B4CMvaGvq868LTKkzpI6zFKJNgUVqjdyH20="; + + nativeBuildInputs = [ makeWrapper ]; + + postInstall = '' + wrapProgram "$out/bin/alass-cli" --prefix PATH : "${lib.makeBinPath [ ffmpeg ]}" + ''; + + meta = with lib; { + description = "Automatic Language-Agnostic Subtitles Synchronization"; + homepage = "https://github.com/kaegi/alass"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ erictapen ]; + mainProgram = "alass-cli"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/ani-cli/default.nix b/nixpkgs/pkgs/applications/video/ani-cli/default.nix new file mode 100644 index 000000000000..f4d174474df2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/ani-cli/default.nix @@ -0,0 +1,63 @@ +{ fetchFromGitHub +, makeWrapper +, stdenvNoCC +, lib +, gnugrep +, gnused +, curl +, catt +, syncplay +, ffmpeg +, fzf +, aria2 +, withMpv ? true, mpv +, withVlc ? false, vlc +, withIina ? false, iina +, chromecastSupport ? false +, syncSupport ? false +}: + +assert withMpv || withVlc || withIina; + +stdenvNoCC.mkDerivation rec { + pname = "ani-cli"; + version = "4.8"; + + src = fetchFromGitHub { + owner = "pystardust"; + repo = "ani-cli"; + rev = "v${version}"; + hash = "sha256-vntCiWaONndjU622c1BoCoASQxQf/i7yO0x+70OxzPU="; + }; + + nativeBuildInputs = [ makeWrapper ]; + runtimeDependencies = + let player = [] + ++ lib.optional withMpv mpv + ++ lib.optional withVlc vlc + ++ lib.optional withIina iina; + in [ gnugrep gnused curl fzf ffmpeg aria2 ] + ++ player + ++ lib.optional chromecastSupport catt + ++ lib.optional syncSupport syncplay; + + installPhase = '' + runHook preInstall + + install -Dm755 ani-cli $out/bin/ani-cli + + wrapProgram $out/bin/ani-cli \ + --prefix PATH : ${lib.makeBinPath runtimeDependencies} + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/pystardust/ani-cli"; + description = "A cli tool to browse and play anime"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ skykanin ]; + platforms = platforms.unix; + mainProgram = "ani-cli"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0001-fix-installation-paths.patch b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0001-fix-installation-paths.patch new file mode 100644 index 000000000000..14f9799e46bd --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0001-fix-installation-paths.patch @@ -0,0 +1,24 @@ +diff --git a/AniLibria.pro b/AniLibria.pro +index 3eb7213..ea571ff 100644 +--- a/AniLibria.pro ++++ b/AniLibria.pro +@@ -271,17 +271,8 @@ QML_IMPORT_PATH = + # Additional import path used to resolve QML modules just for Qt Quick Designer + QML_DESIGNER_IMPORT_PATH = + +-# Default rules for deployment. +-!flatpak{ +- qnx: target.path = /tmp/$${TARGET}/bin +- else: unix:!android: target.path = /opt/$${TARGET}/bin +-}else{ +- target.path = $$PREFIX/bin +-} +-!isEmpty(target.path) { +- unix: INSTALLS += target desktop $${UNIX_ICONS} +- else:macx: INSTALLS += target +-} ++target.path = $$PREFIX/bin ++INSTALLS += target $${UNIX_ICONS} + + flatpak { + metadata.path = $$PREFIX/share/metainfo diff --git a/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0002-disable-version-check.patch b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0002-disable-version-check.patch new file mode 100644 index 000000000000..f8f00f15be1c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0002-disable-version-check.patch @@ -0,0 +1,12 @@ +diff --git a/AniLibria.pro b/AniLibria.pro +index 3eb7213..3d39ec9 100644 +--- a/AniLibria.pro ++++ b/AniLibria.pro +@@ -174,7 +174,6 @@ unix { + DEFINES += QT_DEPRECATED_WARNINGS + + # If you need not check version remove or comment this line +-DEFINES += USE_VERSION_CHECK + + # You can also make your code fail to compile if it uses deprecated APIs. + # In order to do so, uncomment the following line. diff --git a/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0003-build-with-vlc.patch b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0003-build-with-vlc.patch new file mode 100644 index 000000000000..6bdfcf2c2d2a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/0003-build-with-vlc.patch @@ -0,0 +1,28 @@ +diff --git a/AniLibria.pro b/AniLibria.pro +index 407dbde..ae69502 100644 +--- a/AniLibria.pro ++++ b/AniLibria.pro +@@ -21,17 +21,17 @@ windows { + DEFINES += NO_NEED_STANDART_PLAYER + } + +-#unix { +-# LIBS += -lvlc ++unix { ++ LIBS += -lvlc + + # INCLUDEPATH += /usr/include/ + # DEPENDPATH += /usr/include/ + +-# INCLUDEPATH += /usr/include/vlc/plugins +-# DEPENDPATH += /usr/include/vlc/plugins ++ INCLUDEPATH += @VLC_PATH@/vlc/plugins ++ DEPENDPATH += @VLC_PATH@/vlc/plugins + +-# CONFIG += buildwithvlc +-#} ++ CONFIG += buildwithvlc ++} + + buildwithvlc { + DEFINES += USE_VLC_PLAYER diff --git a/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/default.nix b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/default.nix new file mode 100644 index 000000000000..ee6c34965200 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anilibria-winmaclinux/default.nix @@ -0,0 +1,95 @@ +{ mkDerivation +, lib +, fetchFromGitHub +, qmake +, pkg-config +, qtbase +, qtquickcontrols2 +, qtwebsockets +, qtmultimedia +, gst_all_1 +, wrapQtAppsHook +, makeDesktopItem +, copyDesktopItems +, libvlc +}: + +mkDerivation rec { + pname = "anilibria-winmaclinux"; + version = "1.2.14"; + + src = fetchFromGitHub { + owner = "anilibria"; + repo = "anilibria-winmaclinux"; + rev = "d941607f078c72fca104ee1e7916cc0ddcc0acf5"; + sha256 = "sha256-G4KlYAjOT1UV29vcX7Q8dMTj0BX0rsJcLtK2MQag5nU="; + }; + + sourceRoot = "source/src"; + + qmakeFlags = [ "PREFIX=${placeholder "out"}" "CONFIG+=unixvlc" ]; + + patches = [ + ./0001-fix-installation-paths.patch + ./0002-disable-version-check.patch + ]; + + preConfigure = '' + substituteInPlace AniLibria.pro \ + --replace "\$\$PREFIX" '${placeholder "out"}' + ''; + + qtWrapperArgs = [ + "--prefix GST_PLUGIN_PATH : ${(with gst_all_1; lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" [ + gst-plugins-bad + gst-plugins-good + gst-plugins-base + gst-libav + gstreamer + ])}" + ]; + + nativeBuildInputs = [ + qmake + pkg-config + wrapQtAppsHook + copyDesktopItems + ]; + + buildInputs = [ + qtbase + qtquickcontrols2 + qtwebsockets + qtmultimedia + libvlc + ] ++ (with gst_all_1; [ + gst-plugins-bad + gst-plugins-good + gst-plugins-base + gst-libav + gstreamer + ]); + + desktopItems = [ + (makeDesktopItem (rec { + name = "AniLibria"; + desktopName = name; + icon = "anilibria"; + comment = meta.description; + genericName = "AniLibria desktop client"; + categories = [ "Qt" "AudioVideo" "Player" ]; + keywords = [ "anime" ]; + exec = name; + terminal = false; + })) + ]; + + meta = with lib; { + homepage = "https://github.com/anilibria/anilibria-winmaclinux"; + description = "AniLibria cross platform desktop client"; + license = licenses.gpl3; + maintainers = with maintainers; [ _3JlOy-PYCCKUi ]; + inherit (qtbase.meta) platforms; + mainProgram = "AniLibria"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/animdl/default.nix b/nixpkgs/pkgs/applications/video/animdl/default.nix new file mode 100644 index 000000000000..3f1be6f5833a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/animdl/default.nix @@ -0,0 +1,63 @@ +{ lib, + buildPythonApplication, + fetchFromGitHub, + poetry-core, + anchor-kr, + anitopy, + click, + cssselect, + httpx, + lxml, + packaging, + pkginfo, + pycryptodomex, + pyyaml, + regex, + rich, + tqdm, + yarl +}: +buildPythonApplication { + pname = "animdl"; + version = "1.7.27"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "justfoolingaround"; + repo = "animdl"; + # Using the commit hash because upstream does not have releases. https://github.com/justfoolingaround/animdl/issues/277 + rev = "c7c3b79198e66695e0bbbc576f9d9b788616957f"; + hash = "sha256-kn6vCCFhJNlruxoO+PTHVIwTf1E5j1aSdBhrFuGzUq4="; + }; + + nativeBuildInputs = [ + poetry-core + ]; + propagatedBuildInputs = [ + anchor-kr + anitopy + click + cssselect + httpx + lxml + packaging + pkginfo + pycryptodomex + pyyaml + regex + rich + tqdm + yarl + ]; + + doCheck = true; + + meta = with lib; { + description = "A highly efficient, powerful and fast anime scraper"; + homepage = "https://github.com/justfoolingaround/animdl"; + license = licenses.gpl3Only; + mainProgram = "animdl"; + maintainers = with maintainers; [ passivelemon ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/anime-downloader/default.nix b/nixpkgs/pkgs/applications/video/anime-downloader/default.nix new file mode 100644 index 000000000000..5e4f58cea1d3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anime-downloader/default.nix @@ -0,0 +1,55 @@ +{ lib, python3, aria2, mpv, nodejs, qt5, fetchFromGitHub }: + +python3.pkgs.buildPythonApplication rec { + pname = "anime-downloader"; + version = "5.0.14"; + + src = fetchFromGitHub { + owner = "anime-dl"; + repo = "anime-downloader"; + rev = version; + sha256 = "sha256-Uk2mtsSrb8fCD9JCFzvLBzMEB7ViVDrKPSOKy9ALJ6o="; + }; + + nativeBuildInputs = [ qt5.wrapQtAppsHook ]; + + propagatedBuildInputs = [ + aria2 + mpv + nodejs + ] ++ (with python3.pkgs; [ + beautifulsoup4 + cfscrape + click + coloredlogs + fuzzywuzzy + jsbeautifier + pycryptodome + pysmartdl + pyqt5 + requests + requests-cache + selenium + tabulate + ]); + + preFixup = '' + wrapQtApp "$out/bin/anime" --prefix PATH : ${lib.makeBinPath propagatedBuildInputs} + ''; + + doCheck = false; + # FIXME: checks must be disabled because they are lacking the qt env. + # They fail like this, even if built and wrapped with all Qt and runtime dependencies. + # Ref.: https://github.com/NixOS/nixpkgs/blob/634141959076a8ab69ca2cca0f266852256d79ee/pkgs/applications/misc/openlp/lib.nix#L20-L23 + + passthru.updateScript = ./update.sh; + + meta = with lib; { + homepage = "https://github.com/anime-dl/anime-downloader"; + description = "A simple but powerful anime downloader and streamer"; + license = licenses.unlicense; + platforms = platforms.linux; + maintainers = with maintainers; [ ]; + mainProgram = "anime"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/anime-downloader/update.sh b/nixpkgs/pkgs/applications/video/anime-downloader/update.sh new file mode 100755 index 000000000000..292299298ad9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/anime-downloader/update.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl jq common-updater-scripts + +set -eu -o pipefail + +version="$(curl --silent "https://api.github.com/repos/anime-dl/anime-downloader/releases" | jq '.[0].tag_name' --raw-output)" + +update-source-version anime-downloader "$version" diff --git a/nixpkgs/pkgs/applications/video/asciicam/default.nix b/nixpkgs/pkgs/applications/video/asciicam/default.nix new file mode 100644 index 000000000000..6a600fec3083 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/asciicam/default.nix @@ -0,0 +1,28 @@ +{ lib +, buildGoModule +, fetchFromGitHub +}: + +buildGoModule { + pname = "asciicam"; + version = "unstable-2022-06-25"; + + src = fetchFromGitHub { + owner = "muesli"; + repo = "asciicam"; + rev = "e17a9333fdfe5f7c4c610c6aac23419fe2cba7a9"; + hash = "sha256-BzMoyqp2chlQGA2Q9i8koXlH4pemN6q3P8gwM1i8ZAU="; + }; + + vendorHash = "sha256-Qnt1wo/yKC3Ce4JoZBIWtXyzlkh4bWz9vyE349iRsjk="; + + ldflags = [ "-s" "-w" ]; + + meta = with lib; { + description = "Displays your webcam on the terminal"; + homepage = "https://github.com/muesli/asciicam"; + license = licenses.mit; + maintainers = with maintainers; [ figsoda ]; + mainProgram = "asciicam"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/avidemux/bootstrap_logging.patch b/nixpkgs/pkgs/applications/video/avidemux/bootstrap_logging.patch new file mode 100644 index 000000000000..8f45251d26c2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/avidemux/bootstrap_logging.patch @@ -0,0 +1,26 @@ +diff --git a/bootStrap.bash b/bootStrap.bash +index 646a5e048..6429199ba 100644 +--- a/bootStrap.bash ++++ b/bootStrap.bash +@@ -4,6 +4,7 @@ + # + # By default we use qt5 now + # ++set -e # hard fail if something fails + packages_ext="" + rebuild=0 + do_core=1 +@@ -66,10 +67,10 @@ Process() + fi + cd $BUILDDIR + cmake $COMPILER $PKG $FAKEROOT $QT_FLAVOR -DCMAKE_EDIT_COMMAND=vim $INSTALL_PREFIX $EXTRA $BUILD_QUIRKS $ASAN $DEBUG -G "$BUILDER" $SOURCEDIR || fail cmakeZ +- make $PARAL >& /tmp/log$BUILDDIR || fail "make, result in /tmp/log$BUILDDIR" +- if [ "x$PKG" != "x" ] ; then ++ make $PARAL ++ if [ "x$PKG" != "x" ] ; then + $FAKEROOT_COMMAND make package DESTDIR=$FAKEROOT_DIR/tmp || fail package +- fi ++ fi + # we need the make install so that other packcges can be built against this one + make install DESTDIR=$FAKEROOT_DIR + } diff --git a/nixpkgs/pkgs/applications/video/avidemux/default.nix b/nixpkgs/pkgs/applications/video/avidemux/default.nix new file mode 100644 index 000000000000..c2b6d5be7325 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/avidemux/default.nix @@ -0,0 +1,114 @@ +{ stdenv, lib, fetchurl, fetchpatch, cmake, pkg-config +, zlib, gettext, libvdpau, libva, libXv, sqlite +, yasm, freetype, fontconfig, fribidi +, makeWrapper, libXext, libGLU, qttools, qtbase, wrapQtAppsHook +, alsa-lib +, withX265 ? true, x265 +, withX264 ? true, x264 +, withXvid ? true, xvidcore +, withLAME ? true, lame +, withFAAC ? false, faac +, withVorbis ? true, libvorbis +, withPulse ? true, libpulseaudio +, withFAAD ? true, faad2 +, withOpus ? true, libopus +, withVPX ? true, libvpx +, withQT ? true +, withCLI ? true +, default ? "qt5" +, withPlugins ? true +}: + +assert withQT -> qttools != null && qtbase != null; +assert default != "qt5" -> default == "cli"; +assert !withQT -> default != "qt5"; + +stdenv.mkDerivation rec { + pname = "avidemux"; + version = "2.8.1"; + + src = fetchurl { + url = "mirror://sourceforge/avidemux/avidemux/${version}/avidemux_${version}.tar.gz"; + sha256 = "sha256-d9m9yoaDzlfBkradIHz6t8+Sp3Wc4PY/o3tcjkKtPaI="; + }; + + patches = [ + ./dynamic_install_dir.patch + ./bootstrap_logging.patch + ]; + + postPatch = '' + cp ${fetchpatch { + # Backport fix for binutils-2.41. + name = "binutils-2.41.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/effadce6c756247ea8bae32dc13bb3e6f464f0eb"; + hash = "sha256-s9PcYbt0mFb2wvgMcFL1J+2OS6Sxyd2wYkGzLr2qd9M="; + stripLen = 1; + }} avidemux_core/ffmpeg_package/patches/ + ''; + + nativeBuildInputs = + [ yasm cmake pkg-config makeWrapper ] + ++ lib.optional withQT wrapQtAppsHook; + buildInputs = [ + zlib gettext libvdpau libva libXv sqlite fribidi fontconfig + freetype alsa-lib libXext libGLU + ] ++ lib.optional withX264 x264 + ++ lib.optional withX265 x265 + ++ lib.optional withXvid xvidcore + ++ lib.optional withLAME lame + ++ lib.optional withFAAC faac + ++ lib.optional withVorbis libvorbis + ++ lib.optional withPulse libpulseaudio + ++ lib.optional withFAAD faad2 + ++ lib.optional withOpus libopus + ++ lib.optionals withQT [ qttools qtbase ] + ++ lib.optional withVPX libvpx; + + dontWrapQtApps = true; + + buildCommand = let + wrapWith = makeWrapper: filename: + "${makeWrapper} ${filename} --set ADM_ROOT_DIR $out --prefix LD_LIBRARY_PATH : ${libXext}/lib"; + wrapQtApp = wrapWith "wrapQtApp"; + wrapProgram = wrapWith "wrapProgram"; + in '' + unpackPhase + cd "$sourceRoot" + patchPhase + + ${stdenv.shell} bootStrap.bash \ + --with-core \ + ${if withQT then "--with-qt" else "--without-qt"} \ + ${if withCLI then "--with-cli" else "--without-cli"} \ + ${if withPlugins then "--with-plugins" else "--without-plugins"} + + mkdir $out + cp -R install/usr/* $out + + ${wrapProgram "$out/bin/avidemux3_cli"} + + ${lib.optionalString withQT '' + ${wrapQtApp "$out/bin/avidemux3_qt5"} + ${wrapQtApp "$out/bin/avidemux3_jobs_qt5"} + ''} + + ln -s "$out/bin/avidemux3_${default}" "$out/bin/avidemux" + + # make the install path match the rpath + if [[ -d ''${!outputLib}/lib64 ]]; then + mv ''${!outputLib}/lib64 ''${!outputLib}/lib + ln -s lib ''${!outputLib}/lib64 + fi + fixupPhase + ''; + + meta = with lib; { + homepage = "http://fixounet.free.fr/avidemux/"; + description = "Free video editor designed for simple video editing tasks"; + maintainers = with maintainers; [ abbradar ]; + # "CPU not supported" errors on AArch64 + platforms = [ "i686-linux" "x86_64-linux" ]; + license = licenses.gpl2; + }; +} diff --git a/nixpkgs/pkgs/applications/video/avidemux/dynamic_install_dir.patch b/nixpkgs/pkgs/applications/video/avidemux/dynamic_install_dir.patch new file mode 100644 index 000000000000..803cde02ec2e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/avidemux/dynamic_install_dir.patch @@ -0,0 +1,12 @@ +diff -ru3 avidemux_2.6.15-old/avidemux_core/ADM_core/src/ADM_folder_linux.cpp avidemux_2.6.15/avidemux_core/ADM_core/src/ADM_folder_linux.cpp +--- avidemux_2.6.15-old/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2016-11-23 02:13:41.406566362 +0300 ++++ avidemux_2.6.15/avidemux_core/ADM_core/src/ADM_folder_linux.cpp 2016-11-23 02:14:33.433566147 +0300 +@@ -92,7 +92,7 @@ + + char *ADM_getInstallRelativePath(const char *base1, const char *base2, const char *base3) + { +- return ADM_getRelativePath(ADM_INSTALL_DIR, base1, base2, base3); ++ return ADM_getRelativePath(getenv("ADM_ROOT_DIR"), base1, base2, base3); + } + const std::string ADM_getI8NDir(const std::string &flavor) + { diff --git a/nixpkgs/pkgs/applications/video/bilibili/default.nix b/nixpkgs/pkgs/applications/video/bilibili/default.nix new file mode 100644 index 000000000000..72c4f7bdbf3f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/bilibili/default.nix @@ -0,0 +1,50 @@ +{ lib +, stdenv +, fetchurl +, electron +, makeWrapper +}: + +stdenv.mkDerivation rec { + pname = "bilibili"; + version = "1.13.0-2"; + src = fetchurl { + url = "https://github.com/msojocs/bilibili-linux/releases/download/v${version}/io.github.msojocs.bilibili_${version}_amd64.deb"; + hash = "sha256-svTD8YZBFj0K9/3ggojiH+8cMRkCxHr/hHTC24NL2tE="; + }; + + unpackPhase = '' + runHook preUnpack + + ar x $src + tar xf data.tar.xz + + runHook postUnpack + ''; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + cp -r usr/share $out/share + sed -i "s|Exec=.*|Exec=$out/bin/bilibili|" $out/share/applications/*.desktop + cp -r opt/apps/io.github.msojocs.bilibili/files/bin/app $out/opt + makeWrapper ${electron}/bin/electron $out/bin/bilibili \ + --argv0 "bilibili" \ + --add-flags "$out/opt/app.asar" + + runHook postInstall + ''; + + meta = with lib; { + description = "Electron-based bilibili desktop client"; + homepage = "https://github.com/msojocs/bilibili-linux"; + license = with licenses; [ unfree mit ]; + maintainers = with maintainers; [ jedsek kashw2 ]; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + mainProgram = "bilibili"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/bino3d/default.nix b/nixpkgs/pkgs/applications/video/bino3d/default.nix new file mode 100644 index 000000000000..92096c6a3474 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/bino3d/default.nix @@ -0,0 +1,26 @@ +{ mkDerivation, lib, fetchurl, pkg-config, ffmpeg_4, glew, libass, openal, qtbase }: + +mkDerivation rec { + pname = "bino"; + version = "1.6.8"; + + src = fetchurl { + url = "https://bino3d.org/releases/${pname}-${version}.tar.xz"; + sha256 = "sha256-8sIdX+qm7CGPHIziFBHHIe+KEbhbwDY6w/iRm1V+so4="; + }; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ ffmpeg_4 glew libass openal qtbase ]; + + enableParallelBuilding = true; + + meta = with lib; { + description = "Stereoscopic 3D and multi-display video player"; + homepage = "https://bino3d.org/"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ orivej ]; + platforms = platforms.linux; + mainProgram = "bino"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/bombono/default.nix b/nixpkgs/pkgs/applications/video/bombono/default.nix new file mode 100644 index 000000000000..8ad77a668019 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/bombono/default.nix @@ -0,0 +1,95 @@ +{ lib, stdenv +, fetchFromGitHub +, pkg-config +, fetchpatch +, scons +, boost +, dvdauthor +, dvdplusrwtools +, enca +, cdrkit +, ffmpeg_4 +, gettext +, gtk2 +, gtkmm2 +, libdvdread +, libxmlxx +, mjpegtools +, wrapGAppsHook +}: + +let + fetchPatchFromAur = {name, sha256}: + fetchpatch { + inherit name sha256; + url = "https://aur.archlinux.org/cgit/aur.git/plain/${name}?h=766dd4ba1715fc921fe26ce1bdcf22c30f4fc073"; + }; +in +stdenv.mkDerivation rec { + pname = "bombono"; + version = "1.2.4"; + + src = fetchFromGitHub { + owner = "bombono-dvd"; + repo = "bombono-dvd"; + rev = version; + sha256 = "sha256-aRW8H8+ca/61jGLxUs7u3R7yEiulwr5viMEuZWbc4dM="; + }; + + patches = [ + (fetchpatch { + name = "bombono-dvd-1.2.4-scons3.patch"; + url = "https://svnweb.mageia.org/packages/cauldron/bombono-dvd/current/SOURCES/bombono-dvd-1.2.4-scons-python3.patch?revision=1447925&view=co&pathrev=1484457"; + sha256 = "sha256-5OKBWrRZvHem2MTdAObfdw76ig3Z4ZdDFtq4CJoJISA="; + }) + ] ++ (map fetchPatchFromAur [ + {name="fix_ffmpeg_codecid.patch"; sha256="sha256-58L+1BJy5HK/R+xALbq2z4+Se4i6yp21lo/MjylgTqs=";} + {name="fix_ptr2bool_cast.patch"; sha256="sha256-DyqMw/m2Op9+gBq1CTCjSZ1qM9igV5Y6gTOi8VbNH0c=";} + {name="fix_c++11_literal_warnings.patch"; sha256="sha256-iZ/CN5+xg7jPXl5r/KGCys+jyPu0/AsSABLcc6IIbv0=";} + {name="autoptr2uniqueptr.patch"; sha256="sha256-teGp6uICB4jAJk18pdbBMcDxC/JJJGkdihtXeh3ffCg=";} + {name="fix_deprecated_boost_api.patch"; sha256="sha256-qD5QuO/ndEU1N7vueQiNpPVz8OaX6Y6ahjCWxMdvj6A=";} + {name="fix_throw_specifications.patch"; sha256="sha256-NjCDGwXRCSLcuW2HbPOpXRgNvNQHy7i7hoOgyvGIr7g=";} + {name="fix_operator_ambiguity.patch"; sha256="sha256-xx7WyrxEdDrDuz5YoFrM/u2qJru9u6X/4+Y5rJdmmmQ=";} + {name="fix_ffmpeg30.patch"; sha256="sha256-vKEbvbjYVRzEaVYC8XOJBPmk6FDXI/WA0X/dldRRO8c=";} + {name="inc_boost_header.patch"; sha256="sha256-76vjkf62VsNJ5FmBEs+X7ZBqjvJ372mjSIreBxNQym8=";} + ]); + + postPatch = '' + substituteInPlace src/mbase/SConscript \ + --replace "lib_mbase_env['CPPDEFINES']" "list(lib_mbase_env['CPPDEFINES'])" + ''; + + nativeBuildInputs = [ wrapGAppsHook scons pkg-config gettext ]; + + buildInputs = [ + boost + dvdauthor + dvdplusrwtools + enca + ffmpeg_4 + gtk2 + gtkmm2 + libdvdread + libxmlxx + mjpegtools + ]; + + prefixKey = "PREFIX="; + + enableParallelBuilding = true; + + postInstall = '' + # fix iso authoring + install -Dt $out/share/bombono/resources/scons_authoring tools/scripts/SConsTwin.py + + wrapProgram $out/bin/bombono-dvd --prefix PATH : ${lib.makeBinPath [ ffmpeg_4 dvdauthor cdrkit ]} + ''; + + meta = with lib; { + description = "a DVD authoring program for personal computers"; + homepage = "https://www.bombono.org/"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ symphorien ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/byzanz/add-amflags.patch b/nixpkgs/pkgs/applications/video/byzanz/add-amflags.patch new file mode 100644 index 000000000000..aeaa195798a4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/byzanz/add-amflags.patch @@ -0,0 +1,12 @@ +diff --git a/Makefile.am b/Makefile.am +index 6eedb51..7b54313 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -1,5 +1,7 @@ + SUBDIRS = macros data gifenc src po + ++ACLOCAL_AMFLAGS = -I macros ++ + EXTRA_DIST = \ + MAINTAINERS \ + depcomp \ diff --git a/nixpkgs/pkgs/applications/video/byzanz/default.nix b/nixpkgs/pkgs/applications/video/byzanz/default.nix new file mode 100644 index 000000000000..e3a97197d104 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/byzanz/default.nix @@ -0,0 +1,64 @@ +{ lib, stdenv +, fetchgit +, wrapGAppsHook +, cairo +, glib +, gnome +, gst_all_1 +, gtk3 +, intltool +, libtool +, pkg-config +, which +, xorg +}: + +stdenv.mkDerivation { + pname = "byzanz"; + version = "unstable-2016-03-12"; + + src = fetchgit { + url = "https://gitlab.gnome.org/Archive/byzanz"; + rev = "81235d235d12c9687897f7fc6ec0de1feaed6623"; + hash = "sha256-3DUwXCPBAmeCRlDkiPUgwNyBa6bCvC/TLguMCK3bo4E="; + }; + + patches = [ ./add-amflags.patch ]; + + preBuild = '' + ./autogen.sh --prefix=$out + ''; + + env.NIX_CFLAGS_COMPILE = builtins.concatStringsSep " " [ + "-Wno-error=deprecated-declarations" + "-Wno-error=incompatible-pointer-types" + ]; + + nativeBuildInputs = [ pkg-config intltool ]; + buildInputs = [ + which + gnome.gnome-common + glib + libtool + cairo + gtk3 + xorg.xwininfo + xorg.libXdamage + ] ++ (with gst_all_1; [ + gstreamer + gst-plugins-base + gst-plugins-bad + gst-plugins-good + gst-plugins-ugly + gst-libav + wrapGAppsHook + ]); + + meta = with lib; { + description = "Tool to record a running X desktop to an animation suitable for presentation in a web browser"; + homepage = "https://github.com/GNOME/byzanz"; + license = licenses.gpl3; + platforms = platforms.linux; + maintainers = [ ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/catt/default.nix b/nixpkgs/pkgs/applications/video/catt/default.nix new file mode 100644 index 000000000000..608236d68830 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/catt/default.nix @@ -0,0 +1,69 @@ +{ lib +, fetchPypi +, fetchpatch +, python3 +}: + +let + python = python3.override { + packageOverrides = self: super: { + pychromecast = super.pychromecast.overridePythonAttrs (_: rec { + version = "13.1.0"; + + src = fetchPypi { + pname = "PyChromecast"; + inherit version; + hash = "sha256-COYai1S9IRnTyasewBNtPYVjqpfgo7V4QViLm+YMJnY="; + }; + + postPatch = ""; + }); + }; + }; +in + +python.pkgs.buildPythonApplication rec { + pname = "catt"; + version = "0.12.11"; + format = "pyproject"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-0bqYYfWwF7yYoAbjZPhi/f4CLcL89imWGYaMi5Bwhtc="; + }; + + patches = [ + (fetchpatch { + # set explicit build-system + url = "https://github.com/skorokithakis/catt/commit/08e7870a239e85badd30982556adc2aa8a8e4fc1.patch"; + hash = "sha256-QH5uN3zQNVPP6Th2LHdDBF53WxwMhoyhhQUAZOeHh4k="; + }) + ]; + + nativeBuildInputs = with python.pkgs; [ + poetry-core + ]; + + propagatedBuildInputs = with python.pkgs; [ + click + ifaddr + pychromecast + protobuf + requests + yt-dlp + ]; + + doCheck = false; # attempts to access various URLs + + pythonImportsCheck = [ + "catt" + ]; + + meta = with lib; { + description = "Tool to send media from online sources to Chromecast devices"; + homepage = "https://github.com/skorokithakis/catt"; + license = licenses.bsd2; + maintainers = with maintainers; [ dtzWill ]; + mainProgram = "catt"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/ccextractor/default.nix b/nixpkgs/pkgs/applications/video/ccextractor/default.nix new file mode 100644 index 000000000000..3814f921fa24 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/ccextractor/default.nix @@ -0,0 +1,71 @@ +{ lib +, stdenv +, fetchFromGitHub +, pkg-config +, cmake +, libiconv +, zlib +, enableOcr ? true +, makeWrapper +, tesseract4 +, leptonica +, ffmpeg_4 +}: + +stdenv.mkDerivation rec { + pname = "ccextractor"; + version = "0.93"; + + src = fetchFromGitHub { + owner = "CCExtractor"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-usVAKBkdd8uz9cD5eLd0hnwGonOJLscRdc+iWDlNXVc="; + }; + + postPatch = '' + # https://github.com/CCExtractor/ccextractor/issues/1467 + sed -i '/allheaders.h/a#include <leptonica/pix_internal.h>' src/lib_ccx/ocr.c + '' + lib.optionalString stdenv.isDarwin '' + substituteInPlace src/CMakeLists.txt \ + --replace 'add_definitions(-DGPAC_CONFIG_LINUX)' 'add_definitions(-DGPAC_CONFIG_DARWIN)' + ''; + + cmakeDir = "../src"; + + nativeBuildInputs = [ pkg-config cmake makeWrapper ]; + + buildInputs = [ zlib ] + ++ lib.optional (!stdenv.isLinux) libiconv + ++ lib.optionals enableOcr [ leptonica tesseract4 ffmpeg_4 ]; + + cmakeFlags = [ + # file RPATH_CHANGE could not write new RPATH: + "-DCMAKE_SKIP_BUILD_RPATH=ON" + ] ++ lib.optionals enableOcr [ "-DWITH_OCR=on" "-DWITH_HARDSUBX=on" ]; + + postInstall = lib.optionalString enableOcr '' + wrapProgram "$out/bin/ccextractor" \ + --set TESSDATA_PREFIX "${tesseract4}/share/" + ''; + + meta = with lib; { + homepage = "https://www.ccextractor.org"; + description = "Tool that produces subtitles from closed caption data in videos"; + longDescription = '' + A tool that analyzes video files and produces independent subtitle files from + closed captions data. CCExtractor is portable, small, and very fast. + It works on Linux, Windows, and OSX. + ''; + platforms = platforms.unix; + # undefined reference to `png_do_expand_palette_rgba8_neon' + # undefined reference to `png_riffle_palette_neon' + # undefined reference to `png_do_expand_palette_rgb8_neon' + # undefined reference to `png_init_filter_functions_neon' + # during Linking C executable ccextractor + broken = stdenv.isAarch64; + license = licenses.gpl2Only; + maintainers = with maintainers; [ titanous ]; + mainProgram = "ccextractor"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/cinelerra/default.nix b/nixpkgs/pkgs/applications/video/cinelerra/default.nix new file mode 100644 index 000000000000..972a68e04f03 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/cinelerra/default.nix @@ -0,0 +1,113 @@ +{ lib +, stdenv +, fetchFromGitHub +, autoconf +, automake +, libtool +, pkg-config +, faad2 +, faac +, a52dec +, alsa-lib +, fftw +, lame +, libavc1394 +, libiec61883 +, libraw1394 +, libsndfile +, libvorbis +, libogg +, libjpeg +, libtiff +, freetype +, mjpegtools +, x264 +, gettext +, openexr +, libXext +, libXxf86vm +, libXv +, libXi +, libX11 +, libXft +, xorgproto +, libtheora +, libpng +, libdv +, libuuid +, file +, nasm +, perl +, fontconfig +, intltool +}: + +stdenv.mkDerivation { + pname = "cinelerra-cv"; + version = "unstable-2023-01-29"; + + src = fetchFromGitHub { + owner = "cinelerra-cv-team"; + repo = "cinelerra-cv"; + rev = "bb00ac6b70fcf3cf419348b56f9b264bc01c1a89"; + sha256 = "11965kb3d7xcvlcf8p7jlzk9swk5i78x7wja4s3043wlzmqmwv0q"; + }; + + preConfigure = '' + find -type f -print0 | xargs --null sed -e "s@/usr/bin/perl@${perl}/bin/perl@" -i + ./autogen.sh + sed -i -e "s@/usr/bin/file@${file}/bin/file@" ./configure + ''; + + ## fix bug with parallel building + preBuild = '' + make -C cinelerra versioninfo.h + ''; + + enableParallelBuilding = true; + + nativeBuildInputs = [ automake autoconf libtool pkg-config file intltool ]; + + buildInputs = [ + faad2 + faac + a52dec + alsa-lib + fftw + lame + libavc1394 + libiec61883 + libraw1394 + libsndfile + libvorbis + libogg + libjpeg + libtiff + freetype + mjpegtools + x264 + gettext + openexr + libXext + libXxf86vm + libXv + libXi + libX11 + libXft + xorgproto + libtheora + libpng + libdv + libuuid + nasm + perl + fontconfig + ]; + + meta = with lib; { + description = "Professional video editing and compositing environment (community version)"; + homepage = "http://cinelerra-cv.wikidot.com/"; + maintainers = with maintainers; [ marcweber ]; + license = licenses.gpl2Only; + }; +} diff --git a/nixpkgs/pkgs/applications/video/clapper/default.nix b/nixpkgs/pkgs/applications/video/clapper/default.nix new file mode 100644 index 000000000000..954ea58b4554 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/clapper/default.nix @@ -0,0 +1,86 @@ +{ config +, lib +, stdenv +, fetchFromGitHub +, glib +, gobject-introspection +, python3 +, pkg-config +, ninja +, wayland +, wayland-protocols +, desktop-file-utils +, makeWrapper +, shared-mime-info +, wrapGAppsHook4 +, meson +, gjs +, gtk4 +, gst_all_1 +, libGL +, libadwaita +, appstream-glib +, libsoup +}: + +stdenv.mkDerivation rec { + pname = "clapper"; + version = "0.5.2"; + + src = fetchFromGitHub { + owner = "Rafostar"; + repo = pname; + rev = version; + sha256 = "sha256-s+qdTq3/pHHstwr1W3Hs2Zje++iJFHM6hQTFoZD43bY="; + }; + + nativeBuildInputs = [ + appstream-glib + desktop-file-utils # for update-desktop-database + glib + gobject-introspection + meson + ninja + makeWrapper + pkg-config + python3 + shared-mime-info # for update-mime-database + wrapGAppsHook4 # for gsettings + ]; + + buildInputs = [ + gjs + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-ugly + gtk4 + libGL + libadwaita + libsoup + wayland + wayland-protocols + ]; + + postPatch = '' + patchShebangs build-aux/meson/postinstall.py + ''; + + postInstall = '' + cp ${src}/data/icons/*.svg $out/share/icons/hicolor/scalable/apps/ + cp ${src}/data/icons/*.svg $out/share/icons/hicolor/symbolic/apps/ + ''; + + meta = with lib; { + description = "A GNOME media player built using GJS with GTK4 toolkit and powered by GStreamer with OpenGL rendering. "; + longDescription = '' + Clapper is a GNOME media player build using GJS with GTK4 toolkit. + The media player is using GStreamer as a media backend and renders everything via OpenGL. + ''; + homepage = "https://github.com/Rafostar/clapper"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ tomfitzhenry ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/clipgrab/default.nix b/nixpkgs/pkgs/applications/video/clipgrab/default.nix new file mode 100644 index 000000000000..1625c87e0c0b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/clipgrab/default.nix @@ -0,0 +1,66 @@ +{ lib, fetchurl, makeDesktopItem, ffmpeg +, qmake, qttools, mkDerivation +, qtbase, qtdeclarative, qtlocation, qtquickcontrols2, qtwebchannel, qtwebengine +, yt-dlp +}: + +mkDerivation rec { + pname = "clipgrab"; + version = "3.9.7"; + + src = fetchurl { + sha256 = "sha256-9H8raJd6MyyFICY8WUZQGLJ4teKPJUiQfqbu1HWAVIw="; + # The .tar.bz2 "Download" link is a binary blob, the source is the .tar.gz! + url = "https://download.clipgrab.org/${pname}-${version}.tar.gz"; + }; + + buildInputs = [ ffmpeg qtbase qtdeclarative qtlocation qtquickcontrols2 qtwebchannel qtwebengine ]; + nativeBuildInputs = [ qmake qttools ]; + + patches = [ + ./yt-dlp-path.patch + ]; + + postPatch = '' + substituteInPlace youtube_dl.cpp \ + --replace 'QString YoutubeDl::path = QString();' \ + 'QString YoutubeDl::path = QString("${yt-dlp}/bin/yt-dlp");' + '' + lib.optionalString (ffmpeg != null) '' + substituteInPlace converter_ffmpeg.cpp \ + --replace '"ffmpeg"' '"${ffmpeg.bin}/bin/ffmpeg"' \ + --replace '"ffmpeg ' '"${ffmpeg.bin}/bin/ffmpeg ' + ''; + + qmakeFlags = [ "clipgrab.pro" ]; + + desktopItem = makeDesktopItem rec { + name = "clipgrab"; + exec = name; + icon = name; + desktopName = "ClipGrab"; + comment = meta.description; + genericName = "Web video downloader"; + categories = [ "Qt" "AudioVideo" "Audio" "Video" ]; + }; + + installPhase = '' + runHook preInstall + install -Dm755 clipgrab $out/bin/clipgrab + install -Dm644 icon.png $out/share/pixmaps/clipgrab.png + cp -r ${desktopItem}/share/applications $out/share + runHook postInstall + ''; + + meta = with lib; { + description = "Video downloader for YouTube and other sites"; + longDescription = '' + ClipGrab is a free downloader and converter for YouTube, Vimeo, Metacafe, + Dailymotion and many other online video sites. It converts downloaded + videos to MPEG4, MP3 or other formats in just one easy step. + ''; + homepage = "https://clipgrab.org/"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + mainProgram = "clipgrab"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/clipgrab/yt-dlp-path.patch b/nixpkgs/pkgs/applications/video/clipgrab/yt-dlp-path.patch new file mode 100644 index 000000000000..5a9a4b6dcc48 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/clipgrab/yt-dlp-path.patch @@ -0,0 +1,86 @@ +--- a/main.cpp ++++ b/main.cpp +@@ -91,14 +91,5 @@ int main(int argc, char *argv[]) + w.show(); + } + +- QTimer::singleShot(0, [=] { +- cg->getUpdateInfo(); +- QObject::connect(cg, &ClipGrab::updateInfoProcessed, [cg] { +- bool force = QSettings().value("forceYoutubeDlDownload", false).toBool(); +- if (force) QSettings().setValue("forceYoutubeDlDownload", false); +- cg->downloadYoutubeDl(force); +- }); +- }); +- + return app.exec(); + } +--- a/youtube_dl.cpp ++++ b/youtube_dl.cpp +@@ -8,52 +8,16 @@ YoutubeDl::YoutubeDl() + QString YoutubeDl::path = QString(); + + QString YoutubeDl::find(bool force) { +- if (!force && !path.isEmpty()) return path; +- +- // Prefer downloaded youtube-dl +- QString localPath = QStandardPaths::locate(QStandardPaths::AppDataLocation, "yt-dlp"); +- QProcess* process = instance(localPath, QStringList() << "--version"); +- process->start(); +- process->waitForFinished(); +- process->deleteLater(); +- if (process->state() != QProcess::NotRunning) process->kill(); +- if (process->exitCode() == QProcess::ExitStatus::NormalExit) { +- path = localPath; +- return path; +- } +- +- // Try system-wide youtube-dlp installation +- QString globalPath = QStandardPaths::findExecutable("yt-dlp"); +- process = instance(globalPath, QStringList() << "--version"); +- process->start(); +- process->waitForFinished(); +- process->deleteLater(); +- if (process->state() != QProcess::NotRunning) process->kill(); +- if (process->exitCode() == QProcess::ExitStatus::NormalExit) { +- path = globalPath; +- return path; +- } +- +- return ""; ++ // We supply yt-dlp from nixpkgs, so the downloading ++ // machinery is not needed anymore. ++ (void)force; ++ return path; + } + + QProcess* YoutubeDl::instance(QStringList arguments) { +- return instance(find(), arguments); +-} +- +-QProcess* YoutubeDl::instance(QString path, QStringList arguments) { + QProcess *process = new QProcess(); + +- QString execPath = QCoreApplication::applicationDirPath(); +- QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); +- env.insert("PATH", execPath + ":" + env.value("PATH")); +- process->setEnvironment(env.toStringList()); +- +- #if defined Q_OS_WIN +- process->setProgram(execPath + "/python/python.exe"); +- #else +- process->setProgram(QStandardPaths::findExecutable("python3")); +- #endif ++ process->setProgram(path); + + QSettings settings; + QStringList proxyArguments; +@@ -81,7 +45,7 @@ QProcess* YoutubeDl::instance(QString path, QStringList arguments) { + networkArguments << "--force-ipv4"; + } + +- process->setArguments(QStringList() << path << arguments << proxyArguments << networkArguments); ++ process->setArguments(QStringList() << arguments << proxyArguments << networkArguments); + return process; + } + diff --git a/nixpkgs/pkgs/applications/video/coriander/default.nix b/nixpkgs/pkgs/applications/video/coriander/default.nix new file mode 100644 index 000000000000..80892b96c94b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/coriander/default.nix @@ -0,0 +1,45 @@ +{ lib +, stdenv +, fetchurl +, pkg-config +, glib +, gtk2 +, libgnomeui +, libXv +, libraw1394 +, libdc1394 +, SDL +, automake +, GConf +}: + +stdenv.mkDerivation rec { + pname = "coriander"; + version = "2.0.1"; + + src = fetchurl { + url = "http://damien.douxchamps.net/ieee1394/coriander/archives/coriander-${version}.tar.gz"; + sha256 = "0l6hpfgy5r4yardilmdrggsnn1fbfww516sk5a90g1740cd435x5"; + }; + + # Workaround build failure on -fno-common toolchains: + # ld: subtitles.o:src/coriander.h:110: multiple definition of + # `main_window'; main.o:src/coriander.h:110: first defined here + env.NIX_CFLAGS_COMPILE = "-fcommon"; + + preConfigure = '' + cp ${automake}/share/automake-*/mkinstalldirs . + ''; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ glib gtk2 libgnomeui libXv libraw1394 libdc1394 SDL GConf ]; + + meta = { + homepage = "https://damien.douxchamps.net/ieee1394/coriander/"; + description = "GUI for controlling a Digital Camera through the IEEE1394 bus"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ viric ]; + platforms = with lib.platforms; linux; + mainProgram = "coriander"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/corrscope/default.nix b/nixpkgs/pkgs/applications/video/corrscope/default.nix new file mode 100644 index 000000000000..8bd17d2f785e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/corrscope/default.nix @@ -0,0 +1,95 @@ +{ lib +, mkDerivationWith +, python3Packages +, fetchFromGitHub +, fetchpatch +, wrapQtAppsHook +, ffmpeg +, qtbase +, testers +, corrscope +}: + +mkDerivationWith python3Packages.buildPythonApplication rec { + pname = "corrscope"; + version = "0.8.1"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "corrscope"; + repo = "corrscope"; + rev = version; + hash = "sha256-pS7upOYZAjgR3lWxny8TNZEj3Rrbg+L90ANZWFO9UPQ="; + }; + + patches = [ + # https://github.com/corrscope/corrscope/pull/446 + (fetchpatch { + name = "remove-setuptools-dependency.patch"; + url = "https://github.com/corrscope/corrscope/commit/70b123173a7a012d9f29d6d3a8960b85caf6cc79.patch"; + hash = "sha256-YCtb7v8cGP0pdceAKeoempnRzw+LRKQqDb3AfN0z/9s="; + }) + ]; + + pythonRelaxDeps = [ "attrs" "ruamel.yaml" ]; + + nativeBuildInputs = [ + wrapQtAppsHook + ] ++ (with python3Packages; [ + poetry-core + pythonRelaxDepsHook + ]); + + buildInputs = [ + ffmpeg + qtbase + ]; + + propagatedBuildInputs = with python3Packages; [ + appdirs + appnope + atomicwrites + attrs + click + matplotlib + numpy + packaging + qtpy + pyqt5 + ruamel-yaml + colorspacious + ]; + + dontWrapQtApps = true; + + preFixup = '' + makeWrapperArgs+=( + --prefix PATH : ${lib.makeBinPath [ ffmpeg ]} + "''${qtWrapperArgs[@]}" + ) + ''; + + passthru.tests.version = testers.testVersion { + package = corrscope; + # Tries writing to + # - $HOME/.local/share/corrscope on Linux + # - $HOME/Library/Application Support/corrscope on Darwin + command = "env HOME=$TMPDIR ${lib.getExe corrscope} --version"; + }; + + meta = with lib; { + description = "Render wave files into oscilloscope views, featuring advanced correlation-based triggering algorithm"; + longDescription = '' + Corrscope renders oscilloscope views of WAV files recorded from chiptune (game music from + retro sound chips). + + Corrscope uses "waveform correlation" to track complex waves (including SNES and Sega + Genesis/FM synthesis) which jump around on other oscilloscope programs. + ''; + homepage = "https://github.com/corrscope/corrscope"; + license = licenses.bsd2; + maintainers = with maintainers; [ OPNA2608 ]; + platforms = platforms.all; + mainProgram = "corr"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/cutecapture/default.nix b/nixpkgs/pkgs/applications/video/cutecapture/default.nix new file mode 100644 index 000000000000..a588ddb38a8d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/cutecapture/default.nix @@ -0,0 +1,49 @@ +{ lib +, stdenv +, fetchFromGitHub +, autoreconfHook +, libusb1 +, sfml +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "cutecapture"; + version = "1.4.0"; + + src = fetchFromGitHub { + owner = "Gotos"; + repo = "cutecapture"; + rev = "v${finalAttrs.version}"; + hash = "sha256-V8BlZykh9zOTcEypu96Ft9/6CtjsybtD8lBsg9sF5sQ="; + }; + + nativeBuildInputs = [ + autoreconfHook + ]; + + buildInputs = [ + libusb1 + sfml + ]; + + postPatch = '' + cat > get_version.sh <<EOF + #!${stdenv.shell} + echo ${lib.escapeShellArg finalAttrs.version} + EOF + ''; + + postInstall = '' + install -Dm644 -t $out/lib/udev/rules.d 95-{3,}dscapture.rules + install -Dm444 -t $out/share/applications Cute{3,}DSCapture.desktop + install -Dm444 -t $out/share/icons/hicolor/128x128/apps Cute{3,}DSCapture.png + ''; + + meta = with lib; { + description = "A (3)DS capture software for Linux and Mac"; + homepage = "https://github.com/Gotos/CuteCapture"; + license = licenses.asl20; + platforms = platforms.linux ++ platforms.darwin; + maintainers = with maintainers; [ raphaelr ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/davinci-resolve/default.nix b/nixpkgs/pkgs/applications/video/davinci-resolve/default.nix new file mode 100644 index 000000000000..e92065486918 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/davinci-resolve/default.nix @@ -0,0 +1,266 @@ +{ stdenv +, lib +, cacert +, curl +, runCommandLocal +, unzip +, appimage-run +, addOpenGLRunpath +, dbus +, libGLU +, xorg +, buildFHSEnv +, buildFHSEnvChroot +, bash +, writeText +, ocl-icd +, xkeyboard_config +, glib +, libarchive +, libxcrypt +, python3 +, aprutil +, makeDesktopItem +, copyDesktopItems +, jq + +, studioVariant ? false +}: + +let + davinci = ( + stdenv.mkDerivation rec { + pname = "davinci-resolve${lib.optionalString studioVariant "-studio"}"; + version = "18.6.5"; + + nativeBuildInputs = [ + (appimage-run.override { buildFHSEnv = buildFHSEnvChroot; } ) + addOpenGLRunpath + copyDesktopItems + unzip + ]; + + # Pretty sure, there are missing dependencies ... + buildInputs = [ + libGLU + xorg.libXxf86vm + ]; + + src = runCommandLocal "${pname}-src.zip" + rec { + outputHashMode = "recursive"; + outputHashAlgo = "sha256"; + outputHash = + if studioVariant + then "sha256-Ua5R0G4okBpz9SyyA2zn6nVflY9AlWch7Kx6PrW/nMg=" + else "sha256-oCK7w5jB7h4PSKg2IJwriyAVi/kj4TurloBcfDAe6BQ="; + + impureEnvVars = lib.fetchers.proxyImpureEnvVars; + + nativeBuildInputs = [ curl jq ]; + + # ENV VARS + SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt"; + + # Get linux.downloadId from HTTP response on https://www.blackmagicdesign.com/products/davinciresolve + REFERID = "263d62f31cbb49e0868005059abcb0c9"; + DOWNLOADSURL = "https://www.blackmagicdesign.com/api/support/us/downloads.json"; + SITEURL = "https://www.blackmagicdesign.com/api/register/us/download"; + PRODUCT = "DaVinci Resolve${lib.optionalString studioVariant " Studio"}"; + VERSION = version; + + USERAGENT = builtins.concatStringsSep " " [ + "User-Agent: Mozilla/5.0 (X11; Linux ${stdenv.hostPlatform.linuxArch})" + "AppleWebKit/537.36 (KHTML, like Gecko)" + "Chrome/77.0.3865.75" + "Safari/537.36" + ]; + + REQJSON = builtins.toJSON { + "firstname" = "NixOS"; + "lastname" = "Linux"; + "email" = "someone@nixos.org"; + "phone" = "+31 71 452 5670"; + "country" = "nl"; + "street" = "-"; + "state" = "Province of Utrecht"; + "city" = "Utrecht"; + "product" = PRODUCT; + }; + + } '' + DOWNLOADID=$( + curl --silent --compressed "$DOWNLOADSURL" \ + | jq --raw-output '.downloads[] | select(.name | test("^'"$PRODUCT $VERSION"'( Update)?$")) | .urls.Linux[0].downloadId' + ) + echo "downloadid is $DOWNLOADID" + test -n "$DOWNLOADID" + RESOLVEURL=$(curl \ + --silent \ + --header 'Host: www.blackmagicdesign.com' \ + --header 'Accept: application/json, text/plain, */*' \ + --header 'Origin: https://www.blackmagicdesign.com' \ + --header "$USERAGENT" \ + --header 'Content-Type: application/json;charset=UTF-8' \ + --header "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \ + --header 'Accept-Encoding: gzip, deflate, br' \ + --header 'Accept-Language: en-US,en;q=0.9' \ + --header 'Authority: www.blackmagicdesign.com' \ + --header 'Cookie: _ga=GA1.2.1849503966.1518103294; _gid=GA1.2.953840595.1518103294' \ + --data-ascii "$REQJSON" \ + --compressed \ + "$SITEURL/$DOWNLOADID") + echo "resolveurl is $RESOLVEURL" + + curl \ + --retry 3 --retry-delay 3 \ + --header "Upgrade-Insecure-Requests: 1" \ + --header "$USERAGENT" \ + --header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" \ + --header "Accept-Language: en-US,en;q=0.9" \ + --compressed \ + "$RESOLVEURL" \ + > $out + ''; + + # The unpack phase won't generate a directory + sourceRoot = "."; + + installPhase = let + appimageName = "DaVinci_Resolve_${lib.optionalString studioVariant "Studio_"}${version}_Linux.run"; + in '' + runHook preInstall + + export HOME=$PWD/home + mkdir -p $HOME + + mkdir -p $out + test -e ${lib.escapeShellArg appimageName} + appimage-run ${lib.escapeShellArg appimageName} -i -y -n -C $out + + mkdir -p $out/{configs,DolbyVision,easyDCP,Fairlight,GPUCache,logs,Media,"Resolve Disk Database",.crashreport,.license,.LUT} + runHook postInstall + ''; + + dontStrip = true; + + postFixup = '' + for program in $out/bin/*; do + isELF "$program" || continue + addOpenGLRunpath "$program" + done + + for program in $out/libs/*; do + isELF "$program" || continue + if [[ "$program" != *"libcudnn_cnn_infer"* ]];then + echo $program + addOpenGLRunpath "$program" + fi + done + ln -s $out/libs/libcrypto.so.1.1 $out/libs/libcrypt.so.1 + ''; + + desktopItems = [ + (makeDesktopItem { + name = "davinci-resolve"; + desktopName = "Davinci Resolve"; + genericName = "Video Editor"; + exec = "resolve"; + # icon = "DV_Resolve"; + comment = "Professional video editing, color, effects and audio post-processing"; + categories = [ + "AudioVideo" + "AudioVideoEditing" + "Video" + "Graphics" + ]; + }) + ]; + } + ); +in +buildFHSEnv { + inherit (davinci) pname version; + name = null; + + targetPkgs = pkgs: with pkgs; [ + alsa-lib + aprutil + bzip2 + davinci + dbus + expat + fontconfig + freetype + glib + libGL + libGLU + libarchive + libcap + librsvg + libtool + libuuid + libxcrypt # provides libcrypt.so.1 + libxkbcommon + nspr + ocl-icd + opencl-headers + python3 + python3.pkgs.numpy + udev + xdg-utils # xdg-open needed to open URLs + xorg.libICE + xorg.libSM + xorg.libX11 + xorg.libXcomposite + xorg.libXcursor + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXi + xorg.libXinerama + xorg.libXrandr + xorg.libXrender + xorg.libXt + xorg.libXtst + xorg.libXxf86vm + xorg.libxcb + xorg.xcbutil + xorg.xcbutilimage + xorg.xcbutilkeysyms + xorg.xcbutilrenderutil + xorg.xcbutilwm + xorg.xkeyboardconfig + zlib + ]; + + extraPreBwrapCmds = lib.optionalString studioVariant '' + mkdir -p ~/.local/share/DaVinciResolve/license || exit 1 + ''; + + extraBwrapArgs = lib.optionals studioVariant [ + "--bind \"$HOME\"/.local/share/DaVinciResolve/license ${davinci}/.license" + ]; + + runScript = "${bash}/bin/bash ${ + writeText "davinci-wrapper" + '' + export QT_XKB_CONFIG_ROOT="${xkeyboard_config}/share/X11/xkb" + export QT_PLUGIN_PATH="${davinci}/libs/plugins:$QT_PLUGIN_PATH" + export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib:/usr/lib32:${davinci}/libs + ${davinci}/bin/resolve + '' + }"; + + passthru = { inherit davinci; }; + + meta = with lib; { + description = "Professional video editing, color, effects and audio post-processing"; + homepage = "https://www.blackmagicdesign.com/products/davinciresolve"; + license = licenses.unfree; + maintainers = with maintainers; [ jshcmpbll orivej ]; + platforms = [ "x86_64-linux" ]; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + mainProgram = "davinci-resolve"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/deface/default.nix b/nixpkgs/pkgs/applications/video/deface/default.nix new file mode 100644 index 000000000000..428275535af4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/deface/default.nix @@ -0,0 +1,54 @@ +{ lib +, stdenv +, python3 +, fetchFromGitHub +, makeWrapper +, pkgs +}: + +python3.pkgs.buildPythonApplication rec { + pname = "deface"; + version = "1.4.0"; + format = "pyproject"; + + src = fetchFromGitHub { + owner = "ORB-HD"; + repo = "deface"; + rev = "v${version}"; + hash = "sha256-tLNTgdnKKmyYHVajz0dHIb7cvC1by5LQ5CFIbMvPEYk="; + }; + + nativeBuildInputs = with python3.pkgs; [ + setuptools-scm + ]; + + propagatedBuildInputs = with python3.pkgs; [ + imageio + imageio-ffmpeg + numpy + onnx + onnxruntime # Nixpkgs onnxruntime is missing CUDA support + opencv4 + scikit-image + tqdm + ]; + + # Native onnxruntime lib used by Python module onnxruntime can't find its other libs without this + makeWrapperArgs = [ + ''--prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ pkgs.onnxruntime ]}"'' + ]; + + patchPhase = '' + substituteInPlace pyproject.toml requirements.txt --replace "opencv-python" "opencv" + ''; + + pythonImportsCheck = [ "deface" "onnx" "onnxruntime" ]; + + meta = with lib; { + description = "Video anonymization by face detection"; + homepage = "https://github.com/ORB-HD/deface"; + license = licenses.mit; + maintainers = with maintainers; [ lurkki ]; + mainProgram = "deface"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/devede/default.nix b/nixpkgs/pkgs/applications/video/devede/default.nix new file mode 100644 index 000000000000..22689e27d6e9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/devede/default.nix @@ -0,0 +1,44 @@ +{ lib, fetchFromGitLab, python3Packages, ffmpeg, mplayer, vcdimager, cdrkit, dvdauthor +, gtk3, gettext, wrapGAppsHook, gdk-pixbuf, gobject-introspection }: + +let + inherit (python3Packages) dbus-python buildPythonApplication pygobject3 urllib3 setuptools; +in buildPythonApplication rec { + pname = "devede"; + version = "4.17.0"; + namePrefix = ""; + + src = fetchFromGitLab { + owner = "rastersoft"; + repo = "devedeng"; + rev = version; + sha256 = "sha256-CdntdD5DRA/eXTBRBRszkbYFeFxj+0odb8XHkAFdobU="; + }; + + nativeBuildInputs = [ + gettext wrapGAppsHook + gobject-introspection + ]; + + buildInputs = [ + ffmpeg + ]; + + propagatedBuildInputs = [ + gtk3 pygobject3 gdk-pixbuf dbus-python ffmpeg mplayer dvdauthor vcdimager cdrkit urllib3 setuptools + ]; + + postPatch = '' + substituteInPlace setup.py --replace "'/usr'," "" + substituteInPlace src/devedeng/configuration_data.py \ + --replace "/usr/share" "$out/share" \ + --replace "/usr/local/share" "$out/share" + ''; + + meta = with lib; { + description = "DVD Creator for Linux"; + homepage = "http://www.rastersoft.com/programas/devede.html"; + license = licenses.gpl3; + maintainers = [ maintainers.bdimcheff ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dmlive/default.nix b/nixpkgs/pkgs/applications/video/dmlive/default.nix new file mode 100644 index 000000000000..a1b41d360e45 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dmlive/default.nix @@ -0,0 +1,43 @@ +{ lib +, stdenv +, rustPlatform +, fetchFromGitHub +, pkg-config +, makeWrapper +, openssl +, Security +, mpv +, ffmpeg +, nodejs +}: + +rustPlatform.buildRustPackage rec { + pname = "dmlive"; + version = "5.3.2"; + + src = fetchFromGitHub { + owner = "THMonster"; + repo = pname; + rev = "3736d83ac0920de78ac82fe331bc6b16dc72b5cd"; # no tag + hash = "sha256-3agUeAv6Nespn6GNw4wmy8HNPQ0VIgZAMnKiV/myKbA="; + }; + + cargoHash = "sha256-MxkWaEn/gMMOuje7lu7PlqsQjnF0LWpV9JzmFBG1ukU="; + + OPENSSL_NO_VENDOR = true; + + nativeBuildInputs = [ pkg-config makeWrapper ]; + buildInputs = [ openssl ] ++ lib.optional stdenv.isDarwin Security; + + postInstall = '' + wrapProgram "$out/bin/dmlive" --prefix PATH : "${lib.makeBinPath [ mpv ffmpeg nodejs ]}" + ''; + + meta = with lib; { + description = "A tool to play and record videos or live streams with danmaku"; + homepage = "https://github.com/THMonster/dmlive"; + license = licenses.mit; + mainProgram = "dmlive"; + maintainers = with maintainers; [ nickcao ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dra-cla/default.nix b/nixpkgs/pkgs/applications/video/dra-cla/default.nix new file mode 100644 index 000000000000..27b745a403d4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dra-cla/default.nix @@ -0,0 +1,46 @@ +{ lib +, stdenvNoCC +, fetchFromGitHub +, makeWrapper +, gnugrep +, gnused +, curl +, mpv +, aria2 +, ffmpeg +, openssl +}: + +stdenvNoCC.mkDerivation { + pname = "dra-cla"; + version = "unstable-2023-10-10"; + + src = fetchFromGitHub { + owner = "CoolnsX"; + repo = "dra-cla"; + rev = "12e9557fb8dfdff7350e0102a625170bb69acf01"; + hash = "sha256-cGY/FRV2BAS4fzJqIfD7FlIPIS0fCIIBenQYjB2dEsc="; + }; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + + install -Dm755 dra-cla $out/bin/dra-cla + + wrapProgram $out/bin/dra-cla \ + --prefix PATH : ${lib.makeBinPath [ gnugrep gnused curl mpv aria2 ffmpeg openssl ]} + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/CoolnsX/dra-cla"; + description = "A cli tool to browse and play korean drama, chinese drama"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ idlip ]; + platforms = platforms.unix; + mainProgram = "dra-cla"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/droidcam/default.nix b/nixpkgs/pkgs/applications/video/droidcam/default.nix new file mode 100644 index 000000000000..4909fe6fa786 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/droidcam/default.nix @@ -0,0 +1,61 @@ +{ lib, stdenv, fetchFromGitHub +, ffmpeg, libjpeg_turbo, gtk3, alsa-lib, speex, libusbmuxd, libappindicator-gtk3 +, pkg-config +}: + +stdenv.mkDerivation rec { + pname = "droidcam"; + version = "2.1.2"; + + src = fetchFromGitHub { + owner = "aramg"; + repo = "droidcam"; + rev = "v${version}"; + sha256 = "sha256-NZ6sKLE/Sq4VBJSf7iG0CgdVwmU8JXQH/utbobBEFi0="; + }; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + ffmpeg + libjpeg_turbo + gtk3 + alsa-lib + speex + libusbmuxd + libappindicator-gtk3 + ]; + + postPatch = '' + substituteInPlace src/droidcam.c \ + --replace "/opt/droidcam-icon.png" "$out/share/icons/hicolor/96x96/apps/droidcam.png" + substituteInPlace droidcam.desktop \ + --replace "/opt/droidcam-icon.png" "droidcam" \ + --replace "/usr/local/bin/droidcam" "droidcam" + ''; + + preBuild = '' + makeFlagsArray+=("JPEG=$(pkg-config --libs --cflags libturbojpeg)") + makeFlagsArray+=("USBMUXD=$(pkg-config --libs --cflags libusbmuxd-2.0)") + ''; + + installPhase = '' + runHook preInstall + + install -Dt $out/bin droidcam droidcam-cli + install -D icon2.png $out/share/icons/hicolor/96x96/apps/droidcam.png + install -D droidcam.desktop $out/share/applications/droidcam.desktop + + runHook postInstall + ''; + + meta = with lib; { + description = "Linux client for DroidCam app"; + homepage = "https://github.com/aramg/droidcam"; + license = licenses.gpl2Only; + maintainers = [ maintainers.suhr ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dvd-slideshow/default.nix b/nixpkgs/pkgs/applications/video/dvd-slideshow/default.nix new file mode 100644 index 000000000000..6499b6153c8d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dvd-slideshow/default.nix @@ -0,0 +1,72 @@ +{ stdenv, lib, fetchurl, writeScript, cdrtools, dvdauthor, ffmpeg, imagemagick, lame, mjpegtools, sox, transcode, vorbis-tools, runtimeShell }: + +let + binPath = lib.makeBinPath [ cdrtools dvdauthor ffmpeg imagemagick lame mjpegtools sox transcode vorbis-tools ]; + + wrapper = writeScript "dvd-slideshow.sh" '' + #!${runtimeShell} + # wrapper script for dvd-slideshow programs + export PATH=${binPath}:$PATH + + dir=`dirname "$0"` + exe=`basename "$0"` + case "$exe" in + dvd-slideshow) + # use mpeg2enc by default as ffmpeg is known to crash. + # run dvd-slideshow.ffmpeg to force ffmpeg. + "$dir/dvd-slideshow.real" -mpeg2enc $@ + ;; + + dvd-slideshow.ffmpeg) + "$dir/dvd-slideshow.real" $@ + ;; + + *) + "$dir/$exe.real" $@ + ;; + esac + ''; + +in stdenv.mkDerivation rec { + pname = "dvd-slideshow"; + version = "0.8.4-2"; + + src = fetchurl { + url = "mirror://sourceforge/dvd-slideshow/files/${pname}-${version}.tar.gz"; + sha256 = "17c09aqvippiji2sd0pcxjg3nb1mnh9k5nia4gn5lhcvngjcp1q5"; + }; + + patchPhase = '' + # fix upstream typos + substituteInPlace dvd-slideshow \ + --replace "version='0.8.4-1'" "version='0.8.4-2'" \ + --replace "mymyecho" "myecho" + ''; + + installPhase = '' + mkdir -p "$out/bin" + cp dvd-slideshow "$out/bin/dvd-slideshow.real" + cp dvd-menu "$out/bin/dvd-menu.real" + cp dir2slideshow "$out/bin/dir2slideshow.real" + cp gallery1-to-slideshow "$out/bin/gallery1-to-slideshow.real" + cp jigl2slideshow "$out/bin/jigl2slideshow.real" + + cp ${wrapper} "$out/bin/dvd-slideshow.sh" + ln -s dvd-slideshow.sh "$out/bin/dvd-slideshow" + ln -s dvd-slideshow.sh "$out/bin/dvd-slideshow.ffmpeg" + ln -s dvd-slideshow.sh "$out/bin/dvd-menu" + ln -s dvd-slideshow.sh "$out/bin/dir2slideshow" + ln -s dvd-slideshow.sh "$out/bin/gallery1-to-slideshow" + ln -s dvd-slideshow.sh "$out/bin/jigl2slideshow" + + cp -a man "$out/" + ''; + + meta = { + description = "Suite of command line programs that creates a slideshow-style video from groups of pictures"; + homepage = "https://dvd-slideshow.sourceforge.net/wiki/Main_Page"; + license = lib.licenses.gpl2; + platforms = lib.platforms.linux; + maintainers = [ lib.maintainers.robbinch ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dvdauthor/default.nix b/nixpkgs/pkgs/applications/video/dvdauthor/default.nix new file mode 100644 index 000000000000..721368ae390a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dvdauthor/default.nix @@ -0,0 +1,38 @@ +{ lib +, stdenv +, fetchurl +, autoreconfHook +, libdvdread +, libxml2 +, freetype +, fribidi +, libpng +, zlib +, pkg-config +, flex +, bison +}: + +stdenv.mkDerivation rec { + pname = "dvdauthor"; + version = "0.7.2"; + + src = fetchurl { + url = "mirror://sourceforge/dvdauthor/dvdauthor-${version}.tar.gz"; + hash = "sha256-MCCpLen3jrNvSLbyLVoAHEcQeCZjSnhaYt/NCA9hLrc="; + }; + + buildInputs = [ libpng freetype libdvdread libxml2 zlib fribidi flex bison ]; + + nativeBuildInputs = [ + pkg-config + autoreconfHook + ]; + + meta = with lib; { + description = "Tools for generating DVD files to be played on standalone DVD players"; + homepage = "https://dvdauthor.sourceforge.net/"; + license = licenses.gpl2; + platforms = platforms.linux ++ platforms.darwin; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dvdbackup/default.nix b/nixpkgs/pkgs/applications/video/dvdbackup/default.nix new file mode 100644 index 000000000000..523847db247f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dvdbackup/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchurl, fetchpatch, libdvdread, libdvdcss, dvdauthor }: + +stdenv.mkDerivation rec { + version = "0.4.2"; + pname = "dvdbackup"; + + src = fetchurl { + url = "mirror://sourceforge/dvdbackup/${pname}-${version}.tar.xz"; + sha256 = "1rl3h7waqja8blmbpmwy01q9fgr5r0c32b8dy3pbf59bp3xmd37g"; + }; + + buildInputs = [ libdvdread libdvdcss dvdauthor ]; + + # see https://bugs.launchpad.net/dvdbackup/+bug/1869226 + patchFlags = [ "-p0" ]; + patches = [ (fetchpatch { + url = "https://git.slackbuilds.org/slackbuilds/plain/multimedia/dvdbackup/patches/dvdbackup-dvdread-6.1.patch"; + sha256 = "1v3xl01bwq1592i5x5dyh95r0mmm1zvvwf92fgjc0smr0k3davfz"; + })]; + + meta = { + description = "A tool to rip video DVDs from the command line"; + homepage = "https://dvdbackup.sourceforge.net/"; + license = lib.licenses.gpl3Plus; + maintainers = [ lib.maintainers.bradediger ]; + platforms = lib.platforms.linux; + mainProgram = "dvdbackup"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dvdstyler/default.nix b/nixpkgs/pkgs/applications/video/dvdstyler/default.nix new file mode 100644 index 000000000000..18018f88d025 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dvdstyler/default.nix @@ -0,0 +1,133 @@ +{ lib +, stdenv +, fetchurl +, bison +, cdrtools +, docbook_xml_dtd_412 +, docbook-xsl-nons +, dvdauthor +, dvdplusrwtools +, ffmpeg_4 +, flex +, fontconfig +, gettext +, glib +, gobject-introspection +, libexif +, libjpeg +, pkg-config +, wrapGAppsHook +, wxGTK32 +, wxSVG +, xine-ui +, xmlto +, zip + +, dvdisasterSupport ? true, dvdisaster ? null +, thumbnailSupport ? true, libgnomeui ? null +, udevSupport ? true, udev ? null +, dbusSupport ? true, dbus ? null +}: + +let + inherit (lib) optionals makeBinPath; +in stdenv.mkDerivation rec { + pname = "dvdstyler"; + version = "3.2.1"; + + src = fetchurl { + url = "mirror://sourceforge/project/dvdstyler/dvdstyler/${version}/DVDStyler-${version}.tar.bz2"; + sha256 = "sha256-C7M0hzn0yTCXRUuBTss6WPa6zo8DD0Fhmp/ur7R0dVg="; + }; + + patches = [ + # https://sourceforge.net/p/dvdstyler/DVDStyler/ci/679fa8dc6ac7657775eda9d7b0ed9da9d069aeec/ + ./wxgtk32.patch + ]; + + nativeBuildInputs = [ + bison + docbook_xml_dtd_412 + docbook-xsl-nons + flex + gettext + gobject-introspection + pkg-config + wrapGAppsHook + xmlto + zip + ]; + buildInputs = [ + cdrtools + dvdauthor + dvdplusrwtools + ffmpeg_4 + fontconfig + glib + libexif + libjpeg + wxSVG + wxGTK32 + xine-ui + ] + ++ optionals dvdisasterSupport [ dvdisaster ] + ++ optionals udevSupport [ udev ] + ++ optionals dbusSupport [ dbus ] + ++ optionals thumbnailSupport [ libgnomeui ]; + + enableParallelBuilding = true; + + preFixup = let + binPath = makeBinPath ([ + cdrtools + dvdauthor + dvdplusrwtools + ] ++ optionals dvdisasterSupport [ dvdisaster ]); + in + '' + gappsWrapperArgs+=( + --prefix PATH : "${binPath}" + ) + ''; + + + meta = with lib; { + homepage = "https://www.dvdstyler.org/"; + description = "A DVD authoring software"; + longDescription = '' + DVDStyler is a cross-platform free DVD authoring application for the + creation of professional-looking DVDs. It allows not only burning of video + files on DVD that can be played practically on any standalone DVD player, + but also creation of individually designed DVD menus. It is Open Source + Software and is completely free. + + Some of its features include: + + - create and burn DVD video with interactive menus + - design your own DVD menu or select one from the list of ready to use menu + templates + - create photo slideshow + - add multiple subtitle and audio tracks + - support of AVI, MOV, MP4, MPEG, OGG, WMV and other file formats + - support of MPEG-2, MPEG-4, DivX, Xvid, MP2, MP3, AC-3 and other audio and + video formats + - support of multi-core processor + - use MPEG and VOB files without reencoding + - put files with different audio/video format on one DVD (support of + titleset) + - user-friendly interface with support of drag & drop + - flexible menu creation on the basis of scalable vector graphic + - import of image file for background + - place buttons, text, images and other graphic objects anywhere on the menu + screen + - change the font/color and other parameters of buttons and graphic objects + - scale any button or graphic object + - copy any menu object or whole menu + - customize navigation using DVD scripting + ''; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ AndersonTorres ]; + platforms = with platforms; linux; + mainProgram = "dvdstyler"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/dvdstyler/wxgtk32.patch b/nixpkgs/pkgs/applications/video/dvdstyler/wxgtk32.patch new file mode 100644 index 000000000000..92b3c3fbe3ba --- /dev/null +++ b/nixpkgs/pkgs/applications/video/dvdstyler/wxgtk32.patch @@ -0,0 +1,12 @@ +--- a/wxVillaLib/PropDlg.cpp ++++ b/wxVillaLib/PropDlg.cpp +@@ -12,7 +12,9 @@ + #include "utils.h" + #include <wx/fontdlg.h> + #include <wx/colordlg.h> ++#ifdef __WXMSW__ + #include <wx/generic/colrdlgg.h> ++#endif + #include <wx/filedlg.h> + #include <wx/dirdlg.h> + #include <wx/grid.h> diff --git a/nixpkgs/pkgs/applications/video/electronplayer/electronplayer.nix b/nixpkgs/pkgs/applications/video/electronplayer/electronplayer.nix new file mode 100644 index 000000000000..15f5b60a09a6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/electronplayer/electronplayer.nix @@ -0,0 +1,33 @@ +{ appimageTools, lib, fetchurl }: +let + pname = "electronplayer"; + version = "2.0.8"; + name = "${pname}-${version}"; + + #TODO: remove the -rc4 from the tag in the url when possible + src = fetchurl { + url = "https://github.com/oscartbeaumont/ElectronPlayer/releases/download/v${version}-rc4/${name}.AppImage"; + sha256 = "wAsmSFdbRPnYnDyWQSbtyj+GLJLN7ibksUE7cegfkhI="; + }; + + appimageContents = appimageTools.extractType2 { inherit name src; }; +in appimageTools.wrapType2 { + inherit name src; + + extraInstallCommands = '' + mv $out/bin/${name} $out/bin/${pname} + + install -m 444 -D ${appimageContents}/${pname}.desktop $out/share/applications/${pname}.desktop + substituteInPlace $out/share/applications/${pname}.desktop \ + --replace 'Exec=AppRun' 'Exec=ElectronPlayer' + cp -r ${appimageContents}/usr/share/icons $out/share + ''; + + meta = with lib; { + description = "An electron based web video services player"; + homepage = "https://github.com/oscartbeaumont/ElectronPlayer"; + license = licenses.mit; + maintainers = with maintainers; [ extends ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/entangle/default.nix b/nixpkgs/pkgs/applications/video/entangle/default.nix new file mode 100644 index 000000000000..cfab93dbcd71 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/entangle/default.nix @@ -0,0 +1,138 @@ +{ lib +, stdenv +, fetchFromGitLab +, fetchpatch +, itstool +, libxml2 +, meson +, ninja +, perl +, python3 +, pkgconf +, wrapGAppsHook +, at-spi2-core +, dbus +, elfutils +, libepoxy +, gexiv2 +, glib +, gobject-introspection +, gst-plugins-base +, gstreamer +, gtk3 +, lcms2 +, libdatrie +, libgphoto2 +, libgudev +, libpeas +, libraw +, libselinux +, libsepol +, libthai +, libunwind +, libxkbcommon +, orc +, pcre +, pcre2 +, udev +, util-linux +, xorg +, zstd +}: + +stdenv.mkDerivation rec { + pname = "entangle"; + version = "3.0"; + + src = fetchFromGitLab { + owner = "entangle"; + repo = "entangle"; + rev = "v${version}"; + sha256 = "hz2WSDOjriQSavFlDT+35x1X5MeInq80ZrSP1WR/td0="; + }; + + patches = [ + # Fix build with meson 0.61, can be removed on next update + # https://gitlab.com/entangle/entangle/-/issues/67 + (fetchpatch { + url = "https://gitlab.com/entangle/entangle/-/commit/54795d275a93e94331a614c8712740fcedbdd4f0.patch"; + sha256 = "iEgqGjKa0xwSdctwvNdEV361l9nx+bz53xn3fuDgtzY="; + }) + ]; + + nativeBuildInputs = [ + itstool + glib + libxml2 # for xmllint + meson + ninja + perl # for pod2man and build scripts + python3 # for build scripts + pkgconf + wrapGAppsHook + gobject-introspection + ]; + + buildInputs = [ + at-spi2-core + dbus + libepoxy + elfutils + gexiv2 + glib + gst-plugins-base + gstreamer + gtk3 + lcms2 + libdatrie + libgphoto2 + libgudev + libpeas + libraw + libselinux + libsepol + libthai + libunwind + libxkbcommon + orc + pcre # required by libselinux before we USE_PCRE2 + pcre2 # required by glib-2.0 + udev + util-linux + zstd + ] ++ (with xorg; [ + libXdmcp + libXtst + ]); + + # Disable building of doc/reference since it requires network connection to render XML to HTML + # Patch build script shebangs + postPatch = '' + sed -i "/subdir('reference')/d" "docs/meson.build" + patchShebangs --build build-aux meson_post_install.py + sed -i meson_post_install.py \ + -e "/print('Update icon cache...')/d" \ + -e "/gtk-update-icon-cache/d" + ''; + + postInstall = '' + substituteInPlace "$out/share/applications/org.entangle_photo.Manager.desktop" \ + --replace "Exec=entangle" "Exec=$out/bin/entangle" + ''; + + meta = with lib; { + description = "Tethered camera control and capture"; + longDescription = '' + Entangle uses GTK and libgphoto2 to provide a graphical interface + for tethered photography with digital cameras. + It includes control over camera shooting and configuration settings + and 'hands off' shooting directly from the controlling computer. + This app can also serve as a camera app for mobile devices. + ''; + homepage = "https://gitlab.com/entangle/entangle"; + license = licenses.gpl3Plus; + platforms = platforms.all; + maintainers = with maintainers; [ ShamrockLee ]; + mainProgram = "entangle"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/epgstation/default.nix b/nixpkgs/pkgs/applications/video/epgstation/default.nix new file mode 100644 index 000000000000..c5d12c8403c1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/epgstation/default.nix @@ -0,0 +1,124 @@ +{ lib +, fetchpatch +, fetchFromGitHub +, buildNpmPackage +, installShellFiles +, makeWrapper +, bash +, nodejs +, gzip +, python3 +}: + +buildNpmPackage rec { + pname = "epgstation"; + version = "2.6.20"; + + src = fetchFromGitHub { + owner = "l3tnun"; + repo = "EPGStation"; + rev = "v${version}"; + sha256 = "K1cAvmqWEfS6EY4MKAtjXb388XLYHtouxNM70PWgFig="; + }; + + patches = [ + ./use-mysql-over-domain-socket.patch + + # upgrade dependencies to make it compatible with node 18 + (fetchpatch { + url = "https://github.com/midchildan/EPGStation/commit/5d6cad746b7d9b6d246adcdecf9c991b77c9d89e.patch"; + sha256 = "sha256-9a8VUjczlyQHVO7w9MYorPIZunAuBuif1HNmtp1yMk8="; + }) + (fetchpatch { + url = "https://github.com/midchildan/EPGStation/commit/c948e833e485c2b7cb7fb33b953cca1e20de3a70.patch"; + sha256 = "sha256-nM6KkVRURuQFZLXZ2etLU1a1+BoaJnfjngo07TFbe58="; + }) + ]; + + npmDepsHash = "sha256-dohencRGuvc+vSoclLVn5iles4GOuTq26BrEVeJ4GC4="; + npmBuildScript = "build-server"; + npmRootPath = "/lib/node_modules/epgstation"; + + buildInputs = [ bash ]; + nativeBuildInputs = [ installShellFiles makeWrapper python3 ]; + + clientDir = buildNpmPackage { + pname = "${pname}-client"; + inherit version src installPhase meta; + + npmDepsHash = "sha256-a/cDPABWI4lPxvSOI4D90O71A9lm8icPMak/g6DPYQY="; + npmRootPath = ""; + + sourceRoot = "${src.name}/client"; + NODE_OPTIONS = "--openssl-legacy-provider"; + }; + + postBuild = '' + rm -rf client + cp -r ${clientDir} client + ''; + + # installPhase is shared with clientDir + installPhase = '' + runHook preInstall + + npm prune --omit dev --no-save \ + $npmInstallFlags \ + "''${npmInstallFlagsArray[@]}" \ + $npmFlags \ + "''${npmFlagsArray[@]}" + + mkdir -p $out$npmRootPath + cp -r . $out$npmRootPath + + runHook postInstall + ''; + + postInstall = + let + runtimeDeps = [ nodejs bash ]; + in + '' + mkdir -p $out/{bin,libexec,share/doc/epgstation} + + pushd $out$npmRootPath + + mv config/enc.js.template $out/libexec/enc.js + mv LICENSE Readme.md $out/share/doc/epgstation + mv doc/* $out/share/doc/epgstation + sed 's/@DESCRIPTION@/${meta.description}/g' ${./epgstation.1} > doc/epgstation.1 + installManPage doc/epgstation.1 + rm -rf doc + + # just log to stdout and let journald do its job + rm -rf logs + + # Replace the existing configuration and runtime state directories with + # symlinks. Without this, they would all be non-writable because they + # reside in the Nix store. Note that the source path won't be accessible + # at build time. + rm -r config data drop recorded thumbnail src/db/subscribers src/db/migrations + ln -sfT /etc/epgstation config + ln -sfT /var/lib/epgstation data + ln -sfT /var/lib/epgstation/drop drop + ln -sfT /var/lib/epgstation/recorded recorded + ln -sfT /var/lib/epgstation/thumbnail thumbnail + ln -sfT /var/lib/epgstation/db/subscribers src/db/subscribers + ln -sfT /var/lib/epgstation/db/migrations src/db/migrations + + makeWrapper ${nodejs}/bin/npm $out/bin/epgstation \ + --chdir $out$npmRootPath \ + --prefix PATH : ${lib.makeBinPath runtimeDeps} \ + --set APP_ROOT_PATH $out$npmRootPath + + popd + ''; + + meta = with lib; { + description = "DVR software compatible with Mirakurun."; + homepage = "https://github.com/l3tnun/EPGStation"; + license = licenses.mit; + maintainers = with maintainers; [ midchildan ]; + mainProgram = "epgstation"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/epgstation/epgstation.1 b/nixpkgs/pkgs/applications/video/epgstation/epgstation.1 new file mode 100644 index 000000000000..2dc67f646088 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/epgstation/epgstation.1 @@ -0,0 +1,56 @@ +.Dd $Mdocdate$ +.Dt EPGSTATION 1 +.Os +.Sh NAME +.Nm epgstation +.Nd @DESCRIPTION@ +.Sh SYNOPSIS +.Nm +.Bk -words +.Op Ar command Op Ar args +.Ek +.Sh DESCRIPTION +.Nm +is a wrapper command for EPGStation provided by Nix. It's actually a thin +wrapper around the +.Xr npm 1 +command line tool which you can use to invoke npm commands from the EPGStation +project directory. The command line arguments are simply passed as-is to +.Xr npm 1 . +.Pp +On NixOS, it is strongly recommended that you enable the epgstation module +instead of invoking this command directly to launch EPGStation. On other +platforms, run +.Pp +.Dl $ epgstation start +.Pp +to start EPGStation. +.Sh FILES +.Bl -tag -width Ds -compact +.It Pa /etc/epgstation/config.yml +.Nm +configuration file. +.El +.Sh EXAMPLES +Start EPGStation. +.Pp +.Dl $ epgstation start +.Pp +Start EPGStation in development mode. +.Pp +.Dl $ epgstation run dev-start +.Pp +Backup the EPGstation database. +.Pp +.Dl $ epgstation run backup /path/to/dst +.Pp +Restore the EPGstation database. +.Pp +.Dl $ epgstation run restore /path/to/src +.Pp +Restore the EPGstation database from the prior v1 release. +.Pp +.Dl $ epgstation run v1migrate /path/to/src +.Pp +.Sh SEE ALSO +.Xr npm 1 diff --git a/nixpkgs/pkgs/applications/video/epgstation/use-mysql-over-domain-socket.patch b/nixpkgs/pkgs/applications/video/epgstation/use-mysql-over-domain-socket.patch new file mode 100644 index 000000000000..178ec455ef62 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/epgstation/use-mysql-over-domain-socket.patch @@ -0,0 +1,46 @@ +diff --git a/ormconfig.js b/ormconfig.js +index 5591853b..838c06cb 100644 +--- a/ormconfig.js ++++ b/ormconfig.js +@@ -38,8 +38,6 @@ switch (config.dbtype) { + + case 'mysql': + ormConfig.type = 'mysql'; +- ormConfig.host = config.mysql.host; +- ormConfig.port = config.mysql.port; + ormConfig.username = config.mysql.user; + ormConfig.password = config.mysql.password; + ormConfig.database = config.mysql.database; +@@ -49,6 +47,12 @@ switch (config.dbtype) { + } else { + ormConfig.charset = config.mysql.charset; + } ++ if (config.mysql.socketPath) { ++ ormConfig.extra = { socketPath: config.mysql.socketPath }; ++ } else { ++ ormConfig.host = config.mysql.host; ++ ormConfig.port = config.mysql.port; ++ } + break; + + case 'postgres': +diff --git a/src/model/IConfigFile.ts b/src/model/IConfigFile.ts +index 6a502e83..ba84a423 100644 +--- a/src/model/IConfigFile.ts ++++ b/src/model/IConfigFile.ts +@@ -61,12 +61,13 @@ export default interface IConfigFile { + regexp?: boolean; + }; + mysql?: { +- host: string; ++ host?: string; + user: string; +- port: number; ++ port?: number; + password: string; + database: string; + charset?: string; ++ socketPath?: string; + }; + postgres?: { + host: string; diff --git a/nixpkgs/pkgs/applications/video/f1viewer/default.nix b/nixpkgs/pkgs/applications/video/f1viewer/default.nix new file mode 100644 index 000000000000..5d89a8df657c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/f1viewer/default.nix @@ -0,0 +1,24 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "f1viewer"; + version = "2.7.0"; + + src = fetchFromGitHub { + owner = "SoMuchForSubtlety"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-jXC2dENXuqicNQqTHyZKsjibDvjta/npQmf3+uivjX0="; + }; + + vendorHash = "sha256-UNeH3zxgssXxFpJws6nAL8EgXt0DRyAQfmlJWz/qyDg="; + + meta = with lib; { + description = + "A TUI to view Formula 1 footage using VLC or another media player"; + homepage = "https://github.com/SoMuchForSubtlety/f1viewer"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ michzappa ]; + mainProgram = "f1viewer"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/ffmpeg-normalize/default.nix b/nixpkgs/pkgs/applications/video/ffmpeg-normalize/default.nix new file mode 100644 index 000000000000..a3b40daacf79 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/ffmpeg-normalize/default.nix @@ -0,0 +1,30 @@ +{ lib +, buildPythonApplication +, fetchPypi +, ffmpeg +, ffmpeg-progress-yield +}: + +buildPythonApplication rec { + pname = "ffmpeg-normalize"; + version = "1.26.1"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-OwREpfWaP0tdAjMGjGpVIAQn8rlTTjSfT+0t5g/2yjQ="; + }; + + propagatedBuildInputs = [ ffmpeg ffmpeg-progress-yield ]; + + checkPhase = '' + $out/bin/ffmpeg-normalize --help > /dev/null + ''; + + meta = with lib; { + description = "Normalize audio via ffmpeg"; + homepage = "https://github.com/slhck/ffmpeg-normalize"; + license = with licenses; [ mit ]; + maintainers = with maintainers; [ prusnak ]; + mainProgram = "ffmpeg-normalize"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/filebot/default.nix b/nixpkgs/pkgs/applications/video/filebot/default.nix new file mode 100644 index 000000000000..738bd9418f00 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/filebot/default.nix @@ -0,0 +1,72 @@ +{ lib, stdenv, fetchurl, coreutils, openjdk17, makeWrapper, autoPatchelfHook +, zlib, libzen, libmediainfo, curlWithGnuTls, libmms, glib +, genericUpdater, writeShellScript +}: + +let + lanterna = fetchurl { + url = "https://search.maven.org/remotecontent?filepath=com/googlecode/lanterna/lanterna/3.1.1/lanterna-3.1.1.jar"; + hash = "sha256-7zxCeXYW5v9ritnvkwRpPKdgSptCmkT3HJOaNgQHUmQ="; + }; +in stdenv.mkDerivation (finalAttrs: { + pname = "filebot"; + version = "5.1.3"; + + src = fetchurl { + url = "https://web.archive.org/web/20230917142929/https://get.filebot.net/filebot/FileBot_${finalAttrs.version}/FileBot_${finalAttrs.version}-portable.tar.xz"; + hash = "sha256-1TkCV3Cjg/5YZODceV5mQDsPYk09IU7+UHwPRwt2vAQ="; + }; + + unpackPhase = "tar xvf $src"; + + nativeBuildInputs = [ makeWrapper autoPatchelfHook ]; + + buildInputs = [ zlib libzen libmediainfo curlWithGnuTls libmms glib ]; + + postPatch = '' + # replace lanterna.jar to be able to specify `com.googlecode.lanterna.terminal.UnixTerminal.sttyCommand` + cp ${lanterna} jar/lanterna.jar + ''; + + dontBuild = true; + installPhase = '' + mkdir -p $out/opt $out/bin + # Since FileBot has dependencies on relative paths between files, all required files are copied to the same location as is. + cp -r filebot.sh lib/ jar/ $out/opt/ + # Filebot writes to $APP_DATA, which fails due to read-only filesystem. Using current user .local directory instead. + substituteInPlace $out/opt/filebot.sh \ + --replace 'APP_DATA="$FILEBOT_HOME/data/$(id -u)"' 'APP_DATA=''${XDG_DATA_HOME:-$HOME/.local/share}/filebot/data' \ + --replace '$FILEBOT_HOME/data/.license' '$APP_DATA/.license' \ + --replace '-jar "$FILEBOT_HOME/jar/filebot.jar"' '-Dcom.googlecode.lanterna.terminal.UnixTerminal.sttyCommand=${coreutils}/bin/stty -jar "$FILEBOT_HOME/jar/filebot.jar"' + wrapProgram $out/opt/filebot.sh \ + --prefix PATH : ${lib.makeBinPath [ openjdk17 ]} + # Expose the binary in bin to make runnable. + ln -s $out/opt/filebot.sh $out/bin/filebot + ''; + + passthru.updateScript = genericUpdater { + versionLister = writeShellScript "filebot-versionLister" '' + curl -s https://www.filebot.net \ + | sed -rne 's,^.*FileBot_([0-9]*\.[0-9]+\.[0-9]+)-portable.tar.xz.*,\1,p' + ''; + }; + + meta = with lib; { + description = "The ultimate TV and Movie Renamer"; + longDescription = '' + FileBot is the ultimate tool for organizing and renaming your Movies, TV + Shows and Anime as well as fetching subtitles and artwork. It's smart and + just works. + ''; + homepage = "https://filebot.net"; + changelog = "https://www.filebot.net/forums/viewforum.php?f=7"; + sourceProvenance = with sourceTypes; [ + binaryBytecode + binaryNativeCode + ]; + license = licenses.unfreeRedistributable; + maintainers = with maintainers; [ gleber felschr ]; + platforms = platforms.linux; + mainProgram = "filebot"; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/flirc/99-flirc.rules b/nixpkgs/pkgs/applications/video/flirc/99-flirc.rules new file mode 100644 index 000000000000..eb02f8a91136 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/flirc/99-flirc.rules @@ -0,0 +1,11 @@ +# Flirc Devices + +# Bootloader +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="20a0", ATTR{idProduct}=="0000", MODE="0666" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="20a0", ATTR{idProduct}=="0002", MODE="0666" +SUBSYSTEM=="hidraw", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="0005", MODE="0666" + +# Flirc Application +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="20a0", ATTR{idProduct}=="0001", MODE="0666" +SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTR{idVendor}=="20a0", ATTR{idProduct}=="0004", MODE="0666" +SUBSYSTEM=="hidraw", ATTRS{idVendor}=="20a0", ATTRS{idProduct}=="0006", MODE="0666" diff --git a/nixpkgs/pkgs/applications/video/flirc/default.nix b/nixpkgs/pkgs/applications/video/flirc/default.nix new file mode 100644 index 000000000000..fc7302378300 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/flirc/default.nix @@ -0,0 +1,51 @@ +{ lib +, stdenv +, fetchurl +, autoPatchelfHook +, wrapQtAppsHook +, hidapi +, readline +, qtsvg +, qtxmlpatterns +}: + +stdenv.mkDerivation { + pname = "flirc"; + version = "3.27.10"; + + src = fetchurl { + url = "https://web.archive.org/web/20240110170238/http://apt.flirc.tv/arch/x86_64/flirc.latest.x86_64.tar.gz"; + hash = "sha256-iTr4vzFQ/+dsbsYD6sc8aTHctTkLKf5HnHBnO7cX5qc="; + }; + + nativeBuildInputs = [ + autoPatchelfHook + wrapQtAppsHook + ]; + + buildInputs = [ + hidapi + readline + qtsvg + qtxmlpatterns + ]; + + dontConfigure = true; + dontBuild = true; + + # udev rules don't appear in the official package + # https://flirc.gitbooks.io/flirc-instructions/content/linux.html + installPhase = '' + install -D -t $out/bin/ Flirc flirc_util + install -D ${./99-flirc.rules} $out/lib/udev/rules.d/99-flirc.rules + ''; + + meta = with lib; { + homepage = "https://flirc.tv/more/flirc-usb"; + description = "Use any Remote with your Media Center"; + maintainers = with maintainers; [ aanderse ]; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + license = licenses.unfree; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/flowblade/default.nix b/nixpkgs/pkgs/applications/video/flowblade/default.nix new file mode 100644 index 000000000000..004601163190 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/flowblade/default.nix @@ -0,0 +1,47 @@ +{ lib, fetchFromGitHub, stdenv +, ffmpeg, frei0r, sox, gtk3, python3, ladspaPlugins +, gobject-introspection, makeWrapper, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "flowblade"; + version = "2.12.0.2"; + + src = fetchFromGitHub { + owner = "jliljebl"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-SZ/J03PYeAbqQlNQXdqLSduo/5VjQ7VH4eErJqO3Ua0="; + }; + + buildInputs = [ + ffmpeg frei0r sox gtk3 ladspaPlugins + (python3.withPackages (ps: with ps; [ mlt pygobject3 dbus-python numpy pillow ])) + ]; + + nativeBuildInputs = [ gobject-introspection makeWrapper wrapGAppsHook ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out + cp -a ${src}/flowblade-trunk $out/flowblade + + makeWrapper $out/flowblade/flowblade $out/bin/flowblade \ + --set FREI0R_PATH ${frei0r}/lib/frei0r-1 \ + --set LADSPA_PATH ${ladspaPlugins}/lib/ladspa \ + --prefix PATH : "${lib.makeBinPath [ ffmpeg ]}" \ + ''${gappsWrapperArgs[@]} + + runHook postInstall + ''; + + meta = with lib; { + description = "Multitrack Non-Linear Video Editor"; + homepage = "https://jliljebl.github.io/flowblade/"; + license = with licenses; [ gpl3Plus ]; + platforms = platforms.linux; + maintainers = with maintainers; [ polygon ]; + mainProgram = "flowblade"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/freetube/default.nix b/nixpkgs/pkgs/applications/video/freetube/default.nix new file mode 100644 index 000000000000..98b486ce2655 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/freetube/default.nix @@ -0,0 +1,54 @@ +{ stdenv, lib, fetchurl, appimageTools, makeWrapper, electron, nixosTests }: + +stdenv.mkDerivation rec { + pname = "freetube"; + version = "0.19.2"; + + src = fetchurl { + url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${version}-beta/freetube_${version}_amd64.AppImage"; + sha256 = "sha256-GhlU02CmglHUzVTqoajXFS1E6WXxXjxRTdiDEDqsH8s="; + }; + + passthru.tests = nixosTests.freetube; + + appimageContents = appimageTools.extractType2 { + name = "${pname}-${version}"; + inherit src; + }; + + dontUnpack = true; + dontConfigure = true; + dontBuild = true; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out/share/${pname} $out/share/applications $out/share/icons/hicolor/scalable/apps + + cp -a ${appimageContents}/{locales,resources} $out/share/${pname} + cp -a ${appimageContents}/freetube.desktop $out/share/applications/${pname}.desktop + cp -a ${appimageContents}/usr/share/icons/hicolor/scalable/freetube.svg $out/share/icons/hicolor/scalable/apps + + substituteInPlace $out/share/applications/${pname}.desktop \ + --replace 'Exec=AppRun' 'Exec=${pname}' + + runHook postInstall + ''; + + postFixup = '' + makeWrapper ${electron}/bin/electron $out/bin/${pname} \ + --add-flags $out/share/${pname}/resources/app.asar \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--enable-features=UseOzonePlatform --ozone-platform=wayland}}" + ''; + + meta = with lib; { + description = "An Open Source YouTube app for privacy"; + homepage = "https://freetubeapp.io/"; + license = licenses.agpl3Only; + maintainers = with maintainers; [ ryneeverett alyaeanyx ]; + inherit (electron.meta) platforms; + mainProgram = "freetube"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/frigate/default.nix b/nixpkgs/pkgs/applications/video/frigate/default.nix new file mode 100644 index 000000000000..9aee25c46ce5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/frigate/default.nix @@ -0,0 +1,179 @@ +{ lib +, callPackage +, python3 +, fetchFromGitHub +, fetchurl +, fetchpatch2 +, frigate +, nixosTests +}: + +let + version = "0.13.2"; + + src = fetchFromGitHub { + #name = "frigate-${version}-source"; + owner = "blakeblackshear"; + repo = "frigate"; + rev = "refs/tags/v${version}"; + hash = "sha256-NVT7yaJkVA7b7GL0S0fHjNneBzhjCru56qY1Q4sTVcE="; + }; + + frigate-web = callPackage ./web.nix { + inherit version src; + }; + + python = python3.override { + packageOverrides = self: super: { + pydantic = super.pydantic_1; + + versioningit = super.versioningit.overridePythonAttrs { + # checkPhase requires pydantic>=2 + doCheck = false; + }; + }; + }; + + # Tensorflow Lite models + # https://github.com/blakeblackshear/frigate/blob/v0.13.0/docker/main/Dockerfile#L96-L97 + tflite_cpu_model = fetchurl { + url = "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess.tflite"; + hash = "sha256-kLszpjTgQZFMwYGapd+ZgY5sOWxNLblSwP16nP/Eck8="; + }; + tflite_edgetpu_model = fetchurl { + url = "https://github.com/google-coral/test_data/raw/release-frogfish/ssdlite_mobiledet_coco_qat_postprocess_edgetpu.tflite"; + hash = "sha256-Siviu7YU5XbVbcuRT6UnUr8PE0EVEnENNV2X+qGzVkE="; + }; + + # OpenVino models + # https://github.com/blakeblackshear/frigate/blob/v0.13.0/docker/main/Dockerfile#L101 + openvino_model = fetchurl { + url = "https://github.com/openvinotoolkit/open_model_zoo/raw/master/data/dataset_classes/coco_91cl_bkgr.txt"; + hash = "sha256-5Cj2vEiWR8Z9d2xBmVoLZuNRv4UOuxHSGZQWTJorXUQ="; + }; +in +python.pkgs.buildPythonApplication rec { + pname = "frigate"; + inherit version; + format = "other"; + + inherit src; + + patches = [ + (fetchpatch2 { + name = "frigate-flask3.0-compat.patch"; + url = "https://github.com/blakeblackshear/frigate/commit/56bdacc1c661eff8a323e033520e75e2ba0a3842.patch"; + hash = "sha256-s/goUJxIbjq/woCEOEZECdcZoJDoWc1eM63sd60cxeY="; + }) + ]; + + postPatch = '' + echo 'VERSION = "${version}"' > frigate/version.py + + substituteInPlace frigate/app.py \ + --replace "Router(migrate_db)" 'Router(migrate_db, "${placeholder "out"}/share/frigate/migrations")' + + substituteInPlace frigate/const.py \ + --replace "/media/frigate" "/var/lib/frigate" \ + --replace "/tmp/cache" "/var/cache/frigate" \ + --replace "/config" "/var/lib/frigate" \ + --replace "{CONFIG_DIR}/model_cache" "/var/cache/frigate/model_cache" + + substituteInPlace frigate/http.py \ + --replace "/opt/frigate" "${placeholder "out"}/${python.sitePackages}" + + substituteInPlace frigate/output.py \ + --replace "/opt/frigate" "${placeholder "out"}/${python.sitePackages}" + + substituteInPlace frigate/detectors/detector_config.py \ + --replace "/labelmap.txt" "${placeholder "out"}/share/frigate/labelmap.txt" + + substituteInPlace frigate/config.py \ + --replace "/cpu_model.tflite" "${tflite_cpu_model}" \ + --replace "/edgetpu_model.tflite" "${tflite_edgetpu_model}" + + substituteInPlace frigate/test/test_config.py \ + --replace "(MODEL_CACHE_DIR" "('/build/model_cache'" \ + --replace "/config/model_cache" "/build/model_cache" + ''; + + dontBuild = true; + + propagatedBuildInputs = with python.pkgs; [ + # docker/main/requirements.txt + scikit-build + # docker/main/requirements-wheel.txt + click + flask + imutils + markupsafe + matplotlib + norfair + numpy + onvif-zeep + opencv4 + openvino + paho-mqtt + peewee + peewee-migrate + psutil + py3nvml + pydantic + pytz + pyyaml + requests + ruamel-yaml + scipy + setproctitle + tensorflow + tzlocal + unidecode + ws4py + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/${python.sitePackages}/frigate + cp -R frigate/* $out/${python.sitePackages}/frigate/ + + mkdir -p $out/share/frigate + cp -R {migrations,labelmap.txt} $out/share/frigate/ + + cp --no-preserve=mode ${openvino_model} $out/share/frigate/coco_91cl_bkgr.txt + sed -i 's/truck/car/g' $out/share/frigate/coco_91cl_bkgr.txt + + runHook postInstall + ''; + + nativeCheckInputs = with python.pkgs; [ + pytestCheckHook + ]; + + disabledTests = [ + # Test needs network access + "test_plus_labelmap" + ]; + + passthru = { + web = frigate-web; + inherit python; + pythonPath =(python.pkgs.makePythonPath propagatedBuildInputs) + ":${frigate}/${python.sitePackages}"; + tests = { + inherit (nixosTests) frigate; + }; + }; + + meta = with lib; { + changelog = "https://github.com/blakeblackshear/frigate/releases/tag/v${version}"; + description = "NVR with realtime local object detection for IP cameras"; + longDescription = '' + A complete and local NVR designed for Home Assistant with AI + object detection. Uses OpenCV and Tensorflow to perform realtime + object detection locally for IP cameras. + ''; + homepage = "https://github.com/blakeblackshear/frigate"; + license = licenses.mit; + maintainers = with maintainers; [ hexa ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/frigate/web.nix b/nixpkgs/pkgs/applications/video/frigate/web.nix new file mode 100644 index 000000000000..be530c5c3637 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/frigate/web.nix @@ -0,0 +1,26 @@ +{ buildNpmPackage +, src +, version +}: + +buildNpmPackage { + pname = "frigate-web"; + inherit version src; + + sourceRoot = "${src.name}/web"; + + postPatch = '' + substituteInPlace package.json \ + --replace-fail "--base=/BASE_PATH/" "" + + substituteInPlace src/routes/Storage.jsx \ + --replace-fail "/media/frigate" "/var/lib/frigate" \ + --replace-fail "/tmp/cache" "/var/cache/frigate" + ''; + + npmDepsHash = "sha256-+36quezGArqIM9dM+UihwcIgmE3EVmJQThuicLgDW4A="; + + installPhase = '' + cp -rv dist/ $out + ''; +} diff --git a/nixpkgs/pkgs/applications/video/giph/default.nix b/nixpkgs/pkgs/applications/video/giph/default.nix new file mode 100644 index 000000000000..9d0175911d69 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/giph/default.nix @@ -0,0 +1,44 @@ +{ stdenvNoCC +, lib +, fetchFromGitHub +, ffmpeg +, xdotool +, slop +, libnotify +, procps +, makeWrapper +}: + +stdenvNoCC.mkDerivation rec { + pname = "giph"; + version = "1.1.1"; + + src = fetchFromGitHub { + owner = "phisch"; + repo = pname; + rev = version; + sha256 = "19l46m1f32b3bagzrhaqsfnl5n3wbrmg3sdy6fdss4y1yf6nqayk"; + }; + + dontConfigure = true; + + dontBuild = true; + + installFlags = [ "PREFIX=${placeholder "out"}" ]; + + nativeBuildInputs = [ makeWrapper ]; + + postInstall = '' + wrapProgram $out/bin/giph \ + --prefix PATH : ${lib.makeBinPath [ ffmpeg xdotool libnotify slop procps ]} + ''; + + meta = with lib; { + homepage = "https://github.com/phisch/giph"; + description = "Simple gif recorder"; + license = licenses.mit; + maintainers = [ maintainers.lom ]; + platforms = platforms.linux; + mainProgram = "giph"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/glaxnimate/default.nix b/nixpkgs/pkgs/applications/video/glaxnimate/default.nix new file mode 100644 index 000000000000..a50e3d15614a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/glaxnimate/default.nix @@ -0,0 +1,87 @@ +{ lib +, stdenv +, fetchFromGitLab +, cmake +, zlib +, potrace +, ffmpeg +, libarchive +, python3 +, qtbase +, qttools +, wrapQtAppsHook +, testers +, qtsvg +, qtimageformats + # For the tests +, glaxnimate # Call itself, for the tests +, xvfb-run +}: +let + # TODO: try to add a python library, see toPythonModule in doc/languages-frameworks/python.section.md + python3WithLibs = python3.withPackages (ps: with ps; [ + # In data/lib/python-lottie/requirements.txt + numpy + pillow + cairosvg + fonttools + grapheme + opencv4 + pyqt5 + qscintilla + # Not sure if needed, but appears in some files + pyyaml + requests + pybind11 + ]); +in +stdenv.mkDerivation rec { + pname = "glaxnimate"; + version = "0.5.4"; + + src = fetchFromGitLab { + owner = "mattbas"; + repo = "${pname}"; + rev = version; + sha256 = "sha256-8oHJCQdP2xxSSDM0MDkSrG89WgCtMKm1AKlddnq3gig="; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ + cmake + wrapQtAppsHook + qttools + ]; + + buildInputs = [ + zlib + potrace + # Upstream asks for libav dependency, which is fulfilled by ffmpeg + ffmpeg + libarchive + qtbase + qttools + qtsvg + qtimageformats + python3WithLibs + ]; + + # Translation needs to be separately compiled + # https://gitlab.com/mattbas/glaxnimate/-/issues/648 + buildFlags = [ "translations" ]; + + qtWrapperArgs = [ ''--prefix PATH : ${python3WithLibs}/bin'' ]; + + passthru.tests.version = lib.optionalAttrs stdenv.isLinux (testers.testVersion { + package = glaxnimate; + command = "${xvfb-run}/bin/xvfb-run glaxnimate --version"; + }); + + meta = with lib; { + homepage = "https://gitlab.com/mattbas/glaxnimate"; + description = "Simple vector animation program."; + license = licenses.gpl3; + maintainers = with maintainers; [ tobiasBora ]; + mainProgram = "glaxnimate"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gnome-mplayer/default.nix b/nixpkgs/pkgs/applications/video/gnome-mplayer/default.nix new file mode 100644 index 000000000000..bab41b11bee9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gnome-mplayer/default.nix @@ -0,0 +1,38 @@ +{lib, stdenv, substituteAll, fetchFromGitHub, pkg-config, gettext, glib, gtk3, gmtk, dbus, dbus-glib +, libnotify, libpulseaudio, mplayer, wrapGAppsHook }: + +stdenv.mkDerivation rec { + pname = "gnome-mplayer"; + version = "1.0.9"; + + src = fetchFromGitHub { + owner = "kdekorte"; + repo = "gnome-mplayer"; + rev = "v${version}"; + sha256 = "0qvy9fllvg1mad6y1j79iaqa6khs0q2cb0z62yfg4srbr07fi8xr"; + }; + + nativeBuildInputs = [ pkg-config gettext wrapGAppsHook ]; + buildInputs = [ glib gtk3 gmtk dbus dbus-glib libnotify libpulseaudio ]; + + patches = [ + (substituteAll { + src = ./fix-paths.patch; + mencoder = "${mplayer}/bin/mencoder"; + mplayer = "${mplayer}/bin/mplayer"; + }) + ]; + + # Workaround build failure on -fno-common toolchains: + # ld: mpris-interface.o:src/playlist.h:32: multiple definition of + # `plclose'; gui.o:src/playlist.h:32: first defined here + env.NIX_CFLAGS_COMPILE = "-fcommon"; + + meta = with lib; { + description = "Gnome MPlayer, a simple GUI for MPlayer"; + homepage = "https://sites.google.com/site/kdekorte2/gnomemplayer"; + license = licenses.gpl2; + maintainers = with maintainers; []; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gnome-mplayer/fix-paths.patch b/nixpkgs/pkgs/applications/video/gnome-mplayer/fix-paths.patch new file mode 100644 index 000000000000..ede4991c4662 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gnome-mplayer/fix-paths.patch @@ -0,0 +1,87 @@ +--- a/src/gui.c ++++ b/src/gui.c +@@ -7470,7 +7470,7 @@ + filename = g_strdup_printf("%s/00000001.jpg", dirname); + g_free(basepath); + // run mplayer and try to get the first frame and convert it to a jpeg +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + av[ac++] = g_strdup_printf("-vo"); + av[ac++] = g_strdup_printf("jpeg:outdir=%s", dirname); + av[ac++] = g_strdup_printf("-ao"); +--- a/src/property_page_common.c ++++ b/src/property_page_common.c +@@ -80,7 +80,7 @@ + MetaData *ret; + ret = g_new0(MetaData, 1); + +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + av[ac++] = g_strdup_printf("-vo"); + av[ac++] = g_strdup_printf("null"); + av[ac++] = g_strdup_printf("-ao"); +--- a/src/support.c ++++ b/src/support.c +@@ -566,7 +566,7 @@ + } else { + playlist = FALSE; + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } +@@ -728,7 +728,7 @@ + playlist = FALSE; + // run mplayer and try to get the first frame and convert it to a jpeg + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } +@@ -825,7 +825,7 @@ + playlist = FALSE; + + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } +@@ -1251,7 +1251,7 @@ + gm_log(verbose, G_LOG_LEVEL_INFO, "getting file metadata for %s", name); + + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } +@@ -1532,7 +1532,7 @@ + return 0; + + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } +@@ -1597,7 +1597,7 @@ + + if (control_id == 0) { + ac = 0; +- av[ac++] = g_strdup_printf("mencoder"); ++ av[ac++] = g_strdup_printf("@mencoder@"); + av[ac++] = g_strdup_printf("-ovc"); + av[ac++] = g_strdup_printf("copy"); + av[ac++] = g_strdup_printf("-oac"); +@@ -2830,7 +2830,7 @@ + gboolean ret = TRUE; + + if (mplayer_bin == NULL || !g_file_test(mplayer_bin, G_FILE_TEST_EXISTS)) { +- av[ac++] = g_strdup_printf("mplayer"); ++ av[ac++] = g_strdup_printf("@mplayer@"); + } else { + av[ac++] = g_strdup_printf("%s", mplayer_bin); + } diff --git a/nixpkgs/pkgs/applications/video/gnomecast/default.nix b/nixpkgs/pkgs/applications/video/gnomecast/default.nix new file mode 100644 index 000000000000..9d0bfa9e966e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gnomecast/default.nix @@ -0,0 +1,46 @@ +{ stdenv, lib, python3Packages, fetchFromGitHub, gtk3, gobject-introspection, ffmpeg, wrapGAppsHook }: + +with python3Packages; +buildPythonApplication rec { + pname = "gnomecast"; + version = "unstable-2022-04-23"; + + src = fetchFromGitHub { + owner = "keredson"; + repo = "gnomecast"; + rev = "d42d8915838b01c5cadacb322909e08ffa455d4f"; + sha256 = "sha256-CJpbBuRzEjWb8hsh3HMW4bZA7nyDAwjrERCS5uGdwn8="; + }; + + nativeBuildInputs = [ wrapGAppsHook ]; + propagatedBuildInputs = [ + pychromecast + bottle + pycaption + paste + html5lib + pygobject3 + dbus-python + gtk3 + gobject-introspection + ]; + + # NOTE: gdk-pixbuf setup hook does not run with strictDeps + # https://nixos.org/manual/nixpkgs/stable/#ssec-gnome-hooks-gobject-introspection + strictDeps = false; + + preFixup = '' + gappsWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}) + ''; + + # no tests + doCheck = false; + + meta = with lib; { + description = "A native Linux GUI for Chromecasting local files"; + homepage = "https://github.com/keredson/gnomecast"; + license = with licenses; [ gpl3 ]; + broken = stdenv.isDarwin; + mainProgram = "gnomecast"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/go-chromecast/default.nix b/nixpkgs/pkgs/applications/video/go-chromecast/default.nix new file mode 100644 index 000000000000..d554fd56847c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/go-chromecast/default.nix @@ -0,0 +1,25 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "go-chromecast"; + version = "0.3.1"; + + src = fetchFromGitHub { + owner = "vishen"; + repo = pname; + rev = "v${version}"; + hash = "sha256-Kzo8iWj4mtnX1Jxm2sLsnmEOmpzScxWHZ/sLYYm3vQI="; + }; + + vendorHash = "sha256-cEUlCR/xtPJJSWplV1COwV6UfzSmVArF4V0pJRk+/Og="; + + ldflags = [ "-s" "-w" "-X main.version=${version}" "-X main.commit=${src.rev}" "-X main.date=unknown" ]; + + meta = with lib; { + homepage = "https://github.com/vishen/go-chromecast"; + description = "CLI for Google Chromecast, Home devices and Cast Groups"; + license = licenses.asl20; + maintainers = with maintainers; [ marsam ]; + mainProgram = "go-chromecast"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/go2tv/default.nix b/nixpkgs/pkgs/applications/video/go2tv/default.nix new file mode 100644 index 000000000000..d8fc548f10b3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/go2tv/default.nix @@ -0,0 +1,58 @@ +{ lib +, stdenv +, buildGoModule +, fetchFromGitHub +, Carbon +, Cocoa +, Kernel +, UserNotifications +, xorg +, libglvnd +, pkg-config +, withGui ? true +}: + +buildGoModule rec { + pname = "go2tv" + lib.optionalString (!withGui) "-lite"; + version = "1.15.0"; + + src = fetchFromGitHub { + owner = "alexballas"; + repo = "go2tv"; + rev = "v${version}"; + sha256 = "sha256-5GOhTDlUpzInMm8hVcBjbf1CXRw2GQITRtj6UaxYHtE="; + }; + + vendorHash = null; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ + xorg.libX11 + xorg.libXcursor + xorg.libXrandr + xorg.libXinerama + xorg.libXi + xorg.libXext + xorg.libXxf86vm + libglvnd + ] ++ lib.optionals stdenv.isDarwin [ Carbon Cocoa Kernel UserNotifications ]; + + ldflags = [ + "-s" "-w" + "-linkmode=external" + ]; + + # conditionally build with GUI or not (go2tv or go2tv-lite sub-packages) + subPackages = [ "cmd/${pname}" ]; + + doCheck = false; + + meta = with lib; { + description = "Cast media files to UPnP/DLNA Media Renderers and Smart TVs"; + homepage = "https://github.com/alexballas/go2tv"; + license = licenses.mit; + maintainers = with maintainers; [ gdamjan ]; + mainProgram = "go2tv"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gpac/default.nix b/nixpkgs/pkgs/applications/video/gpac/default.nix new file mode 100644 index 000000000000..7b8113e906e4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gpac/default.nix @@ -0,0 +1,120 @@ +{ lib, stdenv, fetchFromGitHub, fetchpatch, pkg-config, zlib }: + +stdenv.mkDerivation rec { + version = "2.2.1"; + pname = "gpac"; + + src = fetchFromGitHub { + owner = "gpac"; + repo = "gpac"; + rev = "v${version}"; + hash = "sha256-VjA1VFMsYUJ8uJqhYgjXYtqlGWSJHr16Ck3b5stuZWw="; + }; + + patches = [ + (fetchpatch { + name = "CVE-2023-2837.patch"; + url = "https://github.com/gpac/gpac/commit/6f28c4cd607d83ce381f9b4a9f8101ca1e79c611.patch"; + hash = "sha256-HA6qMungIoh1fz1R3zUvV1Ahoa2pp861JRzYY/NNDQI="; + }) + (fetchpatch { + name = "CVE-2023-2838.patch"; + url = "https://github.com/gpac/gpac/commit/c88df2e202efad214c25b4e586f243b2038779ba.patch"; + hash = "sha256-gIISG7pz01iVoWqlho2BL27ki87i3pGkug2Z+KKn+xs="; + }) + (fetchpatch { + name = "CVE-2023-2839.patch"; + url = "https://github.com/gpac/gpac/commit/047f96fb39e6bf70cb9f344093f5886e51dce0ac.patch"; + hash = "sha256-i+/iFrWJ+Djc8xYtIOYvlZ98fYUdJooqUz9y/uhusL4="; + }) + (fetchpatch { + name = "CVE-2023-2840.patch"; + url = "https://github.com/gpac/gpac/commit/ba59206b3225f0e8e95a27eff41cb1c49ddf9a37.patch"; + hash = "sha256-mwO9Qeeufq0wa57lO+LgWGjrN3CHMYK+xr2ZBalKBQo="; + }) + ]; + + # this is the bare minimum configuration, as I'm only interested in MP4Box + # For most other functionality, this should probably be extended + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ zlib ]; + + enableParallelBuilding = true; + + meta = with lib; { + description = "Open Source multimedia framework for research and academic purposes"; + longDescription = '' + GPAC is an Open Source multimedia framework for research and academic purposes. + The project covers different aspects of multimedia, with a focus on presentation + technologies (graphics, animation and interactivity) and on multimedia packaging + formats such as MP4. + + GPAC provides three sets of tools based on a core library called libgpac: + + A multimedia player, called Osmo4 / MP4Client, + A multimedia packager, called MP4Box, + And some server tools included in MP4Box and MP42TS applications. + ''; + homepage = "https://gpac.wp.imt.fr"; + license = licenses.lgpl21; + maintainers = with maintainers; [ bluescreen303 mgdelacroix ]; + platforms = platforms.linux; + knownVulnerabilities = [ + "CVE-2023-48958" + "CVE-2023-48090" + "CVE-2023-48039" + "CVE-2023-48014" + "CVE-2023-48013" + "CVE-2023-48011" + "CVE-2023-47465" + "CVE-2023-47384" + "CVE-2023-46932" + "CVE-2023-46931" + "CVE-2023-46930" + "CVE-2023-46928" + "CVE-2023-46927" + "CVE-2023-46871" + "CVE-2023-46001" + "CVE-2023-42298" + "CVE-2023-41000" + "CVE-2023-39562" + "CVE-2023-37767" + "CVE-2023-37766" + "CVE-2023-37765" + "CVE-2023-37174" + "CVE-2023-23143" + "CVE-2023-5998" + "CVE-2023-5595" + "CVE-2023-5586" + "CVE-2023-5520" + "CVE-2023-5377" + "CVE-2023-4778" + "CVE-2023-4758" + "CVE-2023-4756" + "CVE-2023-4755" + "CVE-2023-4754" + "CVE-2023-4722" + "CVE-2023-4721" + "CVE-2023-4720" + "CVE-2023-4683" + "CVE-2023-4682" + "CVE-2023-4681" + "CVE-2023-4678" + "CVE-2023-3523" + "CVE-2023-3291" + "CVE-2023-3013" + "CVE-2023-3012" + "CVE-2023-1655" + "CVE-2023-1654" + "CVE-2023-1452" + "CVE-2023-1449" + "CVE-2023-1448" + "CVE-2023-0866" + "CVE-2023-0841" + "CVE-2023-0819" + "CVE-2023-0818" + "CVE-2023-0817" + ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gpu-screen-recorder/default.nix b/nixpkgs/pkgs/applications/video/gpu-screen-recorder/default.nix new file mode 100644 index 000000000000..052548f32f27 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gpu-screen-recorder/default.nix @@ -0,0 +1,62 @@ +{ stdenv +, lib +, fetchurl +, makeWrapper +, pkg-config +, libXcomposite +, libpulseaudio +, ffmpeg +, wayland +, libdrm +, libva +, libglvnd +, libXrandr +}: + +stdenv.mkDerivation { + pname = "gpu-screen-recorder"; + version = "unstable-2023-11-18"; + + # printf "r%s.%s\n" "$(git rev-list --count HEAD)" "$(git rev-parse --short HEAD)" + src = fetchurl { + url = "https://dec05eba.com/snapshot/gpu-screen-recorder.git.r418.5a8900e.tar.gz"; + hash = "sha256-Dal6KxQOTqoNH6e8lYk5XEXGFG/vzbguNFZ9yk9nKe0="; + }; + sourceRoot = "."; + + nativeBuildInputs = [ + pkg-config + makeWrapper + ]; + + buildInputs = [ + libXcomposite + libpulseaudio + ffmpeg + wayland + libdrm + libva + libXrandr + ]; + + buildPhase = '' + ./build.sh + ''; + + postInstall = '' + install -Dt $out/bin gpu-screen-recorder gsr-kms-server + mkdir $out/bin/.wrapped + mv $out/bin/gpu-screen-recorder $out/bin/.wrapped/ + makeWrapper "$out/bin/.wrapped/gpu-screen-recorder" "$out/bin/gpu-screen-recorder" \ + --prefix LD_LIBRARY_PATH : ${libglvnd}/lib \ + --prefix PATH : $out/bin + ''; + + meta = with lib; { + description = "A screen recorder that has minimal impact on system performance by recording a window using the GPU only"; + homepage = "https://git.dec05eba.com/gpu-screen-recorder/about/"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ babbaj ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix b/nixpkgs/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix new file mode 100644 index 000000000000..cc3a5033bd11 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gpu-screen-recorder/gpu-screen-recorder-gtk.nix @@ -0,0 +1,56 @@ +{ stdenv +, lib +, fetchurl +, pkg-config +, makeWrapper +, gtk3 +, libpulseaudio +, libdrm +, gpu-screen-recorder +, libglvnd +, wrapGAppsHook +}: + +stdenv.mkDerivation { + pname = "gpu-screen-recorder-gtk"; + version = "3.2.5"; + + src = fetchurl { + url = "https://dec05eba.com/snapshot/gpu-screen-recorder-gtk.git.r175.cfd18af.tar.gz"; + hash = "sha256-HhZe22Hm9yGoy5WoyuP2+Wj8E3nMs4uf96mzmP6CMqU="; + }; + sourceRoot = "."; + + nativeBuildInputs = [ + pkg-config + makeWrapper + wrapGAppsHook + ]; + + buildInputs = [ + gtk3 + libpulseaudio + libdrm + ]; + + buildPhase = '' + ./build.sh + ''; + + installPhase = '' + install -Dt $out/bin/ gpu-screen-recorder-gtk + install -Dt $out/share/applications/ gpu-screen-recorder-gtk.desktop + + gappsWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ gpu-screen-recorder ]}) + # we also append /run/opengl-driver/lib as it otherwise fails to find libcuda. + gappsWrapperArgs+=(--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ libglvnd ]}:/run/opengl-driver/lib) + ''; + + meta = with lib; { + description = "GTK frontend for gpu-screen-recorder."; + homepage = "https://git.dec05eba.com/gpu-screen-recorder-gtk/about/"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ babbaj ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gyroflow/Cargo.lock b/nixpkgs/pkgs/applications/video/gyroflow/Cargo.lock new file mode 100644 index 000000000000..2a3709e1b15e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/Cargo.lock @@ -0,0 +1,5084 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy 0.7.32", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "ahrs" +version = "0.6.0" +source = "git+https://github.com/jmagnuson/ahrs-rs.git?rev=bf7b41d#bf7b41d09115b47ce8f6060624ed6a8a9bc445d4" +dependencies = [ + "nalgebra 0.32.3", + "num-traits 0.2.17", + "simba 0.8.1", +] + +[[package]] +name = "akaze" +version = "0.7.0" +source = "git+https://github.com/rust-cv/cv.git?rev=82a25ee#82a25ee3a88c1200274182951ccd7dfeae4708d2" +dependencies = [ + "bitarray", + "cv-core", + "derive_more", + "float-ord", + "image", + "log", + "ndarray", + "nshare", + "primal", + "rayon", + "space", + "thiserror", + "wide", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "alsa" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2562ad8dcf0f789f65c6fdaad8a8a9708ed6b488e649da28c01656ad66b8b47" +dependencies = [ + "alsa-sys", + "bitflags 1.3.2", + "libc", + "nix 0.24.3", +] + +[[package]] +name = "alsa-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527" +dependencies = [ + "libc", + "pkg-config", +] + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anyhow" +version = "1.0.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59d2a3357dde987206219e78ecfbbb6e8dad06cbb65292758d3270e6254f7355" + +[[package]] +name = "approx" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" +dependencies = [ + "num-traits 0.2.17", +] + +[[package]] +name = "argh" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7af5ba06967ff7214ce4c7419c7d185be7ecd6cc4965a8f6e1d8ce0398aad219" +dependencies = [ + "argh_derive", + "argh_shared", +] + +[[package]] +name = "argh_derive" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56df0aeedf6b7a2fc67d06db35b09684c3e8da0c95f8f27685cb17e08413d87a" +dependencies = [ + "argh_shared", + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "argh_shared" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5693f39141bda5760ecc4111ab08da40565d1771038c4a0250f03457ec707531" +dependencies = [ + "serde", +] + +[[package]] +name = "argmin" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897c18cfe995220bdd94a27455e5afedc7c688cbf62ad2be88ce7552452aa1b2" +dependencies = [ + "anyhow", + "argmin-math", + "instant", + "num-traits 0.2.17", + "paste", + "rand", + "rand_xoshiro", + "thiserror", +] + +[[package]] +name = "argmin-math" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8798ca7447753fcb3dd98d9095335b1564812a68c6e7c3d1926e1d5cf094e37" +dependencies = [ + "anyhow", + "cfg-if", + "nalgebra 0.32.3", + "num-complex", + "num-integer", + "num-traits 0.2.17", + "rand", + "thiserror", +] + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "arrsac" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73be62e5831762e913e77db9787cc44682c132ebc81fae4e1b7257cdffcc4702" +dependencies = [ + "rand_core", + "sample-consensus", +] + +[[package]] +name = "ash" +version = "0.37.3+1.3.251" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e9c3835d686b0a6084ab4234fcd1b07dbf6e4767dce60874b12356a25ecd4a" +dependencies = [ + "libloading 0.7.4", +] + +[[package]] +name = "assert_float_eq" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cea652ffbedecf29e9cd41bb4c066881057a42c0c119040f022802b26853e77" + +[[package]] +name = "async-broadcast" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c48ccdbf6ca6b121e0f586cbc0e73ae440e56c67c30fa0873b4e110d9c26d2b" +dependencies = [ + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c" +dependencies = [ + "concurrent-queue", + "event-listener 4.0.1", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-executor" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" +dependencies = [ + "async-lock 3.2.0", + "async-task", + "concurrent-queue", + "fastrand 2.0.1", + "futures-lite 2.1.0", + "slab", +] + +[[package]] +name = "async-fs" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279cf904654eeebfa37ac9bb1598880884924aab82e290aa65c9e77a0e142e06" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "blocking", + "futures-lite 1.13.0", +] + +[[package]] +name = "async-io" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +dependencies = [ + "async-lock 2.8.0", + "autocfg", + "cfg-if", + "concurrent-queue", + "futures-lite 1.13.0", + "log", + "parking", + "polling 2.8.0", + "rustix 0.37.27", + "slab", + "socket2", + "waker-fn", +] + +[[package]] +name = "async-io" +version = "2.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6afaa937395a620e33dc6a742c593c01aced20aa376ffb0f628121198578ccc7" +dependencies = [ + "async-lock 3.2.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.1.0", + "parking", + "polling 3.3.1", + "rustix 0.38.28", + "slab", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "async-lock" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" +dependencies = [ + "event-listener 4.0.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-process" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea6438ba0a08d81529c69b36700fa2f95837bfe3e776ab39cde9c14d9149da88" +dependencies = [ + "async-io 1.13.0", + "async-lock 2.8.0", + "async-signal", + "blocking", + "cfg-if", + "event-listener 3.1.0", + "futures-lite 1.13.0", + "rustix 0.38.28", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-recursion" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "async-signal" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5" +dependencies = [ + "async-io 2.2.2", + "async-lock 2.8.0", + "atomic-waker", + "cfg-if", + "futures-core", + "futures-io", + "rustix 0.38.28", + "signal-hook-registry", + "slab", + "windows-sys 0.48.0", +] + +[[package]] +name = "async-task" +version = "4.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d90cd0b264dfdd8eb5bad0a2c217c1f88fa96a8573f40e7b12de23fb468f46" + +[[package]] +name = "async-trait" +version = "0.1.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdf6721fb0140e4f897002dd086c06f6c27775df19cfe1fccb21181a48fd2c98" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" + +[[package]] +name = "base91" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4eb5fbae7b5ee422f239444a3dca9bdf5ecb3abf3af1bf87c8097db3f7bc025" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.64.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 1.0.109", +] + +[[package]] +name = "bindgen" +version = "0.69.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ffcebc3849946a7170a05992aac39da343a90676ab392c51a4280981d6379c2" +dependencies = [ + "bitflags 2.4.1", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", + "syn 2.0.43", +] + +[[package]] +name = "biquad" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "820524f5e3e3add696ddf69f79575772e152c0e78e9f0370b56990a7e808ec3e" +dependencies = [ + "libm 0.1.4", +] + +[[package]] +name = "bit-set" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] + +[[package]] +name = "bit-vec" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitarray" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d5c2b9bdd54bc98d0b4838def530947f4b4631070de267a77a848feb561262" +dependencies = [ + "cfg-if", + "space", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + +[[package]] +name = "bitreader" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdd859c9d97f7c468252795b35aeccc412bdbb1e90ee6969c4fa6328272eaeff" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" +dependencies = [ + "async-channel", + "async-lock 3.2.0", + "async-task", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.1.0", + "piper", + "tracing", +] + +[[package]] +name = "breakpad-sys" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f6fe478a0669c95a5c3f0a399b93dc9bf0edc648b5be981e89578fb52b6b2ff" +dependencies = [ + "cc", +] + +[[package]] +name = "bumpalo" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +dependencies = [ + "jobserver", +] + +[[package]] +name = "cesu8" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c" + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cgl" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ced0551234e87afee12411d535648dd89d2e7f34c78b753395567aff3d447ff" +dependencies = [ + "libc", +] + +[[package]] +name = "chrono" +version = "0.4.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits 0.2.17", + "wasm-bindgen", + "windows-targets 0.48.5", +] + +[[package]] +name = "ciborium" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "effd91f6c78e5a4ace8a5d3c0b6bfaec9e2baaef55f3efc00e45fb2e477ee926" +dependencies = [ + "ciborium-io", + "ciborium-ll", + "serde", +] + +[[package]] +name = "ciborium-io" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdf919175532b369853f5d5e20b26b43112613fd6fe7aee757e35f7a44642656" + +[[package]] +name = "ciborium-ll" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "defaa24ecc093c77630e6c15e17c51f5e187bf35ee514f4e2d67baaa96dae22b" +dependencies = [ + "ciborium-io", + "half 1.8.2", +] + +[[package]] +name = "cl-sys" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4febd824a957638c066180fbf72b2bed5bcee33740773f3dc59fe91f0a3e6595" +dependencies = [ + "libc", +] + +[[package]] +name = "clang" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84c044c781163c001b913cd018fc95a628c50d0d2dfea8bca77dad71edb16e37" +dependencies = [ + "clang-sys", + "libc", +] + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading 0.7.4", +] + +[[package]] +name = "codespan-reporting" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e" +dependencies = [ + "termcolor", + "unicode-width", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "com" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e17887fd17353b65b1b2ef1c526c83e26cd72e74f598a8dc1bee13a48f3d9f6" +dependencies = [ + "com_macros", +] + +[[package]] +name = "com_macros" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d375883580a668c7481ea6631fc1a8863e33cc335bf56bfad8d7e6d4b04b13a5" +dependencies = [ + "com_macros_support", + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "com_macros_support" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad899a1087a9296d5644792d7cb72b8e34c1bec8e7d4fbc002230169a6e8710c" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "combine" +version = "4.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35ed6e9d84f0b51a7f52daf1c7d71dd136fd7a3f41a8462b8cdb8c78d920fad4" +dependencies = [ + "bytes", + "memchr", +] + +[[package]] +name = "concurrent-queue" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.45.0", +] + +[[package]] +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "core-graphics-types" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45390e6114f68f718cc7a830514a96f903cccd70d02a8f6d9f643ac4ba45afaf" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "libc", +] + +[[package]] +name = "coreaudio-rs" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "321077172d79c662f64f5071a03120748d5bb652f5231570141be24cfcd2bace" +dependencies = [ + "bitflags 1.3.2", + "core-foundation-sys", + "coreaudio-sys", +] + +[[package]] +name = "coreaudio-sys" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3120ebb80a9de008e638ad833d4127d50ea3d3a960ea23ea69bc66d9358a028" +dependencies = [ + "bindgen 0.69.1", +] + +[[package]] +name = "cpal" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d959d90e938c5493000514b446987c07aed46c668faaa7d34d6c7a67b1a578c" +dependencies = [ + "alsa", + "core-foundation-sys", + "coreaudio-rs", + "dasp_sample", + "jni 0.19.0", + "js-sys", + "libc", + "mach2", + "ndk 0.7.0", + "ndk-context", + "oboe", + "once_cell", + "parking_lot", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "windows 0.46.0", +] + +[[package]] +name = "cpp" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa65869ef853e45c60e9828aa08cdd1398cb6e13f3911d9cb2a079b144fcd64" +dependencies = [ + "cpp_macros", +] + +[[package]] +name = "cpp_build" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e361fae2caf9758164b24da3eedd7f7d7451be30d90d8e7b5d2be29a2f0cf5b" +dependencies = [ + "cc", + "cpp_common", + "lazy_static", + "proc-macro2", + "regex", + "syn 2.0.43", + "unicode-xid", +] + +[[package]] +name = "cpp_common" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e1a2532e4ed4ea13031c13bc7bc0dbca4aae32df48e9d77f0d1e743179f2ea1" +dependencies = [ + "lazy_static", + "proc-macro2", + "syn 2.0.43", +] + +[[package]] +name = "cpp_macros" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47ec9cc90633446f779ef481a9ce5a0077107dd5b87016440448d908625a83fd" +dependencies = [ + "aho-corasick", + "byteorder", + "cpp_common", + "lazy_static", + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "cpufeatures" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eb9105919ca8e40d437fc9cbb8f1975d916f1bd28afe795a48aae32a2cc8920" +dependencies = [ + "cfg-if", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a9b73a36529d9c47029b9fb3a6f0ea3cc916a261195352ba19e770fc1748b2" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e3681d554572a651dda4186cd47240627c3d0114d45a95f6ad27f2f22e7548d" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc6598521bb5a83d491e8c1fe51db7296019d2ca3cb93cc6c2a20369a4d78a2" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a430a770ebd84726f584a90ee7f020d28db52c6d02138900f22341f866d39c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "cstr" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aa998c33a6d3271e3678950a22134cd7dd27cef86dee1b611b5b14207d1d90b" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "csv" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "csv-core" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" +dependencies = [ + "memchr", +] + +[[package]] +name = "cv-core" +version = "0.15.0" +source = "git+https://github.com/rust-cv/cv.git?rev=82a25ee#82a25ee3a88c1200274182951ccd7dfeae4708d2" +dependencies = [ + "derive_more", + "nalgebra 0.30.1", + "num-traits 0.2.17", + "sample-consensus", +] + +[[package]] +name = "cv-pinhole" +version = "0.6.0" +source = "git+https://github.com/rust-cv/cv.git?rev=82a25ee#82a25ee3a88c1200274182951ccd7dfeae4708d2" +dependencies = [ + "cv-core", + "derive_more", + "float-ord", + "nalgebra 0.30.1", + "num-traits 0.2.17", +] + +[[package]] +name = "d3d12" +version = "0.7.0" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "bitflags 2.4.1", + "libloading 0.8.1", + "winapi", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "dasp_sample" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" + +[[package]] +name = "deranged" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derivative" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_more" +version = "0.99.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" +dependencies = [ + "convert_case", + "proc-macro2", + "quote", + "rustc_version", + "syn 1.0.109", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "directories" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" +dependencies = [ + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", +] + +[[package]] +name = "dispatch" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b" + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dunce" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b" + +[[package]] +name = "dyn-clone" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d" + +[[package]] +name = "eight-point" +version = "0.8.0" +source = "git+https://github.com/rust-cv/cv.git?rev=82a25ee#82a25ee3a88c1200274182951ccd7dfeae4708d2" +dependencies = [ + "arrayvec", + "cv-core", + "cv-pinhole", + "derive_more", + "float-ord", + "num-traits 0.2.17", +] + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "enterpolation" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fadf5c8cbf7c6765ff05ccbd8811cd7bc3a763e4671755204552bf8740d042a" +dependencies = [ + "assert_float_eq", + "num-traits 0.2.17", + "serde", + "topology-traits", +] + +[[package]] +name = "enum_delegate" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ea75f31022cba043afe037940d73684327e915f88f62478e778c3de914cd0a" +dependencies = [ + "enum_delegate_lib", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "enum_delegate_lib" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e1f6c3800b304a6be0012039e2a45a322a093539c45ab818d9e6895a39c90fe" +dependencies = [ + "proc-macro2", + "quote", + "rand", + "syn 1.0.109", +] + +[[package]] +name = "enum_primitive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" +dependencies = [ + "num-traits 0.1.43", +] + +[[package]] +name = "enumflags2" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5998b4f30320c9d93aed72f63af821bfdac50465b75428fce77b48ec482c3939" +dependencies = [ + "enumflags2_derive", + "serde", +] + +[[package]] +name = "enumflags2_derive" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f95e2801cd355d4a1a3e3953ce6ee5ae9603a5c833455343a8bfe3f44d418246" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "enumn" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ad8cef1d801a4686bfd8919f0b30eac4c8e48968c437a6405ded4fb5272d2b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84f2cdcf274580f2d63697192d744727b3198894b1bf02923643bf59e2c26712" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.1", + "pin-project-lite", +] + +[[package]] +name = "exr" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "279d3efcc55e19917fff7ab3ddd6c14afb6a90881a0078465196fe2f99d08c56" +dependencies = [ + "bit_field", + "flume", + "half 2.3.1", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fallible_collections" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a88c69768c0a15262df21899142bc6df9b9b823546d4b4b9a7bc2d6c448ec6fd" +dependencies = [ + "hashbrown 0.13.2", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "fc-blackbox" +version = "0.2.0" +source = "git+https://github.com/AdrianEddy/fc-blackbox.git?rev=4e9e4e6#4e9e4e6c95e7bb98efc5e0186bd37937755e450f" +dependencies = [ + "chrono", + "integer-encoding", + "itertools 0.10.5", + "nom", + "num-rational", + "num-traits 0.2.17", + "thiserror", +] + +[[package]] +name = "fdeflate" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64d6dafc854908ff5da46ff3f8f473c6984119a2876a383a860246dd7841a868" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "ffmpeg-next" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f45d337871329d85f5aad1e3d7b09d033cd611d50f734fd6464c731fe7c769bf" +dependencies = [ + "bitflags 1.3.2", + "ffmpeg-sys-next", + "libc", +] + +[[package]] +name = "ffmpeg-sys-next" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2529ad916d08c3562c754c21bc9b17a26c7882c0f5706cc2cd69472175f1620" +dependencies = [ + "bindgen 0.64.0", + "cc", + "libc", + "num_cpus", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "filetime" +version = "0.2.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "windows-sys 0.52.0", +] + +[[package]] +name = "filetime_creation" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3aea213d5ab4e6cd49f50c0688a4e20e5b75ff3bc07ff63f814778bd9b1dd42d" +dependencies = [ + "cfg-if", + "filetime", + "windows-sys 0.48.0", +] + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "float-ord" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "foreign-types" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d737d9aa519fb7b749cbc3b962edcf310a8dd1f4b67c91c4f83975dbdd17d965" +dependencies = [ + "foreign-types-macros", + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-macros" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "foreign-types-shared" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "futures" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678" + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-lite" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" +dependencies = [ + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", +] + +[[package]] +name = "futures-lite" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aeee267a1883f7ebef3700f262d2d54de95dfaf38189015a74fdc4e0c7ad8143" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "gl_generator" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" +dependencies = [ + "khronos_api", + "log", + "xml-rs", +] + +[[package]] +name = "glam" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" +dependencies = [ + "libm 0.2.8", +] + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "glow" +version = "0.13.0" +source = "git+https://github.com/grovesNL/glow.git?rev=29ff917a2b2ff7ce0a81b2cc5681de6d4735b36e#29ff917a2b2ff7ce0a81b2cc5681de6d4735b36e" +dependencies = [ + "js-sys", + "slotmap", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "glutin_wgl_sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8098adac955faa2d31079b65dc48841251f69efd3ac25477903fc424362ead" +dependencies = [ + "gl_generator", +] + +[[package]] +name = "gpu-alloc" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171" +dependencies = [ + "bitflags 2.4.1", + "gpu-alloc-types", +] + +[[package]] +name = "gpu-alloc-types" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "gpu-allocator" +version = "0.24.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d79e648296d0cf46c494e594763b6b362c4567e447177bc82750c733398b2a" +dependencies = [ + "backtrace", + "log", + "presser", + "thiserror", + "winapi", + "windows 0.51.1", +] + +[[package]] +name = "gpu-descriptor" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc11df1ace8e7e564511f53af41f3e42ddc95b56fd07b3f4445d2a6048bc682c" +dependencies = [ + "bitflags 2.4.1", + "gpu-descriptor-types", + "hashbrown 0.14.3", +] + +[[package]] +name = "gpu-descriptor-types" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6bf0b36e6f090b7e1d8a4b49c0cb81c1f8376f72198c65dd3ad9ff3556b8b78c" +dependencies = [ + "bitflags 2.4.1", +] + +[[package]] +name = "gyroflow" +version = "1.5.4" +dependencies = [ + "argh", + "breakpad-sys", + "bytemuck", + "cc", + "core-foundation-sys", + "cpp", + "cpp_build", + "crc32fast", + "cstr", + "directories", + "fastrand 2.0.1", + "ffmpeg-next", + "filetime_creation", + "flate2", + "futures-intrusive", + "gyroflow-core", + "human-sort", + "indicatif", + "itertools 0.12.0", + "jni 0.21.1", + "keep-awake", + "lazy_static", + "log", + "log-panics", + "lru", + "metal", + "mp4-merge", + "nalgebra 0.32.3", + "ndk 0.8.0", + "ndk-context", + "ndk-sys 0.5.0+25.2.9519653", + "oslog", + "parking_lot", + "pollster", + "qmetaobject", + "qml-video-rs", + "qttypes", + "rayon", + "regex", + "rodio", + "rustfft", + "semver", + "serde", + "serde_json", + "simplelog", + "system_shutdown", + "tar", + "ureq", + "url", + "walkdir", + "whoami", + "windows 0.52.0", + "winres", +] + +[[package]] +name = "gyroflow-core" +version = "1.5.4" +dependencies = [ + "ahrs", + "akaze", + "arrsac", + "ash", + "base91", + "bincode", + "biquad", + "bitarray", + "bitflags 2.4.1", + "bytemuck", + "byteorder", + "ciborium", + "core-foundation-sys", + "crc32fast", + "cv-core", + "cv-pinhole", + "d3d12", + "dyn-clone", + "eight-point", + "enterpolation", + "enum_delegate", + "fastrand 2.0.1", + "flate2", + "futures-intrusive", + "half 2.3.1", + "image", + "include_dir", + "itertools 0.12.0", + "jni 0.21.1", + "lazy_static", + "libc", + "libloading 0.8.1", + "line_drawing", + "log", + "lru", + "metal", + "mimalloc", + "naga", + "nalgebra 0.32.3", + "ndk 0.8.0", + "ndk-context", + "ndk-sys 0.5.0+25.2.9519653", + "nt-hive", + "num", + "objc-foundation", + "ocl", + "ocl-interop", + "opencv", + "parking_lot", + "pollster", + "rand", + "rand_xoshiro", + "rayon", + "regex", + "rs-sync", + "rustfft", + "sample-consensus", + "serde", + "serde_json", + "simple-easing", + "space", + "stabilize_spirv", + "tar", + "telemetry-parser", + "thiserror", + "time", + "ureq", + "url", + "urlencoding", + "walkdir", + "wgpu", + "wgpu-core", + "wgpu-hal", + "wgpu-types", + "winapi", + "windows 0.52.0", +] + +[[package]] +name = "half" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eabb4a44450da02c90444cf74558da904edde8fb4e9035a9a6a4e15445af0bd7" + +[[package]] +name = "half" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc52e53916c08643f1b56ec082790d1e86a32e58dc5268f897f313fbae7b4872" +dependencies = [ + "cfg-if", + "crunchy", +] + +[[package]] +name = "hamming" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65043da274378d68241eb9a8f8f8aa54e349136f7b8e12f63e3ef44043cc30e1" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "hassle-rs" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af2a7e73e1f34c48da31fb668a907f250794837e08faa144fd24f0b8b741e890" +dependencies = [ + "bitflags 2.4.1", + "com", + "libc", + "libloading 0.8.1", + "thiserror", + "widestring", + "winapi", +] + +[[package]] +name = "hermit-abi" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hexf-parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" + +[[package]] +name = "human-sort" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "140a09c9305e6d5e557e2ed7cbc68e05765a7d4213975b87cb04920689cc6219" + +[[package]] +name = "iana-time-zone" +version = "0.1.58" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core 0.51.1", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits 0.2.17", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "include_dir" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" +dependencies = [ + "glob", + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", +] + +[[package]] +name = "indicatif" +version = "0.17.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "jni" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "039022cdf4d7b1cf548d31f60ae783138e5fd42013f6271049d7df7afadef96c" +dependencies = [ + "cesu8", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", +] + +[[package]] +name = "jni" +version = "0.21.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a87aa2bb7d2af34197c04845522473242e1aa17c12f4935d5856491a7fb8c97" +dependencies = [ + "cesu8", + "cfg-if", + "combine", + "jni-sys", + "log", + "thiserror", + "walkdir", + "windows-sys 0.45.0", +] + +[[package]] +name = "jni-sys" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" + +[[package]] +name = "jobserver" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +dependencies = [ + "libc", +] + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "keep-awake" +version = "0.1.0" +source = "git+https://github.com/AdrianEddy/keep-awake-rs.git?rev=1b5eaad#1b5eaadbc1b3e1d6c48397b9d17bb7db75950e05" +dependencies = [ + "core-foundation", + "dispatch", + "jni 0.21.1", + "libc", + "log", + "mach", + "ndk-context", + "objc", + "windows 0.52.0", + "zbus", +] + +[[package]] +name = "khronos-egl" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" +dependencies = [ + "libc", + "libloading 0.8.1", + "pkg-config", +] + +[[package]] +name = "khronos_api" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "lewton" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "777b48df9aaab155475a83a7df3070395ea1ac6902f5cd062b8f2b028075c030" +dependencies = [ + "byteorder", + "ogg", + "tinyvec", +] + +[[package]] +name = "libc" +version = "0.2.151" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libloading" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161" +dependencies = [ + "cfg-if", + "windows-sys 0.48.0", +] + +[[package]] +name = "libm" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a" + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libmimalloc-sys" +version = "0.1.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3979b5c37ece694f1f5e51e7ecc871fdb0f517ed04ee45f88d15d6d553cb9664" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "libredox" +version = "0.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" +dependencies = [ + "bitflags 2.4.1", + "libc", + "redox_syscall", +] + +[[package]] +name = "line_drawing" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1478a313008a3e6c8149995e90a99ee9094034b5c5c3da1eeb81183cb61d1d" +dependencies = [ + "num-traits 0.2.17", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" + +[[package]] +name = "log-panics" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f9dd8546191c1850ecf67d22f5ff00a935b890d0e84713159a55495cc2ac5f" +dependencies = [ + "backtrace", + "log", +] + +[[package]] +name = "lru" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2994eeba8ed550fd9b47a0b38f0242bc3344e496483c6180b69139cc2fa5d1d7" +dependencies = [ + "hashbrown 0.14.3", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b955cdeb2a02b9117f121ce63aa52d08ade45de53e48fe6a38b39c10f6f709" +dependencies = [ + "libc", +] + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "metal" +version = "0.27.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c43f73953f8cbe511f021b58f18c3ce1c3d1ae13fe953293e13345bf83217f25" +dependencies = [ + "bitflags 2.4.1", + "block", + "core-graphics-types", + "foreign-types", + "log", + "objc", + "paste", +] + +[[package]] +name = "mimalloc" +version = "0.1.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa01922b5ea280a911e323e4d2fd24b7fe5cc4042e0d2cda3c40775cdc4bdc9c" +dependencies = [ + "libmimalloc-sys", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mp4-merge" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c86d5d99a15116fce87baea15314b7d455a3c9689382f6bb36092c11c0a4db7" +dependencies = [ + "byteorder", + "log", +] + +[[package]] +name = "mp4parse" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63a35203d3c6ce92d5251c77520acb2e57108c88728695aa883f70023624c570" +dependencies = [ + "bitreader", + "byteorder", + "fallible_collections", + "log", + "num-traits 0.2.17", + "static_assertions", +] + +[[package]] +name = "naga" +version = "0.14.2" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "bit-set", + "bitflags 2.4.1", + "codespan-reporting", + "hexf-parse", + "indexmap", + "log", + "num-traits 0.2.17", + "petgraph", + "rustc-hash", + "spirv", + "termcolor", + "thiserror", + "unicode-xid", +] + +[[package]] +name = "nalgebra" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fb2d0de08694bed883320212c18ee3008576bfe8c306f4c3c4a58b4876998be" +dependencies = [ + "approx", + "matrixmultiply", + "num-complex", + "num-rational", + "num-traits 0.2.17", + "simba 0.7.3", + "typenum", +] + +[[package]] +name = "nalgebra" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307ed9b18cc2423f29e83f84fd23a8e73628727990181f18641a8b5dc2ab1caa" +dependencies = [ + "approx", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits 0.2.17", + "serde", + "simba 0.8.1", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "ndarray" +version = "0.15.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb12d4e967ec485a5f71c6311fe28158e9d6f4bc4a447b474184d0f91a8fa32" +dependencies = [ + "matrixmultiply", + "num-complex", + "num-integer", + "num-traits 0.2.17", + "rawpointer", +] + +[[package]] +name = "ndk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "451422b7e4718271c8b5b3aadf5adedba43dc76312454b387e98fae0fc951aa0" +dependencies = [ + "bitflags 1.3.2", + "jni-sys", + "ndk-sys 0.4.1+23.1.7779620", + "num_enum 0.5.11", + "raw-window-handle 0.5.2", + "thiserror", +] + +[[package]] +name = "ndk" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7" +dependencies = [ + "bitflags 2.4.1", + "jni-sys", + "log", + "ndk-sys 0.5.0+25.2.9519653", + "num_enum 0.7.1", + "raw-window-handle 0.6.0", + "thiserror", +] + +[[package]] +name = "ndk-context" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" + +[[package]] +name = "ndk-sys" +version = "0.4.1+23.1.7779620" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3cf2aae958bd232cac5069850591667ad422d263686d75b52a065f9badeee5a3" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "ndk-sys" +version = "0.5.0+25.2.9519653" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c196769dd60fd4f363e11d948139556a344e79d451aeb2fa2fd040738ef7691" +dependencies = [ + "jni-sys", +] + +[[package]] +name = "nix" +version = "0.24.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", +] + +[[package]] +name = "nix" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "598beaf3cc6fdd9a5dfb1630c2800c7acd31df7aaf0f565796fba2b53ca1af1b" +dependencies = [ + "bitflags 1.3.2", + "cfg-if", + "libc", + "memoffset 0.7.1", +] + +[[package]] +name = "nodrop" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb" + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nshare" +version = "0.9.0" +source = "git+https://github.com/rust-cv/nshare.git?rev=cd4a5c007ecf4ef62c938a6ac64fd90edf895360#cd4a5c007ecf4ef62c938a6ac64fd90edf895360" +dependencies = [ + "image", + "ndarray", +] + +[[package]] +name = "nt-hive" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d397d4a4328ae4ae705968cb21215adef115062e8f9513e7116355159f6dd9ca" +dependencies = [ + "bitflags 1.3.2", + "byteorder", + "displaydoc", + "enumn", + "memoffset 0.6.5", + "zerocopy 0.6.6", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits 0.2.17", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.17", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits 0.2.17", + "serde", +] + +[[package]] +name = "num-derive" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits 0.2.17", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits 0.2.17", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits 0.2.17", +] + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +dependencies = [ + "num-traits 0.2.17", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", + "libm 0.2.8", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive 0.5.11", +] + +[[package]] +name = "num_enum" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683751d591e6d81200c39fb0d1032608b77724f34114db54f571ff1317b337c0" +dependencies = [ + "num_enum_derive 0.7.1", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "num_enum_derive" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c11e44798ad209ccdd91fc192f0526a369a01234f7373e1b141c96d7cee4f0e" +dependencies = [ + "proc-macro-crate 2.0.1", + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", + "objc_exception", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_exception" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad970fb455818ad6cba4c122ad012fae53ae8b4795f86378bce65e4f6bab2ca4" +dependencies = [ + "cc", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "oboe" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8868cc237ee02e2d9618539a23a8d228b9bb3fc2e7a5b11eed3831de77c395d0" +dependencies = [ + "jni 0.20.0", + "ndk 0.7.0", + "ndk-context", + "num-derive", + "num-traits 0.2.17", + "oboe-sys", +] + +[[package]] +name = "oboe-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f44155e7fb718d3cfddcf70690b2b51ac4412f347cd9e4fbe511abe9cd7b5f2" +dependencies = [ + "cc", +] + +[[package]] +name = "ocl" +version = "0.19.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1c3ce118fd2f00eeb3c01f8073db1ee127cac0b2f79848192c7889b2bd7fe40" +dependencies = [ + "futures", + "nodrop", + "num-traits 0.2.17", + "ocl-core", + "qutex", + "thiserror", +] + +[[package]] +name = "ocl-core" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c145dd9f205b86611a5df15eb89517417b03005441cf6cec245c65a4b9248c52" +dependencies = [ + "bitflags 1.3.2", + "cl-sys", + "enum_primitive", + "num-complex", + "num-traits 0.2.17", + "ocl-core-vector", + "rustc_version", + "thiserror", +] + +[[package]] +name = "ocl-core-vector" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f562279e046ca160aeed5eaf6f7c4eb9fa56cb8fd9d038dbdbf56225caeb8074" +dependencies = [ + "num-traits 0.2.17", +] + +[[package]] +name = "ocl-interop" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e69e4b0cb245a6233d6ebd19dd920e2390a9b057e7b5031c3096a572256e026" +dependencies = [ + "cgl", + "gl_generator", + "ocl", +] + +[[package]] +name = "ogg" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6951b4e8bf21c8193da321bcce9c9dd2e13c858fe078bf9054a288b419ae5d6e" +dependencies = [ + "byteorder", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "opencv" +version = "0.88.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "980aa24534b9bcfb03c259779ffcbe422e0395cf45700d6d85657734ea1d5c57" +dependencies = [ + "cc", + "dunce", + "jobserver", + "libc", + "num-traits 0.2.17", + "once_cell", + "opencv-binding-generator", + "pkg-config", + "semver", + "shlex", + "vcpkg", +] + +[[package]] +name = "opencv-binding-generator" +version = "0.82.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ac010a66cd1e1dc457c20d467a16286cc83381307cace05357b414c06740f6" +dependencies = [ + "clang", + "clang-sys", + "dunce", + "once_cell", + "percent-encoding", + "regex", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-stream" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aa2b01e1d916879f73a53d01d1d6cee68adbb31d6d9177a8cfce093cced1d50" +dependencies = [ + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "oslog" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d2043d1f61d77cb2f4b1f7b7b2295f40507f5f8e9d1c8bf10a1ca5f97a3969" +dependencies = [ + "cc", + "dashmap", + "log", +] + +[[package]] +name = "parking" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap", +] + +[[package]] +name = "pin-project" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + +[[package]] +name = "pkg-config" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d3587f8a9e599cc7ec2c00e331f71c4e69a5f9a4b8a6efd5b07466b9736f9a" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "polling" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" +dependencies = [ + "autocfg", + "bitflags 1.3.2", + "cfg-if", + "concurrent-queue", + "libc", + "log", + "pin-project-lite", + "windows-sys 0.48.0", +] + +[[package]] +name = "polling" +version = "3.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf63fa624ab313c11656b4cda960bfc46c410187ad493c41f6ba2d8c1e991c9e" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.28", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "pollster" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22686f4785f02a4fcc856d3b3bb19bf6c8160d103f7a99cc258bddd0251dc7f2" + +[[package]] +name = "portable-atomic" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "presser" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" + +[[package]] +name = "pretty-hex" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbc83ee4a840062f368f9096d80077a9841ec117e17e7f700df81958f1451254" + +[[package]] +name = "primal" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b53cc99c892c461727618e8a63806c94b09ae13c494dc5fc70a7557b3a2f071" +dependencies = [ + "primal-check", + "primal-estimate", + "primal-sieve", +] + +[[package]] +name = "primal-bit" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce4fe11b2a87850ca3bd5dc9c7cb9f66e32a09edab221be406ac5ff677f2241" +dependencies = [ + "hamming", +] + +[[package]] +name = "primal-check" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9df7f93fd637f083201473dab4fee2db4c429d32e55e3299980ab3957ab916a0" +dependencies = [ + "num-integer", +] + +[[package]] +name = "primal-estimate" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7374f14c76f23e1271e6be806981ac5dd9e52b59132b0a2f10bcc412495f9159" + +[[package]] +name = "primal-sieve" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f2a14766f8c543620824b5b2cec356abf2681b76966a7ac4b4ed2c0011e696a" +dependencies = [ + "primal-bit", + "primal-estimate", + "smallvec", +] + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit 0.19.15", +] + +[[package]] +name = "proc-macro-crate" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +dependencies = [ + "toml_datetime", + "toml_edit 0.20.2", +] + +[[package]] +name = "proc-macro2" +version = "1.0.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75cb1540fadbd5b8fbccc4dddad2734eba435053f725621c070711a14bb5f4b8" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "profiling" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135ede8821cf6376eb7a64148901e1690b788c11ae94dc297ae917dbc91dc0e" + +[[package]] +name = "prost" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "146c289cda302b98a28d40c8b3b90498d6e526dd24ac2ecea73e4e491685b94a" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb6c9a1dd1def8e2124d17e83a20af56f1570d6c2d2bd9e266ccb768df3840e" +dependencies = [ + "anyhow", + "itertools 0.11.0", + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "qmetaobject" +version = "0.2.10" +source = "git+https://github.com/AdrianEddy/qmetaobject-rs.git?rev=59029b9#59029b9ac71a56db5cbb99c1d0f666e648fd9656" +dependencies = [ + "cpp", + "cpp_build", + "lazy_static", + "log", + "qmetaobject_impl", + "qttypes", + "semver", +] + +[[package]] +name = "qmetaobject_impl" +version = "0.2.10" +source = "git+https://github.com/AdrianEddy/qmetaobject-rs.git?rev=59029b9#59029b9ac71a56db5cbb99c1d0f666e648fd9656" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "qml-video-rs" +version = "0.1.0" +source = "git+https://github.com/AdrianEddy/qml-video-rs.git?rev=63f35bf#63f35bfe96ba846e45c2bbf985e396bf634b29da" +dependencies = [ + "cpp", + "cpp_build", + "cstr", + "qmetaobject", + "qttypes", + "ureq", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "qttypes" +version = "0.2.11" +source = "git+https://github.com/AdrianEddy/qmetaobject-rs.git?rev=59029b9#59029b9ac71a56db5cbb99c1d0f666e648fd9656" +dependencies = [ + "cpp", + "cpp_build", + "semver", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "qutex" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda4a51ba3d773c196f9450a6b239077ad8dda608b15263b4c9f29e58909883f" +dependencies = [ + "crossbeam", + "futures", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rand_xoshiro" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f97cdb2a36ed4183de61b2f824cc45c9f1037f28afe0a322e9fff4c108b5aaa" +dependencies = [ + "rand_core", +] + +[[package]] +name = "range-alloc" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" + +[[package]] +name = "raw-window-handle" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" + +[[package]] +name = "raw-window-handle" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" + +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + +[[package]] +name = "rayon" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "renderdoc-sys" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "216080ab382b992234dda86873c18d4c48358f5cfcb70fd693d7f6f2131b628b" + +[[package]] +name = "ring" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9babe80d5c16becf6594aa32ad2be8fe08498e7ae60b77de8df700e67f191d7e" +dependencies = [ + "cc", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.48.0", +] + +[[package]] +name = "rodio" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b1bb7b48ee48471f55da122c0044fcc7600cfcc85db88240b89cb832935e611" +dependencies = [ + "cpal", + "lewton", +] + +[[package]] +name = "rs-sync" +version = "0.1.0" +source = "git+https://github.com/gyroflow/rs-sync.git?rev=c73bf47#c73bf478e2f6442e5935bd6314d0cfc56239f7b5" +dependencies = [ + "argmin", + "argmin-math", + "libm 0.2.8", + "log", + "nalgebra 0.32.3", + "rand", + "rayon", + "superslice", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustfft" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e17d4f6cbdb180c9f4b2a26bbf01c4e647f1e1dea22fe8eb9db54198b32f9434" +dependencies = [ + "num-complex", + "num-integer", + "num-traits 0.2.17", + "primal-check", + "strength_reduce", + "transpose", + "version_check", +] + +[[package]] +name = "rustix" +version = "0.37.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" +dependencies = [ + "bitflags 1.3.2", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys 0.48.0", +] + +[[package]] +name = "rustix" +version = "0.38.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +dependencies = [ + "bitflags 2.4.1", + "errno", + "libc", + "linux-raw-sys 0.4.12", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "ryu" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" + +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "sample-consensus" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3404fd9b14a035bdff14fc4097e5d7a16435fc4661e80f19ae5204f8bee3c718" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "semver" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" + +[[package]] +name = "serde" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.193" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "serde_json" +version = "1.0.108" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_repr" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3081f5ffbb02284dda55132aa26daecedd7372a42417bbbab6f14ab7d6bb9145" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "serde_yaml" +version = "0.9.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15e0ef66bf939a7c890a0bf6d5a733c70202225f9888a89ed5c62298b019129" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simba" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f3fd720c48c53cace224ae62bef1bbff363a70c68c4802a78b5cc6159618176" +dependencies = [ + "approx", + "num-complex", + "num-traits 0.2.17", + "paste", + "wide", +] + +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "libm 0.2.8", + "num-complex", + "num-traits 0.2.17", + "paste", + "wide", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simple-easing" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "832ddd7df0d98d6fd93b973c330b7c8e0742d5cb8f1afc7dea89dba4d2531aa1" + +[[package]] +name = "simplelog" +version = "0.12.0" +source = "git+https://github.com/Drakulix/simplelog.rs.git?rev=4ef071d#4ef071dfd008d7729658cd5313e6d877bde272ca" +dependencies = [ + "log", + "termcolor", + "time", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "space" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5ab9701ae895386d13db622abf411989deff7109b13b46b6173bb4ce5c1d123" +dependencies = [ + "doc-comment", + "num-traits 0.2.17", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spirv" +version = "0.2.0+1.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "246bfa38fe3db3f1dfc8ca5a2cdeb7348c78be2112740cc0ec8ef18b6d94f830" +dependencies = [ + "bitflags 1.3.2", + "num-traits 0.2.17", +] + +[[package]] +name = "spirv-std" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53ad6bf0206aea3e6ac6283cb88ef397239cd2d9276b8f71854d60ac2cf94e0b" +dependencies = [ + "bitflags 1.3.2", + "glam", + "num-traits 0.2.17", + "spirv-std-macros", + "spirv-std-types", +] + +[[package]] +name = "spirv-std-macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2058ef7585e7ef31ee7b00bdfee2e6726649d827c71070a50087598405e8b2cf" +dependencies = [ + "proc-macro2", + "quote", + "spirv-std-types", + "syn 1.0.109", +] + +[[package]] +name = "spirv-std-types" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cce2183deb9e7ada727867823fb8bbbc8b56e503801a332d155dde613130e1b" + +[[package]] +name = "stabilize_spirv" +version = "0.0.0" +dependencies = [ + "spirv-std", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "strength_reduce" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe895eb47f22e2ddd4dabc02bce419d2e643c8e3b585c78158b349195bc24d82" + +[[package]] +name = "superslice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab16ced94dbd8a46c82fd81e3ed9a8727dac2977ea869d217bcc4ea1f122e81f" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee659fb5f3d355364e1f3e5bc10fb82068efbf824a1e9d1c9504244a6469ad53" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "system_shutdown" +version = "4.0.1" +source = "git+https://github.com/risoflora/system_shutdown.git?rev=4d93e5e#4d93e5e8c86ab94a1b7073b09b2b5b83096a35a8" +dependencies = [ + "windows 0.52.0", + "zbus", +] + +[[package]] +name = "tar" +version = "0.4.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "telemetry-parser" +version = "0.2.8" +source = "git+https://github.com/AdrianEddy/telemetry-parser.git?rev=8920009#89200095066ce8555a24ca90d1de3663216cc1df" +dependencies = [ + "argh", + "byteorder", + "chrono", + "csv", + "fc-blackbox", + "human-sort", + "jni 0.21.1", + "log", + "memchr", + "mp4parse", + "ndk-context", + "paste", + "pretty-hex", + "prost", + "serde", + "serde_json", + "serde_yaml", +] + +[[package]] +name = "tempfile" +version = "3.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +dependencies = [ + "cfg-if", + "fastrand 2.0.1", + "redox_syscall", + "rustix 0.38.28", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.51" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e" +dependencies = [ + "deranged", + "itoa", + "libc", + "num_threads", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f" +dependencies = [ + "time-core", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "toml" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_datetime" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "toml_edit" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +dependencies = [ + "indexmap", + "toml_datetime", + "winnow", +] + +[[package]] +name = "topology-traits" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0c8dab428531e30115d3bfd6e3092b55256a4a7b4f87cb3abe37a000b1f4032" +dependencies = [ + "num-traits 0.2.17", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", +] + +[[package]] +name = "transpose" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6522d49d03727ffb138ae4cbc1283d3774f0d10aa7f9bf52e6784c45daf9b23" +dependencies = [ + "num-integer", + "strength_reduce", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "uds_windows" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89daebc3e6fd160ac4aa9fc8b3bf71e1f74fbf92367ae71fb83a037e8bf164b9" +dependencies = [ + "memoffset 0.9.0", + "tempfile", + "winapi", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-width" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" +dependencies = [ + "base64", + "flate2", + "log", + "once_cell", + "rustls", + "rustls-webpki", + "url", + "webpki-roots", +] + +[[package]] +name = "url" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "waker-fn" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" + +[[package]] +name = "walkdir" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.43", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.39" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac36a15a220124ac510204aec1c3e5db8a22ab06fd6706d881dc6149f8ed9a12" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" + +[[package]] +name = "web-sys" +version = "0.3.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50c24a44ec86bb68fbecd1b3efed7e85ea5621b39b35ef2766b66cd984f8010f" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wgpu" +version = "0.18.0" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "arrayvec", + "cfg-if", + "js-sys", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle 0.6.0", + "smallvec", + "static_assertions", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "wgpu-core", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-core" +version = "0.18.0" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "arrayvec", + "bit-vec", + "bitflags 2.4.1", + "codespan-reporting", + "log", + "naga", + "parking_lot", + "profiling", + "raw-window-handle 0.6.0", + "rustc-hash", + "smallvec", + "thiserror", + "web-sys", + "wgpu-hal", + "wgpu-types", +] + +[[package]] +name = "wgpu-hal" +version = "0.18.0" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "android_system_properties", + "arrayvec", + "ash", + "bit-set", + "bitflags 2.4.1", + "block", + "core-graphics-types", + "d3d12", + "glow", + "glutin_wgl_sys", + "gpu-alloc", + "gpu-allocator", + "gpu-descriptor", + "hassle-rs", + "js-sys", + "khronos-egl", + "libc", + "libloading 0.8.1", + "log", + "metal", + "naga", + "objc", + "once_cell", + "parking_lot", + "profiling", + "range-alloc", + "raw-window-handle 0.6.0", + "renderdoc-sys", + "rustc-hash", + "smallvec", + "thiserror", + "wasm-bindgen", + "web-sys", + "wgpu-types", + "winapi", +] + +[[package]] +name = "wgpu-types" +version = "0.18.0" +source = "git+https://github.com/gfx-rs/wgpu.git?rev=d7296ac#d7296ac30b7948d6d111ffe201d7c47c246d16cd" +dependencies = [ + "bitflags 2.4.1", + "js-sys", + "web-sys", +] + +[[package]] +name = "whoami" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22fc3756b8a9133049b26c7f61ab35416c130e8c09b660f5b3958b446f52cc50" +dependencies = [ + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wide" +version = "0.7.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242" +dependencies = [ + "bytemuck", + "safe_arch", +] + +[[package]] +name = "widestring" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9" +dependencies = [ + "windows-core 0.51.1", + "windows-targets 0.48.5", +] + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core 0.52.0", + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-core" +version = "0.51.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.0", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd" +dependencies = [ + "windows_aarch64_gnullvm 0.52.0", + "windows_aarch64_msvc 0.52.0", + "windows_i686_gnu 0.52.0", + "windows_i686_msvc 0.52.0", + "windows_x86_64_gnu 0.52.0", + "windows_x86_64_gnullvm 0.52.0", + "windows_x86_64_msvc 0.52.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" + +[[package]] +name = "winnow" +version = "0.5.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b5c3db89721d50d0e2a673f5043fc4722f76dcc352d7b1ab8b8288bed4ed2c5" +dependencies = [ + "memchr", +] + +[[package]] +name = "winres" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b68db261ef59e9e52806f688020631e987592bd83619edccda9c47d42cde4f6c" +dependencies = [ + "toml", +] + +[[package]] +name = "xattr" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7dae5072fe1f8db8f8d29059189ac175196e410e40ba42d5d4684ae2f750995" +dependencies = [ + "libc", + "linux-raw-sys 0.4.12", + "rustix 0.38.28", +] + +[[package]] +name = "xdg-home" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2769203cd13a0c6015d515be729c526d041e9cf2c0cc478d57faee85f40c6dcd" +dependencies = [ + "nix 0.26.4", + "winapi", +] + +[[package]] +name = "xml-rs" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcb9cbac069e033553e8bb871be2fbdffcab578eb25bd0f7c508cedc6dcd75a" + +[[package]] +name = "zbus" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31de390a2d872e4cd04edd71b425e29853f786dc99317ed72d73d6fcf5ebb948" +dependencies = [ + "async-broadcast", + "async-executor", + "async-fs", + "async-io 1.13.0", + "async-lock 2.8.0", + "async-process", + "async-recursion", + "async-task", + "async-trait", + "blocking", + "byteorder", + "derivative", + "enumflags2", + "event-listener 2.5.3", + "futures-core", + "futures-sink", + "futures-util", + "hex", + "nix 0.26.4", + "once_cell", + "ordered-stream", + "rand", + "serde", + "serde_repr", + "sha1", + "static_assertions", + "tracing", + "uds_windows", + "winapi", + "xdg-home", + "zbus_macros", + "zbus_names", + "zvariant", +] + +[[package]] +name = "zbus_macros" +version = "3.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d1794a946878c0e807f55a397187c11fc7a038ba5d868e7db4f3bd7760bc9d" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "regex", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zbus_names" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb80bb776dbda6e23d705cf0123c3b95df99c4ebeaec6c2599d4a5419902b4a9" +dependencies = [ + "serde", + "static_assertions", + "zvariant", +] + +[[package]] +name = "zerocopy" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" +dependencies = [ + "byteorder", + "zerocopy-derive 0.6.6", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive 0.7.32", +] + +[[package]] +name = "zerocopy-derive" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.43", +] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "zvariant" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44b291bee0d960c53170780af148dca5fa260a63cdd24f1962fa82e03e53338c" +dependencies = [ + "byteorder", + "enumflags2", + "libc", + "serde", + "static_assertions", + "zvariant_derive", +] + +[[package]] +name = "zvariant_derive" +version = "3.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "934d7a7dfc310d6ee06c87ffe88ef4eca7d3e37bb251dece2ef93da8f17d8ecd" +dependencies = [ + "proc-macro-crate 1.3.1", + "proc-macro2", + "quote", + "syn 1.0.109", + "zvariant_utils", +] + +[[package]] +name = "zvariant_utils" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7234f0d811589db492d16893e3f21e8e2fd282e6d01b0cddee310322062cc200" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] diff --git a/nixpkgs/pkgs/applications/video/gyroflow/default.nix b/nixpkgs/pkgs/applications/video/gyroflow/default.nix new file mode 100644 index 000000000000..bb7df1dfa01d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/default.nix @@ -0,0 +1,126 @@ +{ lib, rustPlatform, fetchFromGitHub, callPackage, makeDesktopItem +, clang, copyDesktopItems, patchelf, pkg-config, wrapQtAppsHook +, alsa-lib, bash, ffmpeg, mdk-sdk, ocl-icd, opencv, qtbase, qtdeclarative, qtsvg +}: + +rustPlatform.buildRustPackage rec { + pname = "gyroflow"; + version = "1.5.4-2023-12-25"; + + src = fetchFromGitHub { + owner = "gyroflow"; + repo = "gyroflow"; + rev = "e0869ffe648cb3fd88d81c807b1f7fa2e18d7430"; + hash = "sha256-KB/uoQR43im/m5uJhheAPCqUH9oIx85JaIUwW9rhAAw="; + }; + + cargoLock = { + lockFile = ./Cargo.lock; + outputHashes = { + "ahrs-0.6.0" = "sha256-CxWyX8t+BjqIyNj1p1LdkCmNrtJkudmKgZPv0MVcghY="; + "akaze-0.7.0" = "sha256-KkGXKoVRZZ7HUTtWYBerrN36a7RqsHjYQb+bwG1JagY="; + "d3d12-0.7.0" = "sha256-FqAVwW2jtDE1BV31OfrCJljGhj5iD0OfN2fANQ1wasc="; + "fc-blackbox-0.2.0" = "sha256-gL8m9DpHJPVD8vvrmuYv+biJT4PA5LmtohJwFVO+khU="; + "glow-0.13.0" = "sha256-vhPWzsm7NZx9JiRZcVoUslTGySQbASRh/wNlo1nK5jg="; + "keep-awake-0.1.0" = "sha256-EoXhK4/Aij70f73+5NBUoCXqZISG1+n2eVavNqe8mq4="; + "nshare-0.9.0" = "sha256-PAV41mMLDmhkAz4+qyf+MZnYTAdMwjk83+f+RdaJji8="; + "qmetaobject-0.2.10" = "sha256-ldmpbOYoCOaAoipfcCSwuV+fzF9gg1PTbRz2Jm4zJvA="; + "qml-video-rs-0.1.0" = "sha256-rwdci0QhGYOnCf04u61xuon06p8Zm2wKCNrW/qti9+U="; + "rs-sync-0.1.0" = "sha256-sfym7zv5SUitopqNJ6uFP6AMzAGf4Y7U0dzXAKlvuGA="; + "simplelog-0.12.0" = "sha256-NvmtLbzahSw1WMS3LY+jWiX4SxfSRwidTMvICGcmDO4="; + "system_shutdown-4.0.1" = "sha256-arJWmEjDdaig/oAfwSolVmk9s1UovrQ5LNUgTpUvoOQ="; + "telemetry-parser-0.2.8" = "sha256-Nr4SWEERKEAiZppqzjn1LIuMiZ2BTQEOKOlSnLVAXAg="; + }; + }; + + lens-profiles = callPackage ./lens-profiles.nix { }; + + nativeBuildInputs = [ + clang copyDesktopItems patchelf pkg-config rustPlatform.bindgenHook wrapQtAppsHook + ]; + + buildInputs = [ alsa-lib bash ffmpeg mdk-sdk ocl-icd opencv qtbase qtdeclarative qtsvg ]; + + patches = [ ./no-static-zlib.patch ]; + + # qml-video-rs and gyroflow assume that all Qt headers are installed + # in a single (qtbase) directory. Apart form QtCore and QtGui from + # qtbase they need QtQuick and QtQml public and private headers from + # qtdeclarative: + # https://github.com/AdrianEddy/qml-video-rs/blob/bbf60090b966f0df2dd016e01da2ea78666ecea2/build.rs#L22-L40 + # https://github.com/gyroflow/gyroflow/blob/v1.5.4/build.rs#L163-L186 + # Additionally gyroflow needs QtQuickControls2: + # https://github.com/gyroflow/gyroflow/blob/v1.5.4/build.rs#L173 + env.NIX_CFLAGS_COMPILE = toString [ + "-I${qtdeclarative}/include/QtQuick" + "-I${qtdeclarative}/include/QtQuick/${qtdeclarative.version}" + "-I${qtdeclarative}/include/QtQuick/${qtdeclarative.version}/QtQuick" + "-I${qtdeclarative}/include/QtQml" + "-I${qtdeclarative}/include/QtQml/${qtdeclarative.version}" + "-I${qtdeclarative}/include/QtQml/${qtdeclarative.version}/QtQml" + "-I${qtdeclarative}/include/QtQuickControls2" + ]; + + # FFMPEG_DIR is used by ffmpeg-sys-next/build.rs and + # gyroflow/build.rs. ffmpeg-sys-next fails to build if this dir + # does not contain ffmpeg *headers*. gyroflow assumes that it + # contains ffmpeg *libraries*, but builds fine as long as it is set + # with any value. + env.FFMPEG_DIR = ffmpeg.dev; + + # These variables are needed by gyroflow/build.rs. + # OPENCV_LINK_LIBS is based on the value in gyroflow/_scripts/common.just, with opencv_dnn added to fix linking. + env.OPENCV_LINK_PATHS = "${opencv}/lib"; + env.OPENCV_LINK_LIBS = "opencv_core,opencv_calib3d,opencv_dnn,opencv_features2d,opencv_imgproc,opencv_video,opencv_flann,opencv_imgcodecs,opencv_objdetect,opencv_stitching,png"; + + # For qml-video-rs. It concatenates "lib/" to this value so it needs a trailing "/": + env.MDK_SDK = "${mdk-sdk}/"; + + preCheck = '' + # qml-video-rs/build.rs wants to overwrite it: + find target -name libmdk.so.0 -exec chmod +w {} \; + ''; + + doCheck = false; # No tests. + + postInstall = '' + mkdir -p $out/opt/Gyroflow + cp -r resources $out/opt/Gyroflow/ + ln -s ${lens-profiles} $out/opt/Gyroflow/resources/camera_presets + + rm -rf $out/lib + patchelf $out/bin/gyroflow --add-rpath ${mdk-sdk}/lib + + mv $out/bin/gyroflow $out/opt/Gyroflow/ + ln -s ../opt/Gyroflow/gyroflow $out/bin/ + + install -D ${./gyroflow-open.sh} $out/bin/gyroflow-open + install -Dm644 ${./gyroflow-mime.xml} $out/share/mime/packages/gyroflow.xml + install -Dm644 resources/icon.svg $out/share/icons/hicolor/scalable/apps/gyroflow.svg + ''; + + desktopItems = [ + (makeDesktopItem (rec { + name = "gyroflow"; + desktopName = "Gyroflow"; + genericName = "Video stabilization using gyroscope data"; + comment = meta.description; + icon = "gyroflow"; + exec = "gyroflow-open %u"; + terminal = false; + mimeTypes = [ "application/x-gyroflow" ]; + categories = [ "AudioVideo" "Video" "AudioVideoEditing" "Qt" ]; + startupNotify = true; + startupWMClass = "gyroflow"; + prefersNonDefaultGPU = true; + })) + ]; + + meta = with lib; { + description = "Advanced gyro-based video stabilization tool"; + homepage = "https://gyroflow.xyz/"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ orivej ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-mime.xml b/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-mime.xml new file mode 100644 index 000000000000..d9180e6b8396 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-mime.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="application/x-gyroflow"> + <glob pattern="*.gyroflow"/> + <comment xml:lang="en">Gyroflow project</comment> + <icon name="gyroflow"/> + </mime-type> +</mime-info> diff --git a/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-open.sh b/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-open.sh new file mode 100644 index 000000000000..9bdcad70d99d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/gyroflow-open.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +if [ "$#" -ge 1 ]; then + exec "$(dirname "$0")"/gyroflow --open "$@" +else + exec "$(dirname "$0")"/gyroflow "$@" +fi diff --git a/nixpkgs/pkgs/applications/video/gyroflow/lens-profiles.nix b/nixpkgs/pkgs/applications/video/gyroflow/lens-profiles.nix new file mode 100644 index 000000000000..850b6ca72f87 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/lens-profiles.nix @@ -0,0 +1,19 @@ +{ lib, fetchFromGitHub }: + +fetchFromGitHub { + pname = "gyroflow-lens-profiles"; + version = "2023-12-01"; + + owner = "gyroflow"; + repo = "lens_profiles"; + rev = "3e72169ae6b8601260497d7216d5fcbbc8b67194"; + hash = "sha256-18KtunSxTsJhBge+uOGBcNZRG3W26M/Osyxllu+N0UI="; + + meta = with lib; { + description = "Lens profile database for Gyroflow"; + homepage = "https://github.com/gyroflow/lens_profiles"; + license = licenses.cc0; + maintainers = with maintainers; [ orivej ]; + platforms = lib.platforms.all; + }; +} diff --git a/nixpkgs/pkgs/applications/video/gyroflow/no-static-zlib.patch b/nixpkgs/pkgs/applications/video/gyroflow/no-static-zlib.patch new file mode 100644 index 000000000000..e660b0db533c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/gyroflow/no-static-zlib.patch @@ -0,0 +1,6 @@ +diff --git a/build.rs b/build.rs +index 8ba86bf..f6f00a0 100644 +--- a/build.rs ++++ b/build.rs +@@ -203 +202,0 @@ fn main() { +- println!("cargo:rustc-link-lib=static:+whole-archive=z"); diff --git a/nixpkgs/pkgs/applications/video/handbrake/default.nix b/nixpkgs/pkgs/applications/video/handbrake/default.nix new file mode 100644 index 000000000000..54216cf73ad6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/handbrake/default.nix @@ -0,0 +1,307 @@ +# Upstream distributes HandBrake with bundle of according versions of libraries +# and patches to them. This derivation patches HandBrake to use Nix closure +# dependencies. +# +# NOTE: 2019-07-19: This derivation does not currently support the native macOS +# GUI--it produces the "HandbrakeCLI" CLI version only. In the future it would +# be nice to add the native GUI (and/or the GTK GUI) as an option too, but that +# requires invoking the Xcode build system, which is non-trivial for now. + +{ stdenv +, lib +, fetchFromGitHub +, fetchpatch + # For tests +, testers +, runCommand +, fetchurl + # Main build tools +, pkg-config +, autoconf +, automake +, libtool +, m4 +, xz +, python3 +, numactl +, writeText + # Processing, video codecs, containers +, ffmpeg_5-full +, nv-codec-headers +, libogg +, x264 +, x265 +, libvpx +, libtheora +, dav1d +, zimg +, svt-av1 + # Codecs, audio +, libopus +, lame +, libvorbis +, a52dec +, speex +, libsamplerate + # Text processing +, libiconv +, fribidi +, fontconfig +, freetype +, libass +, jansson +, libxml2 +, harfbuzz +, libjpeg_turbo + # Optical media +, libdvdread +, libdvdnav +, libdvdcss +, libbluray + # Darwin-specific +, AudioToolbox +, Foundation +, libobjc +, VideoToolbox + # GTK + # NOTE: 2019-07-19: The gtk3 package has a transitive dependency on dbus, + # which in turn depends on systemd. systemd is not supported on Darwin, so + # for now we disable GTK GUI support on Darwin. (It may be possible to remove + # this restriction later.) +, useGtk ? !stdenv.isDarwin +, wrapGAppsHook +, intltool +, glib +, gtk3 +, libappindicator-gtk3 +, libnotify +, gst_all_1 +, dbus-glib +, udev +, libgudev +, hicolor-icon-theme + # FDK +, useFdk ? false +, fdk_aac +}: + +let + version = "1.6.1"; + + src = fetchFromGitHub { + owner = "HandBrake"; + repo = "HandBrake"; + rev = version; + sha256 = "sha256-0MJ1inMNA6s8l2S0wnpM2c7FxOoOHxs9u4E/rgKfjJo="; + }; + + # Handbrake maintains a set of ffmpeg patches. In particular, these + # patches are required for subtitle timing to work correctly. See: + # https://github.com/HandBrake/HandBrake/issues/4029 + ffmpeg-version = "5.1.2"; + ffmpeg-hb = ffmpeg_5-full.overrideAttrs (old: { + version = ffmpeg-version; + src = fetchurl { + url = "https://www.ffmpeg.org/releases/ffmpeg-${ffmpeg-version}.tar.bz2"; + hash = "sha256-OaC8yNmFSfFsVwYkZ4JGpqxzbAZs69tAn5UC6RWyLys="; + }; + patches = old.patches or [ ] ++ [ + "${src}/contrib/ffmpeg/A01-qsv-libavfilter-qsvvpp-change-the-output-frame-s-width-a.patch" + "${src}/contrib/ffmpeg/A02-qsv-configure-ensure-enable-libmfx-uses-libmfx-1.x.patch" + "${src}/contrib/ffmpeg/A03-qsv-configure-fix-the-check-for-MFX_CODEC_VP9.patch" + "${src}/contrib/ffmpeg/A04-qsv-remove-mfx-prefix-from-mfx-headers.patch" + "${src}/contrib/ffmpeg/A05-qsv-load-user-plugin-for-MFX_VERSION-2.0.patch" + "${src}/contrib/ffmpeg/A06-qsv-build-audio-related-code-when-MFX_VERSION-2.0.patch" + "${src}/contrib/ffmpeg/A07-qsvenc-support-multi-frame-encode-when-MFX_VERSION-2.patch" + "${src}/contrib/ffmpeg/A08-qsvenc-support-MFX_RATECONTROL_LA_EXT-when-MFX_VERSI.patch" + "${src}/contrib/ffmpeg/A09-qsv-support-OPAQUE-memory-when-MFX_VERSION-2.0.patch" + "${src}/contrib/ffmpeg/A10-qsv-configure-add-enable-libvpl-option.patch" + "${src}/contrib/ffmpeg/A11-qsv-use-a-new-method-to-create-mfx-session-when-usin.patch" + "${src}/contrib/ffmpeg/A12-qsv-fix-decode-10bit-hdr.patch" + "${src}/contrib/ffmpeg/A13-mov-read-name-track-tag-written-by-movenc.patch" + "${src}/contrib/ffmpeg/A14-movenc-write-3gpp-track-titl-tag.patch" + "${src}/contrib/ffmpeg/A15-mov-read-3gpp-udta-tags.patch" + "${src}/contrib/ffmpeg/A16-movenc-write-3gpp-track-names-tags-for-all-available.patch" + "${src}/contrib/ffmpeg/A17-FFmpeg-devel-amfenc-Add-support-for-pict_type-field.patch" + "${src}/contrib/ffmpeg/A18-dvdsubdec-fix-processing-of-partial-packets.patch" + "${src}/contrib/ffmpeg/A19-ccaption_dec-return-number-of-bytes-used.patch" + "${src}/contrib/ffmpeg/A20-dvdsubdec-return-number-of-bytes-used.patch" + "${src}/contrib/ffmpeg/A21-dvdsubdec-use-pts-of-initial-packet.patch" + "${src}/contrib/ffmpeg/A22-matroskaenc-aac-extradata-updated.patch" + "${src}/contrib/ffmpeg/A23-ccaption_dec-fix-pts-in-real_time-mode.patch" + "${src}/contrib/ffmpeg/A24-fix-eac3-dowmix.patch" + "${src}/contrib/ffmpeg/A25-enable-truehd-pass.patch" + "${src}/contrib/ffmpeg/A26-Update-the-min-version-to-1.4.23.0-for-AMF-SDK.patch" + "${src}/contrib/ffmpeg/A27-avcodec-amfenc-Fixes-the-color-information-in-the-ou.patch" + "${src}/contrib/ffmpeg/A28-avcodec-amfenc-HDR-metadata.patch" + # This patch is not applying since ffmpeg 5.1.1, probably it was backported by upstream + # "${src}/contrib/ffmpeg/A30-svt-av1-backports.patch" + (fetchpatch { + name = "vulkan-remove-extensions.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/commitdiff_plain/eb0455d64690"; + hash = "sha256-qvLrb7b+9/bel8A2lZuSmBiJtHXsABw0Lvgn1ggnmCU="; + }) + ]; + }); + + versionFile = writeText "version.txt" '' + BRANCH=${versions.majorMinor version}.x + DATE=1970-01-01 00:00:01 +0000 + HASH=${src.rev} + REV=${src.rev} + SHORTHASH=${src.rev} + TAG=${version} + URL=${src.meta.homepage} + ''; + + inherit (lib) optional optionals optionalString versions; + +in +let + self = stdenv.mkDerivation rec { + pname = "handbrake"; + inherit version src; + + postPatch = '' + install -Dm444 ${versionFile} ${versionFile.name} + + patchShebangs scripts + + substituteInPlace libhb/hb.c \ + --replace 'return hb_version;' 'return "${version}";' + + # Force using nixpkgs dependencies + sed -i '/MODULES += contrib/d' make/include/main.defs + sed -e 's/^[[:space:]]*\(meson\|ninja\|nasm\)[[:space:]]*= ToolProbe.*$//g' \ + -e '/ ## Additional library and tool checks/,/ ## MinGW specific library and tool checks/d' \ + -i make/configure.py + '' + optionalString stdenv.isDarwin '' + # Use the Nix-provided libxml2 instead of the patched version available on + # the Handbrake website. + substituteInPlace libhb/module.defs \ + --replace '$(CONTRIB.build/)include/libxml2' ${libxml2.dev}/include/libxml2 + + # Prevent the configure script from failing if xcodebuild isn't available, + # which it isn't in the Nix context. (The actual build goes fine without + # xcodebuild.) + sed -e '/xcodebuild = ToolProbe/s/abort=.\+)/abort=False)/' -i make/configure.py + '' + optionalString stdenv.isLinux '' + # Use the Nix-provided libxml2 instead of the system-provided one. + substituteInPlace libhb/module.defs \ + --replace /usr/include/libxml2 ${libxml2.dev}/include/libxml2 + ''; + + nativeBuildInputs = [ + autoconf + automake + libtool + m4 + pkg-config + python3 + ] + ++ optionals useGtk [ intltool wrapGAppsHook ]; + + buildInputs = [ + a52dec + dav1d + ffmpeg-hb + fontconfig + freetype + fribidi + harfbuzz + jansson + lame + libass + libbluray + libdvdcss + libdvdnav + libdvdread + libiconv + libjpeg_turbo + libogg + libopus + libsamplerate + libtheora + libvorbis + libvpx + libxml2 + speex + svt-av1 + x264 + x265 + xz + zimg + ] + ++ optional (!stdenv.isDarwin) numactl + ++ optionals useGtk [ + dbus-glib + glib + gst_all_1.gst-plugins-base + gst_all_1.gstreamer + gtk3 + hicolor-icon-theme + libappindicator-gtk3 + libgudev + libnotify + udev + ] + ++ optional useFdk fdk_aac + ++ optionals stdenv.isDarwin [ AudioToolbox Foundation libobjc VideoToolbox ] + # NOTE: 2018-12-27: Handbrake supports nv-codec-headers for Linux only, + # look at ./make/configure.py search "enable_nvenc" + ++ optional stdenv.isLinux nv-codec-headers; + + configureFlags = [ + "--disable-df-fetch" + "--disable-df-verify" + "--disable-gtk-update-checks" + ] + ++ optional (!useGtk) "--disable-gtk" + ++ optional useFdk "--enable-fdk-aac" + ++ optional stdenv.isDarwin "--disable-xcode" + ++ optional stdenv.hostPlatform.isx86 "--harden"; + + # NOTE: 2018-12-27: Check NixOS HandBrake test if changing + NIX_LDFLAGS = [ "-lx265" ]; + + makeFlags = [ "--directory=build" ]; + + passthru.tests = { + basic-conversion = + let + # Big Buck Bunny example, licensed under CC Attribution 3.0. + testMkv = fetchurl { + url = "https://github.com/Matroska-Org/matroska-test-files/blob/cf0792be144ac470c4b8052cfe19bb691993e3a2/test_files/test1.mkv?raw=true"; + sha256 = "1hfxbbgxwfkzv85pvpvx55a72qsd0hxjbm9hkl5r3590zw4s75h9"; + }; + in + runCommand "${pname}-${version}-basic-conversion" { nativeBuildInputs = [ self ]; } '' + mkdir -p $out + cd $out + HandBrakeCLI -i ${testMkv} -o test.mp4 -e x264 -q 20 -B 160 + test -e test.mp4 + HandBrakeCLI -i ${testMkv} -o test.mkv -e x264 -q 20 -B 160 + test -e test.mkv + ''; + version = testers.testVersion { package = self; command = "HandBrakeCLI --version"; }; + }; + + meta = with lib; { + homepage = "https://handbrake.fr/"; + description = "A tool for converting video files and ripping DVDs"; + longDescription = '' + Tool for converting and remuxing video files + into selection of modern and widely supported codecs + and containers. Very versatile and customizable. + Package provides: + CLI - `HandbrakeCLI` + GTK GUI - `ghb` + ''; + license = licenses.gpl2Only; + maintainers = with maintainers; [ Anton-Latukha wmertens ]; + platforms = with platforms; unix; + broken = stdenv.isDarwin && lib.versionOlder stdenv.hostPlatform.darwinMinVersion "10.13"; + }; + }; +in +self diff --git a/nixpkgs/pkgs/applications/video/haruna/default.nix b/nixpkgs/pkgs/applications/video/haruna/default.nix new file mode 100644 index 000000000000..7e6cef757cd8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/haruna/default.nix @@ -0,0 +1,79 @@ +{ lib +, fetchFromGitLab +, mkDerivation +, breeze-icons +, breeze-qt5 +, cmake +, extra-cmake-modules +, ffmpeg-headless +, kconfig +, kcoreaddons +, kfilemetadata +, ki18n +, kiconthemes +, kio +, kirigami2 +, kxmlgui +, kdoctools +, mpv +, pkg-config +, wrapQtAppsHook +, qqc2-desktop-style +, qtbase +, qtquickcontrols2 +, yt-dlp +}: + +mkDerivation rec { + pname = "haruna"; + version = "0.12.3"; + + src = fetchFromGitLab { + owner = "multimedia"; + repo = "haruna"; + rev = "v${version}"; + hash = "sha256-iYf8oTMQ65+6E1dlOj0GU6EezPul6p1GG2CcrcjDUik="; + domain = "invent.kde.org"; + }; + + postPatch = '' + substituteInPlace src/application.cpp \ + --replace '"yt-dlp"' '"${lib.getExe yt-dlp}"' + ''; + + buildInputs = [ + breeze-icons + breeze-qt5 + qqc2-desktop-style + yt-dlp + + ffmpeg-headless + kconfig + kcoreaddons + kfilemetadata + ki18n + kiconthemes + kio + kirigami2 + kxmlgui + kdoctools + mpv + qtbase + qtquickcontrols2 + ]; + + nativeBuildInputs = [ + cmake + extra-cmake-modules + pkg-config + wrapQtAppsHook + ]; + + meta = with lib; { + homepage = "https://invent.kde.org/multimedia/haruna"; + description = "Open source video player built with Qt/QML and libmpv"; + license = with licenses; [ bsd3 cc-by-40 cc-by-sa-40 cc0 gpl2Plus gpl3Plus wtfpl ]; + maintainers = with maintainers; [ jojosch kashw2 ]; + mainProgram = "haruna"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/hdhomerun-config-gui/default.nix b/nixpkgs/pkgs/applications/video/hdhomerun-config-gui/default.nix new file mode 100644 index 000000000000..c5ed409117e3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/hdhomerun-config-gui/default.nix @@ -0,0 +1,32 @@ +{ lib, stdenv, fetchurl, libhdhomerun, pkg-config, gtk2 }: + +stdenv.mkDerivation rec { + pname = "hdhomerun-config-gui"; + version = "20221205"; + + src = fetchurl { + url = "https://download.silicondust.com/hdhomerun/hdhomerun_config_gui_${version}.tgz"; + sha256 = "sha256-vzrSk742Ca2I8Uk0uGo44SxpEoVY1QBn62Ahwz8E7p8="; + }; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ gtk2 libhdhomerun ]; + + configureFlags = [ "CPPFLAGS=-I${libhdhomerun}/include/hdhomerun" ]; + makeFlags = [ "SUBDIRS=src" ]; + + installPhase = '' + runHook preInstall + install -vDm 755 src/hdhomerun_config_gui $out/bin/hdhomerun_config_gui + runHook postInstall + ''; + + meta = with lib; { + description = "GUI for configuring Silicondust HDHomeRun TV tuners"; + homepage = "https://www.silicondust.com/support/linux"; + license = licenses.gpl3Only; + platforms = platforms.linux; + maintainers = [ maintainers.louisdk1 ]; + mainProgram = "hdhomerun_config_gui"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/hyperion-ng/default.nix b/nixpkgs/pkgs/applications/video/hyperion-ng/default.nix new file mode 100644 index 000000000000..43bd337ae500 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/hyperion-ng/default.nix @@ -0,0 +1,72 @@ +{ stdenv, lib, fetchFromGitHub +, cmake, wrapQtAppsHook, perl +, flatbuffers, protobuf, mbedtls +, hidapi, libcec, libusb1 +, libX11, libxcb, libXrandr, python3 +, qtbase, qtserialport, qtsvg, qtx11extras +, withRPiDispmanx ? false, libraspberrypi +}: + +stdenv.mkDerivation rec { + pname = "hyperion.ng"; + version = "2.0.14"; + + src = fetchFromGitHub { + owner = "hyperion-project"; + repo = pname; + rev = version; + sha256 = "sha256-Y1PZ+YyPMZEX4fBpMG6IVT1gtXR9ZHlavJMCQ4KAenc="; + # needed for `dependencies/external/`: + # * rpi_ws281x` - not possible to use as a "system" lib + # * qmdnsengine - not in nixpkgs yet + fetchSubmodules = true; + }; + + buildInputs = [ + hidapi + libusb1 + libX11 + libxcb + libXrandr + flatbuffers + protobuf + mbedtls + python3 + qtbase + qtserialport + qtsvg + qtx11extras + ] ++ lib.optional stdenv.isLinux libcec + ++ lib.optional withRPiDispmanx libraspberrypi; + + nativeBuildInputs = [ + cmake wrapQtAppsHook + ] ++ lib.optional stdenv.isDarwin perl; # for macos bundle + + patchPhase = '' + patchShebangs test/testrunner.sh + patchShebangs src/hyperiond/CMakeLists.txt + '' ; + + cmakeFlags = [ + "-DENABLE_DEPLOY_DEPENDENCIES=OFF" + "-DUSE_SYSTEM_FLATBUFFERS_LIBS=ON" + "-DUSE_SYSTEM_PROTO_LIBS=ON" + "-DUSE_SYSTEM_MBEDTLS_LIBS=ON" + # "-DUSE_SYSTEM_QMDNS_LIBS=ON" # qmdnsengine not in nixpkgs yet + "-DENABLE_TESTS=ON" + ] ++ lib.optional (withRPiDispmanx == false) "-DENABLE_DISPMANX=OFF"; + + doCheck = true; + checkPhase = '' + cd ../ && ./test/testrunner.sh && cd - + ''; + + meta = with lib; { + description = "An opensource Bias or Ambient Lighting implementation"; + homepage = "https://github.com/hyperion-project/hyperion.ng"; + license = licenses.mit; + maintainers = with maintainers; [ algram kazenyuk ]; + platforms = platforms.unix; + }; +} diff --git a/nixpkgs/pkgs/applications/video/hypnotix/default.nix b/nixpkgs/pkgs/applications/video/hypnotix/default.nix new file mode 100644 index 000000000000..5c2e4812501c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/hypnotix/default.nix @@ -0,0 +1,97 @@ +{ lib +, stdenv +, fetchFromGitHub +, substituteAll +, cinnamon +, circle-flags +, gettext +, gobject-introspection +, mpv +, python3 +, wrapGAppsHook +, yt-dlp +}: + +stdenv.mkDerivation rec { + pname = "hypnotix"; + version = "4.3"; + + src = fetchFromGitHub { + owner = "linuxmint"; + repo = "hypnotix"; + rev = version; + hash = "sha256-nmldOziye+bSi8CA9TL0f3EKEKTeXRk3HFzf4ksE9oE="; + }; + + patches = [ + (substituteAll { + src = ./libmpv-path.patch; + libmpv = "${lib.getLib mpv}/lib/libmpv${stdenv.hostPlatform.extensions.sharedLibrary}"; + }) + ]; + + postPatch = '' + substituteInPlace usr/lib/hypnotix/hypnotix.py \ + --replace __DEB_VERSION__ ${version} \ + --replace /usr/bin/yt-dlp ${yt-dlp}/bin/yt-dlp \ + --replace /usr/share/circle-flags-svg ${circle-flags}/share/circle-flags-svg \ + --replace /usr/share/hypnotix $out/share/hypnotix + + substituteInPlace usr/bin/hypnotix \ + --replace /usr/lib/hypnotix/hypnotix.py $out/lib/hypnotix/hypnotix.py + ''; + + nativeBuildInputs = [ + gettext + gobject-introspection + python3.pkgs.wrapPython + wrapGAppsHook + ]; + + dontWrapGApps = true; + + buildInputs = [ + cinnamon.xapp + python3 # for patchShebangs + ]; + + pythonPath = with python3.pkgs; [ + cinemagoer + pygobject3 + requests + setproctitle + unidecode + xapp + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out + cp -r usr/* $out + + glib-compile-schemas $out/share/glib-2.0/schemas + + runHook postInstall + ''; + + preFixup = '' + buildPythonPath "$out $pythonPath" + + # yt-dlp is needed for mpv to play YouTube channels. + wrapProgram $out/bin/hypnotix \ + --prefix PATH : "${lib.makeBinPath [ yt-dlp ]}" \ + --prefix PYTHONPATH : "$program_PYTHONPATH" \ + ''${gappsWrapperArgs[@]} + ''; + + meta = { + description = "IPTV streaming application"; + homepage = "https://github.com/linuxmint/hypnotix"; + changelog = "https://github.com/linuxmint/hypnotix/blob/${src.rev}/debian/changelog"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ dotlambda bobby285271 ]; + platforms = lib.platforms.linux; + mainProgram = "hypnotix"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/hypnotix/libmpv-path.patch b/nixpkgs/pkgs/applications/video/hypnotix/libmpv-path.patch new file mode 100644 index 000000000000..86337b4930af --- /dev/null +++ b/nixpkgs/pkgs/applications/video/hypnotix/libmpv-path.patch @@ -0,0 +1,18 @@ +diff --git a/usr/lib/hypnotix/mpv.py b/usr/lib/hypnotix/mpv.py +index f42a3be..f1fc40b 100644 +--- a/usr/lib/hypnotix/mpv.py ++++ b/usr/lib/hypnotix/mpv.py +@@ -44,12 +44,7 @@ else: + # still better than segfaulting, we are setting LC_NUMERIC to "C". + locale.setlocale(locale.LC_NUMERIC, 'C') + +- sofile = ctypes.util.find_library('mpv') +- if sofile is None: +- raise OSError("Cannot find libmpv in the usual places. Depending on your distro, you may try installing an " +- "mpv-devel or mpv-libs package. If you have libmpv around but this script can't find it, consult " +- "the documentation for ctypes.util.find_library which this script uses to look up the library " +- "filename.") ++ sofile = '@libmpv@' + backend = CDLL(sofile) + fs_enc = sys.getfilesystemencoding() + diff --git a/nixpkgs/pkgs/applications/video/imagination/default.nix b/nixpkgs/pkgs/applications/video/imagination/default.nix new file mode 100644 index 000000000000..8d1d6ac305f9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/imagination/default.nix @@ -0,0 +1,46 @@ +{ lib, stdenv, fetchurl, autoreconfHook, docbook_xsl, ffmpeg-full, glib, gtk3 +, intltool, libxslt, pkg-config, sox, wrapGAppsHook }: + +stdenv.mkDerivation rec { + pname = "imagination"; + version = "3.6"; + + src = fetchurl { + url = "mirror://sourceforge/${pname}/${pname}-${version}.tar.gz"; + sha256 = "139dgb9vfr2q7bxvjskykdz526xxwrn0bh463ir8m2p7rx5a3pw5"; + }; + + nativeBuildInputs = [ + autoreconfHook + docbook_xsl + intltool + libxslt + pkg-config + wrapGAppsHook + ]; + + buildInputs = [ ffmpeg-full glib gtk3 sox ]; + + preBuild = '' + substituteInPlace src/main-window.c \ + --replace 'gtk_icon_theme_load_icon(icon_theme,"image", 20, 0, NULL)' \ + 'gtk_icon_theme_load_icon(icon_theme,"insert-image", 20, 0, NULL)' \ + --replace 'gtk_icon_theme_load_icon(icon_theme,"sound", 20, 0, NULL)' \ + 'gtk_icon_theme_load_icon(icon_theme,"audio-x-generic", 20, 0, NULL)' + ''; + + preFixup = '' + gappsWrapperArgs+=( + --prefix PATH : "${lib.makeBinPath [ ffmpeg-full sox ]}" + ) + ''; + + meta = with lib; { + description = "Lightweight and simple DVD slide show maker"; + homepage = "https://imagination.sourceforge.net"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ austinbutler ]; + platforms = platforms.linux; + mainProgram = "imagination"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/jellyfin-media-player/default.nix b/nixpkgs/pkgs/applications/video/jellyfin-media-player/default.nix new file mode 100644 index 000000000000..47afaef81a63 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/jellyfin-media-player/default.nix @@ -0,0 +1,105 @@ +{ lib +, fetchFromGitHub +, fetchzip +, mkDerivation +, stdenv +, Cocoa +, CoreAudio +, CoreFoundation +, MediaPlayer +, SDL2 +, cmake +, libGL +, libX11 +, libXrandr +, libvdpau +, mpv +, ninja +, pkg-config +, python3 +, qtbase +, qtwayland +, qtwebchannel +, qtwebengine +, qtx11extras +, jellyfin-web +, withDbus ? stdenv.isLinux, dbus +}: + +mkDerivation rec { + pname = "jellyfin-media-player"; + version = "1.9.1"; + + src = fetchFromGitHub { + owner = "jellyfin"; + repo = "jellyfin-media-player"; + rev = "v${version}"; + sha256 = "sha256-97/9UYXOsg8v7QoRqo5rh0UGhjjS85K9OvUwtlG249c="; + }; + + patches = [ + # fix the location of the jellyfin-web path + ./fix-web-path.patch + # disable update notifications since the end user can't simply download the release artifacts to update + ./disable-update-notifications.patch + ]; + + buildInputs = [ + SDL2 + libGL + libX11 + libXrandr + libvdpau + mpv + qtbase + qtwebchannel + qtwebengine + qtx11extras + ] ++ lib.optionals stdenv.isLinux [ + qtwayland + ] ++ lib.optionals stdenv.isDarwin [ + Cocoa + CoreAudio + CoreFoundation + MediaPlayer + ]; + + nativeBuildInputs = [ + cmake + ninja + pkg-config + python3 + ]; + + cmakeFlags = [ + "-DQTROOT=${qtbase}" + "-GNinja" + ] ++ lib.optionals (!withDbus) [ + "-DLINUX_X11POWER=ON" + ]; + + preConfigure = '' + # link the jellyfin-web files to be copied by cmake (see fix-web-path.patch) + ln -s ${jellyfin-web}/share/jellyfin-web . + ''; + + postInstall = lib.optionalString stdenv.isDarwin '' + mkdir -p $out/bin $out/Applications + mv "$out/Jellyfin Media Player.app" $out/Applications + + # move web-client resources + mv $out/Resources/* "$out/Applications/Jellyfin Media Player.app/Contents/Resources/" + rmdir $out/Resources + + ln -s "$out/Applications/Jellyfin Media Player.app/Contents/MacOS/Jellyfin Media Player" $out/bin/jellyfinmediaplayer + ''; + + meta = with lib; { + homepage = "https://github.com/jellyfin/jellyfin-media-player"; + description = "Jellyfin Desktop Client based on Plex Media Player"; + license = with licenses; [ gpl2Only mit ]; + platforms = [ "aarch64-linux" "x86_64-linux" "x86_64-darwin" ]; + maintainers = with maintainers; [ jojosch kranzes ]; + mainProgram = "jellyfinmediaplayer"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch b/nixpkgs/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch new file mode 100644 index 000000000000..dd56d71f9075 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/jellyfin-media-player/disable-update-notifications.patch @@ -0,0 +1,13 @@ +diff --git a/resources/settings/settings_description.json b/resources/settings/settings_description.json +index 20fff81..9979de5 100644 +--- a/resources/settings/settings_description.json ++++ b/resources/settings/settings_description.json +@@ -118,7 +118,7 @@ + }, + { + "value": "checkForUpdates", +- "default": true ++ "default": false + }, + { + "value": "enableInputRepeat", diff --git a/nixpkgs/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch b/nixpkgs/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch new file mode 100644 index 000000000000..250a5c069545 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/jellyfin-media-player/fix-web-path.patch @@ -0,0 +1,28 @@ +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 5abca9b..d09176b 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -107,10 +107,8 @@ endif() + set(RESOURCE_ROOT .) + if(APPLE) + set(RESOURCE_ROOT Resources) +- if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/) +- add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DEST ${RESOURCE_ROOT}/web-client/desktop) +- endif() +- add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_SOURCE_DIR}/native/ DEST ${RESOURCE_ROOT}/web-client/extension) ++ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../jellyfin-web/ DESTINATION ${RESOURCE_ROOT}/web-client/desktop) ++ install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${RESOURCE_ROOT}/web-client/extension) + endif() + + if(NOT APPLE) +@@ -123,9 +121,7 @@ if(NOT APPLE) + install(FILES ${loc}/qtwebengine_devtools_resources.pak DESTINATION resources) + endif() + endforeach() +- if(EXISTS ${CMAKE_CURRENT_BINARY_DIR}/../dist/) +- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/desktop) +- endif() ++ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../../jellyfin-web/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/desktop) + install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${INSTALL_RESOURCE_DIR}/web-client/extension) + endif() + diff --git a/nixpkgs/pkgs/applications/video/jellyfin-mpv-shim/default.nix b/nixpkgs/pkgs/applications/video/jellyfin-mpv-shim/default.nix new file mode 100644 index 000000000000..dad9a5240249 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/jellyfin-mpv-shim/default.nix @@ -0,0 +1,125 @@ +{ lib +, buildPythonApplication +, copyDesktopItems +, fetchPypi +, gobject-introspection +, jellyfin-apiclient-python +, jinja2 +, makeDesktopItem +, mpv +, pillow +, pystray +, python +, python-mpv-jsonipc +, pywebview +, tkinter +, wrapGAppsHook +}: + +buildPythonApplication rec { + pname = "jellyfin-mpv-shim"; + version = "2.6.0"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-90Z2vgYT/9hBQZgfXeY7l6sGwT5KEY8X4rZMgrbTwrM="; + }; + + nativeBuildInputs = [ + copyDesktopItems + wrapGAppsHook + gobject-introspection + ]; + + propagatedBuildInputs = [ + jellyfin-apiclient-python + mpv + pillow + python-mpv-jsonipc + + # gui dependencies + pystray + tkinter + + # display_mirror dependencies + jinja2 + pywebview + ]; + + # override $HOME directory: + # error: [Errno 13] Permission denied: '/homeless-shelter' + # + # remove jellyfin_mpv_shim/win_utils.py: + # ModuleNotFoundError: No module named 'win32gui' + preCheck = '' + export HOME=$TMPDIR + + rm jellyfin_mpv_shim/win_utils.py + ''; + + postPatch = '' + substituteInPlace jellyfin_mpv_shim/conf.py \ + --replace "check_updates: bool = True" "check_updates: bool = False" \ + --replace "notify_updates: bool = True" "notify_updates: bool = False" + # python-mpv renamed to mpv with 1.0.4 + substituteInPlace setup.py \ + --replace "python-mpv" "mpv" \ + --replace "mpv-jsonipc" "python_mpv_jsonipc" + ''; + + # Install all the icons for the desktop item + postInstall = '' + for s in 16 32 48 64 128 256; do + mkdir -p $out/share/icons/hicolor/''${s}x''${s}/apps + ln -s $out/${python.sitePackages}/jellyfin_mpv_shim/integration/jellyfin-''${s}.png \ + $out/share/icons/hicolor/''${s}x''${s}/apps/${pname}.png + done + ''; + + # needed for pystray to access appindicator using GI + preFixup = '' + makeWrapperArgs+=("''${gappsWrapperArgs[@]}") + ''; + dontWrapGApps = true; + + # no tests + doCheck = false; + pythonImportsCheck = [ "jellyfin_mpv_shim" ]; + + desktopItems = [ + (makeDesktopItem { + name = pname; + exec = pname; + icon = pname; + desktopName = "Jellyfin MPV Shim"; + categories = [ "Video" "AudioVideo" "TV" "Player" ]; + }) + ]; + + meta = with lib; { + homepage = "https://github.com/jellyfin/jellyfin-mpv-shim"; + description = "Allows casting of videos to MPV via the jellyfin mobile and web app"; + longDescription = '' + Jellyfin MPV Shim is a client for the Jellyfin media server which plays media in the + MPV media player. The application runs in the background and opens MPV only + when media is cast to the player. The player supports most file formats, allowing you + to prevent needless transcoding of your media files on the server. The player also has + advanced features, such as bulk subtitle updates and launching commands on events. + ''; + license = with licenses; [ + # jellyfin-mpv-shim + gpl3Only + mit + + # shader-pack licenses (github:iwalton3/default-shader-pack) + # KrigBilateral, SSimDownscaler, NNEDI3 + gpl3Plus + # Anime4K, FSRCNNX + mit + # Static Grain + unlicense + ]; + maintainers = with maintainers; [ jojosch ]; + mainProgram = "jellyfin-mpv-shim"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/jftui/default.nix b/nixpkgs/pkgs/applications/video/jftui/default.nix new file mode 100644 index 000000000000..efd8d6ed6e2a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/jftui/default.nix @@ -0,0 +1,42 @@ +{ lib, stdenv +, fetchFromGitHub +, pkg-config +, curl +, mpv +, yajl +}: + +stdenv.mkDerivation rec { + pname = "jftui"; + version = "0.7.2"; + + src = fetchFromGitHub { + owner = "Aanok"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-w5DK9B3D3/9VExAQktigVPim33VfpoQPHUZefAS3pWQ="; + }; + + nativeBuildInputs = [ + pkg-config + ]; + + buildInputs = [ + curl + mpv + yajl + ]; + + installPhase = '' + install -Dm555 build/jftui $out/bin/jftui + ''; + + meta = with lib; { + description = "Jellyfin Terminal User Interface "; + homepage = "https://github.com/Aanok/jftui"; + license = licenses.unlicense; + maintainers = [ maintainers.nyanloutre ]; + platforms = platforms.linux; + mainProgram = "jftui"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kaffeine/default.nix b/nixpkgs/pkgs/applications/video/kaffeine/default.nix new file mode 100644 index 000000000000..40701d2cbf85 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kaffeine/default.nix @@ -0,0 +1,53 @@ +{ stdenv +, lib +, fetchFromGitLab +, kio +, cmake +, extra-cmake-modules +, libvlc +, libv4l +, libX11 +, kidletime +, kdelibs4support +, libXScrnSaver +, wrapQtAppsHook +, qtx11extras +}: + +stdenv.mkDerivation rec { + pname = "kaffeine"; + version = "2.0.18"; + + src = fetchFromGitLab { + domain = "invent.kde.org"; + repo = pname; + owner = "Multimedia"; + rev = "v${version}"; + hash = "sha256-FOaS9gkzkHglbsNBNMwjzbHCNQg3Mbf+9so/Vfbaquc="; + }; + + nativeBuildInputs = [ + cmake + extra-cmake-modules + wrapQtAppsHook + ]; + + buildInputs = [ + libvlc + libv4l + libX11 + kidletime + qtx11extras + kdelibs4support + libXScrnSaver + ]; + + meta = with lib; { + description = "KDE media player"; + homepage = "https://apps.kde.org/kaffeine/"; + license = licenses.gpl2; + maintainers = [ maintainers.pasqui23 ]; + platforms = platforms.all; + mainProgram = "kaffeine"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kazam/default.nix b/nixpkgs/pkgs/applications/video/kazam/default.nix new file mode 100644 index 000000000000..8ca3b813663f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kazam/default.nix @@ -0,0 +1,63 @@ +{ lib +, fetchFromGitHub +, substituteAll +, python3Packages +, gst_all_1 +, wrapGAppsHook +, gobject-introspection +, gtk3 +, libwnck +, keybinder3 +, intltool +, libcanberra-gtk3 +, libappindicator-gtk3 +, libpulseaudio +, libgudev +}: + +python3Packages.buildPythonApplication rec { + pname = "kazam"; + version = "unstable-2021-06-22"; + + src = fetchFromGitHub { + owner = "niknah"; + repo = "kazam"; + rev = "13f6ce124e5234348f56358b9134a87121f3438c"; + sha256 = "1jk6khwgdv3nmagdgp5ivz3156pl0ljhf7b6i4b52w1h5ywsg9ah"; + }; + + nativeBuildInputs = [ gobject-introspection python3Packages.distutils-extra intltool wrapGAppsHook ]; + buildInputs = [ + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gtk3 + libwnck + keybinder3 + libappindicator-gtk3 + libgudev + ]; + + propagatedBuildInputs = with python3Packages; [ pygobject3 pyxdg pycairo dbus-python xlib ]; + + patches = [ + # Fix paths + (substituteAll { + src = ./fix-paths.patch; + libcanberra = libcanberra-gtk3; + inherit libpulseaudio; + }) + ]; + + # no tests + doCheck = false; + + meta = with lib; { + description = "A screencasting program created with design in mind"; + homepage = "https://github.com/niknah/kazam"; + license = licenses.lgpl3; + platforms = platforms.linux; + maintainers = [ maintainers.domenkozar ]; + mainProgram = "kazam"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kazam/fix-paths.patch b/nixpkgs/pkgs/applications/video/kazam/fix-paths.patch new file mode 100644 index 000000000000..43e360830ab5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kazam/fix-paths.patch @@ -0,0 +1,22 @@ +--- a/kazam/backend/grabber.py ++++ b/kazam/backend/grabber.py +@@ -72,7 +72,7 @@ + # + if prefs.shutter_sound and (not self.god): + soundfile = os.path.join(prefs.datadir, 'sounds', prefs.sound_files[prefs.shutter_type]) +- subprocess.call(['/usr/bin/canberra-gtk-play', '-f', soundfile]) ++ subprocess.call(['@libcanberra@/bin/canberra-gtk-play', '-f', soundfile]) + + if self.xid: + if prefs.capture_borders_pic: +--- a/kazam/pulseaudio/ctypes_pulseaudio.py ++++ b/kazam/pulseaudio/ctypes_pulseaudio.py +@@ -20,7 +20,7 @@ + # MA 02110-1301, USA. + + from ctypes import * +-PA = CDLL('libpulse.so.0') ++PA = CDLL('@libpulseaudio@/lib/libpulse.so.0') + + # + # Pulse Audio constants and defines diff --git a/nixpkgs/pkgs/applications/video/kmplayer/default.nix b/nixpkgs/pkgs/applications/video/kmplayer/default.nix new file mode 100644 index 000000000000..a3c5b181725a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kmplayer/default.nix @@ -0,0 +1,51 @@ +{ + mkDerivation, lib, fetchurl, + extra-cmake-modules, makeWrapper, + libpthreadstubs, libXdmcp, + qtsvg, qtx11extras, ki18n, kdelibs4support, kio, kmediaplayer, kwidgetsaddons, + phonon, cairo, mplayer +}: + +mkDerivation rec { + majorMinorVersion = "0.12"; + patchVersion = "0b"; + version = "${majorMinorVersion}.${patchVersion}"; + pname = "kmplayer"; + + src = fetchurl { + url = "mirror://kde/stable/kmplayer/${majorMinorVersion}/kmplayer-${version}.tar.bz2"; + sha256 = "0wzdxym4fc83wvqyhcwid65yv59a2wvp1lq303cn124mpnlwx62y"; + }; + + patches = [ + ./kmplayer_part-plugin_metadata.patch # Qt 5.9 doesn't like an empty string for the optional "FILE" argument of "Q_PLUGIN_METADATA" + ./no-docs.patch # Don't build docs due to errors (kdelibs4support propagates kdoctools) + ]; + + postPatch = '' + sed -i src/kmplayer.desktop \ + -e "s,^Exec.*,Exec=$out/bin/kmplayer -qwindowtitle %c %i %U," + ''; + + # required for kf5auth to work correctly + cmakeFlags = ["-DCMAKE_POLICY_DEFAULT_CMP0012=NEW"]; + + nativeBuildInputs = [ extra-cmake-modules makeWrapper ]; + + buildInputs = [ + libpthreadstubs libXdmcp + qtsvg qtx11extras ki18n kdelibs4support kio kmediaplayer kwidgetsaddons + phonon cairo + ]; + + postInstall = '' + wrapProgram $out/bin/kmplayer --suffix PATH : ${mplayer}/bin + ''; + + meta = with lib; { + description = "MPlayer front-end for KDE"; + license = with licenses; [ gpl2Plus lgpl2Plus fdl12Plus ]; + homepage = "https://kmplayer.kde.org/"; + maintainers = with maintainers; [ sander zraexy ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kmplayer/kmplayer_part-plugin_metadata.patch b/nixpkgs/pkgs/applications/video/kmplayer/kmplayer_part-plugin_metadata.patch new file mode 100644 index 000000000000..9b6652b0be58 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kmplayer/kmplayer_part-plugin_metadata.patch @@ -0,0 +1,11 @@ +--- a/src/kmplayer_part.h ++++ b/src/kmplayer_part.h +@@ -36,7 +36,7 @@ + + class KMPlayerFactory : public KPluginFactory { + Q_OBJECT +- Q_PLUGIN_METADATA(IID "org.kde.KPluginFactory" FILE "") ++ Q_PLUGIN_METADATA(IID "org.kde.KPluginFactory") + Q_INTERFACES(KPluginFactory) + public: + KMPlayerFactory(); diff --git a/nixpkgs/pkgs/applications/video/kmplayer/no-docs.patch b/nixpkgs/pkgs/applications/video/kmplayer/no-docs.patch new file mode 100644 index 000000000000..c93453f908c9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kmplayer/no-docs.patch @@ -0,0 +1,12 @@ +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -79,9 +79,6 @@ + + add_subdirectory(src) + add_subdirectory(icons) +-if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/doc" AND KF5DocTools_VERSION) +- add_subdirectory(doc) +-endif(KF5DocTools_VERSION) + add_subdirectory(data) + + if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po") diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/a4ksubtitles/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/a4ksubtitles/default.nix new file mode 100644 index 000000000000..ae32fb7c5a77 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/a4ksubtitles/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchFromGitHub, requests, vfs-libarchive }: + +buildKodiAddon rec { + pname = "a4ksubtitles"; + namespace = "service.subtitles.a4ksubtitles"; + version = "3.3.0"; + + src = fetchFromGitHub { + owner = "a4k-openproject"; + repo = "a4kSubtitles"; + rev = "${namespace}/${namespace}-${version}"; + sha256 = "sha256-t6oclFAOsUC+hFtw6wjRh1zl2vQfc7RKblVJpBPfE9w="; + }; + + propagatedBuildInputs = [ + requests + vfs-libarchive + ]; + + meta = with lib; { + homepage = "https://a4k-openproject.github.io/a4kSubtitles/"; + description = "Multi-Source Subtitles Addon"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/addon-update-script/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/addon-update-script/default.nix new file mode 100644 index 000000000000..abcdefaf02dd --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/addon-update-script/default.nix @@ -0,0 +1,23 @@ +{ writeShellScript +, nix +, curl +, gzip +, xmlstarlet +, common-updater-scripts +}: + +{ attrPath }: + +let + url = "http://mirrors.kodi.tv/addons/nexus/addons.xml.gz"; + updateScript = writeShellScript "update.sh" '' + set -ex + + attrPath=$1 + namespace=$(${nix}/bin/nix-instantiate $systemArg --eval -E "with import ./. {}; $attrPath.namespace" | tr -d '"') + version=$(${curl}/bin/curl -s -L ${url} | ${gzip}/bin/gunzip -c | ${xmlstarlet}/bin/xml select -T -t -m "//addons/addon[@id='$namespace']" -v @version) + + ${common-updater-scripts}/bin/update-source-version "$attrPath" "$version" + ''; +in + [ updateScript attrPath ] diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/archive_tool/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/archive_tool/default.nix new file mode 100644 index 000000000000..4788556a8793 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/archive_tool/default.nix @@ -0,0 +1,28 @@ +{ lib, buildKodiAddon, fetchFromGitHub, vfs-libarchive }: +buildKodiAddon rec { + pname = "archive_tool"; + namespace = "script.module.archive_tool"; + version = "2.0.3"; + + src = fetchFromGitHub { + owner = "zach-morris"; + repo = "script.module.archive_tool"; + rev = version; + sha256 = "0hbkyk59xxfjv6vzfjplahmqxi5564qjlwyq6k8ijy6jjcwnd3p7"; + }; + + propagatedBuildInputs = [ + vfs-libarchive + ]; + + passthru = { + pythonPath = "lib"; + }; + + meta = with lib; { + homepage = "https://github.com/zach-morris/script.module.archive_tool"; + description = "A set of common python functions to work with the Kodi archive virtual file system (vfs) binary addons"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/arrow/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/arrow/default.nix new file mode 100644 index 000000000000..363b41035e00 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/arrow/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, typing_extensions }: +buildKodiAddon rec { + pname = "arrow"; + namespace = "script.module.arrow"; + version = "1.2.3"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/script.module.arrow/script.module.arrow-${version}.zip"; + sha256 = "sha256-Et+9FJT1dRE1dFOrAQ70HJJcfylyLsiyay9wPJcSOXs="; + }; + + propagatedBuildInputs = [ + dateutil + typing_extensions + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.arrow"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/razzeee/script.module.arrow"; + description = "Better dates & times for Python"; + license = licenses.asl20; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/arteplussept/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/arteplussept/default.nix new file mode 100644 index 000000000000..287735d246e7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/arteplussept/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, requests, xbmcswift2 }: + +buildKodiAddon rec { + pname = "arteplussept"; + namespace = "plugin.video.arteplussept"; + version = "1.4.2"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + hash = "sha256-dqxGKaOnEYOI33Aw76zbjma5z7MqOUh367dFsV87olU="; + }; + + propagatedBuildInputs = [ + dateutil + requests + xbmcswift2 + ]; + + passthru = { + updateScript = addonUpdateScript { + attrPath = "kodi.packages.arteplussept"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/thomas-ernest/plugin.video.arteplussept"; + description = "Watch videos available on Arte+7"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/certifi/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/certifi/default.nix new file mode 100644 index 000000000000..13ed0c1e4585 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/certifi/default.nix @@ -0,0 +1,40 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, cacert }: +buildKodiAddon rec { + pname = "certifi"; + namespace = "script.module.certifi"; + version = "2023.5.7"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-NQbjx+k9fnQMYLLMR5+N5NSuDcXEzZjlhGPA3qSmjfI="; + }; + + patches = [ + # Add support for NIX_SSL_CERT_FILE + ./env.patch + ]; + + postPatch = '' + # Use our system-wide ca-bundle instead of the bundled one + ln -snvf "${cacert}/etc/ssl/certs/ca-bundle.crt" "lib/certifi/cacert.pem" + ''; + + propagatedNativeBuildInputs = [ + # propagate cacerts setup-hook to set up `NIX_SSL_CERT_FILE` + cacert + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.certifi"; + }; + }; + + meta = with lib; { + homepage = "https://certifi.io"; + description = "Python package for providing Mozilla's CA Bundle"; + license = licenses.mpl20; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/certifi/env.patch b/nixpkgs/pkgs/applications/video/kodi/addons/certifi/env.patch new file mode 100644 index 000000000000..087ab58e4414 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/certifi/env.patch @@ -0,0 +1,86 @@ +diff --git a/lib/certifi/core.py b/lib/certifi/core.py +index de02898..c033d20 100644 +--- a/lib/certifi/core.py ++++ b/lib/certifi/core.py +@@ -4,15 +4,25 @@ certifi.py + + This module returns the installation location of cacert.pem or its contents. + """ ++import os + import sys + + ++def get_cacert_path_from_environ(): ++ path = os.environ.get("NIX_SSL_CERT_FILE", None) ++ ++ if path == "/no-cert-file.crt": ++ return None ++ ++ return path ++ ++ + if sys.version_info >= (3, 11): + + from importlib.resources import as_file, files + + _CACERT_CTX = None +- _CACERT_PATH = None ++ _CACERT_PATH = get_cacert_path_from_environ() + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the file +@@ -39,14 +49,16 @@ if sys.version_info >= (3, 11): + return _CACERT_PATH + + def contents() -> str: +- return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") ++ if _CACERT_PATH is not None: ++ return open(_CACERT_PATH, encoding="utf-8").read() ++ return files("certifi").joinpath("cacert.pem").read_text(encoding="utf-8") + + elif sys.version_info >= (3, 7): + + from importlib.resources import path as get_path, read_text + + _CACERT_CTX = None +- _CACERT_PATH = None ++ _CACERT_PATH = get_cacert_path_from_environ() + + def where() -> str: + # This is slightly terrible, but we want to delay extracting the +@@ -74,7 +86,9 @@ elif sys.version_info >= (3, 7): + return _CACERT_PATH + + def contents() -> str: +- return read_text("certifi", "cacert.pem", encoding="ascii") ++ if _CACERT_PATH is not None: ++ return open(_CACERT_PATH, encoding="utf-8").read() ++ return read_text("certifi", "cacert.pem", encoding="utf-8") + + else: + import os +@@ -84,6 +98,8 @@ else: + Package = Union[types.ModuleType, str] + Resource = Union[str, "os.PathLike"] + ++ _CACERT_PATH = get_cacert_path_from_environ() ++ + # This fallback will work for Python versions prior to 3.7 that lack the + # importlib.resources module but relies on the existing `where` function + # so won't address issues with environments like PyOxidizer that don't set +@@ -102,7 +118,14 @@ else: + def where() -> str: + f = os.path.dirname(__file__) + ++ if _CACERT_PATH is not None: ++ return _CACERT_PATH ++ + return os.path.join(f, "cacert.pem") + + def contents() -> str: +- return read_text("certifi", "cacert.pem", encoding="ascii") ++ if _CACERT_PATH is not None: ++ with open(_CACERT_PATH, encoding="utf-8") as data: ++ return data.read() ++ ++ return read_text("certifi", "cacert.pem", encoding="utf-8") diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/chardet/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/chardet/default.nix new file mode 100644 index 000000000000..5d3fd8421db9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/chardet/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "chardet"; + namespace = "script.module.chardet"; + version = "5.1.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-cIQIX6LVAoGf1sBRKWonXJd3XYqGOa5WIUttabV0HeU="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.chardet"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/Freso/script.module.chardet"; + description = "Universal encoding detector"; + license = licenses.lgpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix new file mode 100644 index 000000000000..30b54c2adae2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/controller-topology-project/default.nix @@ -0,0 +1,35 @@ +{ lib, stdenv, fetchFromGitHub, toKodiAddon, addonDir }: +let + drv = stdenv.mkDerivation { + pname = "controller-topology-project"; + version = "unstable-2022-11-19"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "controller-topology-project"; + rev = "d96894ca68678000f26f56d14aa3ceea47b1a3a8"; + sha256 = "sha256-KfDr2bSJFey/aNO5WzoOQ8Mz0v4uitKkOesymIMZH1o="; + }; + + postPatch = '' + # remove addons already included in the base kodi package + rm -r addons/game.controller.default + rm -r addons/game.controller.snes + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out${addonDir} + cp -r addons/* $out${addonDir} + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/kodi-game/controller-topology-project"; + description = "Models how controllers connect to and map to each other for all gaming history"; + license = with licenses; [ odbl ]; + maintainers = teams.kodi.members; + }; + }; +in + toKodiAddon drv diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/dateutil/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/dateutil/default.nix new file mode 100644 index 000000000000..9adcf3303bb5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/dateutil/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, six }: + +buildKodiAddon rec { + pname = "dateutil"; + namespace = "script.module.dateutil"; + version = "2.8.2"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-iQnyS0GjYcPbnBDUxmMrmDxHOA3K8RbTVke/HF4d5u4="; + }; + + propagatedBuildInputs = [ + six + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.dateutil"; + }; + }; + + meta = with lib; { + homepage = "https://dateutil.readthedocs.io/en/stable/"; + description = "Extensions to the standard Python datetime module"; + license = with licenses; [ asl20 bsd3 ]; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/defusedxml/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/defusedxml/default.nix new file mode 100644 index 000000000000..12a9f82e3f6e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/defusedxml/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "defusedxml"; + namespace = "script.module.defusedxml"; + version = "0.6.0+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-jSl7lbFqR6hjZhHzxY69hDbs84LY3B5RYKzXnHou0Qg="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.defusedxml"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/tiran/defusedxml"; + description = "defusing XML bombs and other exploits"; + license = licenses.psfl; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/future/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/future/default.nix new file mode 100644 index 000000000000..c8078ff36d5a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/future/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "future"; + namespace = "script.module.future"; + version = "0.18.3+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-jKO2Qxi54z6UiCmMkxU+2pog40K2yb8/KYbNPFYuSsQ="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.future"; + }; + }; + + meta = with lib; { + homepage = "https://python-future.org"; + description = "The missing compatibility layer between Python 2 and Python 3"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/iagl/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/iagl/default.nix new file mode 100644 index 000000000000..1665a613bc08 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/iagl/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchFromGitHub, dateutil, requests, routing, vfs-libarchive, archive_tool, youtube }: + +buildKodiAddon rec { + pname = "iagl"; + namespace = "plugin.program.iagl"; + version = "3.0.9"; + + src = fetchFromGitHub { + owner = "zach-morris"; + repo = "plugin.program.iagl"; + rev = version; + sha256 = "sha256-b8nO3D/xTnj/5UDshGlIJdiHd75VhIlkrGUi0vkZqG4="; + }; + + propagatedBuildInputs = [ + dateutil + requests + routing + vfs-libarchive + archive_tool + youtube + ]; + + meta = with lib; { + homepage = "https://github.com/zach-morris/plugin.program.iagl"; + description = "Launch Games from the Internet using Kodi"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/idna/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/idna/default.nix new file mode 100644 index 000000000000..d752cb93b01a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/idna/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "idna"; + namespace = "script.module.idna"; + version = "3.4.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-wS1d1L18v4+RGwxDh7OpKRHB2A4qYwiq6b5mAz7l8Pk="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.idna"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/Freso/script.module.idna"; + description = "Internationalized Domain Names for Python"; + license = licenses.bsd3; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/infotagger/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/infotagger/default.nix new file mode 100644 index 000000000000..da4528ed0afc --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/infotagger/default.nix @@ -0,0 +1,28 @@ +{ lib, buildKodiAddon, fetchFromGitHub, addonUpdateScript }: +buildKodiAddon rec { + pname = "infotagger"; + namespace = "script.module.infotagger"; + version = "0.0.7"; + + src = fetchFromGitHub { + owner = "jurialmunkey"; + repo = namespace; + rev = "v${version}"; + hash = "sha256-Us7ud0QORGn+ALB4uyISekp0kUYY8nN8uFNg8MlxEB0="; + }; + + passthru = { + # Unusual Python path. + pythonPath = "resources/modules"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.infotagger"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/jurialmunkey/script.module.infotagger"; + description = "Wrapper for new Nexus InfoTagVideo ListItem methods to maintain backwards compatibility"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix new file mode 100644 index 000000000000..49afbf8507b1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-adaptive/default.nix @@ -0,0 +1,44 @@ +{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, expat, glib, nspr, nss, gtest }: +let + bento4 = fetchFromGitHub { + owner = "xbmc"; + repo = "Bento4"; + rev = "1.6.0-639-7-Omega"; + sha256 = "sha256-d3znV88dLMbA4oUWsTZ7vS6WHOWzN7lIHgWPkR5Aixo="; + }; +in +buildKodiBinaryAddon rec { + pname = "inputstream-adaptive"; + namespace = "inputstream.adaptive"; + version = "20.3.16"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = "inputstream.adaptive"; + rev = "${version}-${rel}"; + sha256 = "sha256-1OY+3pvpVW8rkj7HL84IECyHpAmWsUQ9mTzuGesH+jI="; + }; + + extraCMakeFlags = [ + "-DENABLE_INTERNAL_BENTO4=ON" + "-DBENTO4_URL=${bento4}" + ]; + + extraNativeBuildInputs = [ gtest ]; + + extraBuildInputs = [ expat ]; + + extraRuntimeDependencies = [ glib nspr nss stdenv.cc.cc.lib ]; + + extraInstallPhase = let n = namespace; in '' + ln -s $out/lib/addons/${n}/libssd_wv.so $out/${addonDir}/${n}/libssd_wv.so + ''; + + meta = with lib; { + homepage = "https://github.com/xbmc/inputstream.adaptive"; + description = "Kodi inputstream addon for several manifest types"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-ffmpegdirect/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-ffmpegdirect/default.nix new file mode 100644 index 000000000000..fc3256855917 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-ffmpegdirect/default.nix @@ -0,0 +1,24 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, kodi, bzip2, zlib }: + +buildKodiBinaryAddon rec { + pname = "inputstream-ffmpegdirect"; + namespace = "inputstream.ffmpegdirect"; + version = "unstable-20.5.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = "inputstream.ffmpegdirect"; + rev = rel; + sha256 = "sha256-+u28Wzp2TonL5jaa5WJUr9igR6KiaxizZAX9jqqBUns="; + }; + + extraBuildInputs = [ bzip2 zlib kodi.ffmpeg ]; + + meta = with lib; { + homepage = "https://github.com/xbmc/inputstream.ffmpegdirect/"; + description = "InputStream Client for streams that can be opened by either FFmpeg's libavformat or Kodi's cURL"; + platforms = platforms.all; + license = licenses.gpl2Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-rtmp/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-rtmp/default.nix new file mode 100644 index 000000000000..561ef2cc5577 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/inputstream-rtmp/default.nix @@ -0,0 +1,24 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, rtmpdump, zlib }: + +buildKodiBinaryAddon rec { + pname = "inputstream-rtmp"; + namespace = "inputstream.rtmp"; + version = "20.3.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = "inputstream.rtmp"; + rev = "${version}-${rel}"; + sha256 = "sha256-VF2DpQXXU+rj76e/de5YB1T7dzeOjmO0dpsPVqEnMy4="; + }; + + extraBuildInputs = [ openssl rtmpdump zlib ]; + + meta = with lib; { + homepage = "https://github.com/xbmc/inputstream.rtmp/"; + description = "Client for RTMP streams"; + platforms = platforms.all; + license = licenses.gpl2Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix new file mode 100644 index 000000000000..ceafe3b9c5ff --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/inputstreamhelper/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "inputstreamhelper"; + namespace = "script.module.inputstreamhelper"; + version = "0.6.1+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-v5fRikswmP+KVbxYibD0NbCK8leUnFbya5EtF1FmS0I="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.inputstreamhelper"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/emilsvennesson/script.module.inputstreamhelper"; + description = "A simple Kodi module that makes life easier for add-on developers relying on InputStream based add-ons and DRM playback"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/invidious/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/invidious/default.nix new file mode 100644 index 000000000000..e5d26ef4a64c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/invidious/default.nix @@ -0,0 +1,32 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests, inputstream-adaptive, inputstreamhelper }: + +buildKodiAddon rec { + pname = "invidious"; + namespace = "plugin.video.invidious"; + version = "0.2.6"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/plugin.video.invidious/plugin.video.invidious-${version}+nexus.0.zip"; + sha256 = "sha256-XnlnhvtHMh4uQTupW/SSOmaEV8xZrL61/6GoRpyKR0o="; + }; + + propagatedBuildInputs = [ + requests + inputstream-adaptive + inputstreamhelper + ]; + + passthru = { + pythonPath = "resources/lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.invidious"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/petterreinholdtsen/kodi-invidious-plugin"; + description = "A privacy-friendly way of watching YouTube content"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/jellyfin/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/jellyfin/default.nix new file mode 100644 index 000000000000..1e570ab51131 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/jellyfin/default.nix @@ -0,0 +1,50 @@ +{ lib, addonDir, buildKodiAddon, fetchFromGitHub, kodi, requests, dateutil, six, kodi-six, signals, websocket }: +let + python = kodi.pythonPackages.python.withPackages (p: with p; [ pyyaml ]); +in +buildKodiAddon rec { + pname = "jellyfin"; + namespace = "plugin.video.jellyfin"; + version = "0.7.12"; + + src = fetchFromGitHub { + owner = "jellyfin"; + repo = "jellyfin-kodi"; + rev = "v${version}"; + sha256 = "sha256-m8msTBim4Ss8XaYqIn6GWXxoCio5ABbqhhgyb1T/Yhg="; + }; + + nativeBuildInputs = [ + python + ]; + + prePatch = '' + # ZIP does not support timestamps before 1980 - https://bugs.python.org/issue34097 + substituteInPlace build.py \ + --replace "with zipfile.ZipFile('{}/{}'.format(target, archive_name), 'w') as z:" "with zipfile.ZipFile('{}/{}'.format(target, archive_name), 'w', strict_timestamps=False) as z:" + ''; + + buildPhase = '' + ${python}/bin/python3 build.py --version=py3 + ''; + + postInstall = '' + mv /build/source/addon.xml $out${addonDir}/${namespace}/ + ''; + + propagatedBuildInputs = [ + requests + dateutil + six + kodi-six + signals + websocket + ]; + + meta = with lib; { + homepage = "https://jellyfin.org/"; + description = "A whole new way to manage and view your media library"; + license = licenses.gpl3Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/joystick/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/joystick/default.nix new file mode 100644 index 000000000000..9da9d8bb7b59 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/joystick/default.nix @@ -0,0 +1,22 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml, udev }: +buildKodiBinaryAddon rec { + pname = namespace; + namespace = "peripheral.joystick"; + version = "20.1.9"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + sha256 = "sha256-xJh9Rj+PcxrgGomEsKnQcO/yZDQCnG6gNBwfK2JGuNA="; + }; + + extraBuildInputs = [ tinyxml udev ]; + + meta = with lib; { + description = "Binary addon for raw joystick input."; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/keymap/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/keymap/default.nix new file mode 100644 index 000000000000..ff710cdedef3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/keymap/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, defusedxml, kodi-six }: + +buildKodiAddon rec { + pname = "keymap"; + namespace = "script.keymap"; + version = "1.1.5"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-wSztipTEGIqw1icsz+ziNxYuRZOFt3C66T1Ifap/ta0="; + }; + + propagatedBuildInputs = [ + defusedxml + kodi-six + ]; + + passthru = { + updateScript = addonUpdateScript { + attrPath = "kodi.packages.keymap"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/tamland/xbmc-keymap-editor"; + description = "A GUI for configuring mappings for remotes, keyboard and other inputs supported by Kodi"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/kodi-platform/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/kodi-platform/default.nix new file mode 100644 index 000000000000..6d458f7377d7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/kodi-platform/default.nix @@ -0,0 +1,15 @@ +{ stdenv, fetchFromGitHub, cmake, kodi, libcec_platform, tinyxml }: +stdenv.mkDerivation rec { + pname = "kodi-platform"; + version = "17.1"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = pname; + rev = "c8188d82678fec6b784597db69a68e74ff4986b5"; + sha256 = "1r3gs3c6zczmm66qcxh9mr306clwb3p7ykzb70r3jv5jqggiz199"; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ kodi libcec_platform tinyxml ]; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/kodi-six/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/kodi-six/default.nix new file mode 100644 index 000000000000..638b7c3b500b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/kodi-six/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "kodi-six"; + namespace = "script.module.kodi-six"; + version = "0.1.3.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-nWz5CPoE0uVsZvWjI4q6y4ZKUnraTjTXLSJ1mK4YopI="; + }; + + passthru = { + pythonPath = "libs"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.kodi-six"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/romanvm/kodi.six"; + description = "Wrappers around Kodi Python API for seamless Python 2/3 compatibility"; + license = licenses.gpl3Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-2048/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-2048/default.nix new file mode 100644 index 000000000000..67644444d891 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-2048/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libretro, twenty-fortyeight }: + +buildKodiBinaryAddon rec { + pname = "libretro-2048"; + namespace = "game.libretro.2048"; + version = "1.0.0.136"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.2048"; + rev = "${version}-Nexus"; + hash = "sha256-cIo56ZGansBlAj6CFw51UOYJUivN9n1qhVTWAX9c5Tc="; + }; + + extraCMakeFlags = [ + "-D2048_LIB=${twenty-fortyeight}/lib/retroarch/cores/2048_libretro.so" + ]; + + extraBuildInputs = [ twenty-fortyeight ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.2048"; + description = "2048 GameClient for Kodi"; + platforms = platforms.all; + license = licenses.publicDomain; + maintainers = with maintainers; teams.kodi.members ++ [ kazenyuk ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-fuse/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-fuse/default.nix new file mode 100644 index 000000000000..776341b60796 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-fuse/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libretro, fuse }: + +buildKodiBinaryAddon rec { + pname = "libretro-fuse"; + namespace = "game.libretro.fuse"; + version = "1.6.0.34"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.fuse"; + rev = "${version}-Nexus"; + hash = "sha256-MimwEV7YD6pMshxqbKTVbLDsPmMbqSy4HPnxwmKswpc="; + }; + + extraCMakeFlags = [ + "-DFUSE_LIB=${fuse}/lib/retroarch/cores/fuse_libretro.so" + ]; + + extraBuildInputs = [ fuse ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.fuse"; + description = "Sinclair - ZX Spectrum (Fuse) GameClient for Kodi"; + platforms = platforms.all; + license = licenses.gpl3Only; + maintainers = with maintainers; teams.kodi.members ++ [ kazenyuk ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-genplus/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-genplus/default.nix new file mode 100644 index 000000000000..3d58ddd64303 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-genplus/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libretro, genesis-plus-gx }: + +buildKodiBinaryAddon rec { + pname = "kodi-libretro-genplus"; + namespace = "game.libretro.genplus"; + version = "1.7.4.35"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.genplus"; + rev = "${version}-Matrix"; + sha256 = "sha256-F3bt129lBZKlDtp7X0S0q10T9k9C2zNeHG+yIP3818Q="; + }; + + extraCMakeFlags = [ + "-DGENPLUS_LIB=${genesis-plus-gx}/lib/retroarch/cores/genesis_plus_gx_libretro.so" + ]; + + extraBuildInputs = [ genesis-plus-gx ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.genplus"; + description = "Genesis Plus GX GameClient for Kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-mgba/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-mgba/default.nix new file mode 100644 index 000000000000..231c769fa752 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-mgba/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libretro, mgba }: + +buildKodiBinaryAddon rec { + pname = "kodi-libretro-mgba"; + namespace = "game.libretro.mgba"; + version = "0.10.0.35"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.mgba"; + rev = "${version}-Matrix"; + sha256 = "sha256-lxpj6Y34apYcE22q4W3Anhigp79r4RgiJ36DbES1kzU="; + }; + + extraCMakeFlags = [ + "-DMGBA_LIB=${mgba}/lib/retroarch/cores/mgba_libretro.so" + ]; + + extraBuildInputs = [ mgba ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.mgba"; + description = "mGBA for Kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-nestopia/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-nestopia/default.nix new file mode 100644 index 000000000000..7c6eda2b0043 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-nestopia/default.nix @@ -0,0 +1,31 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, nestopia }: + +buildKodiBinaryAddon rec { + pname = "libretro-nestopia"; + namespace = "game.libretro.nestopia"; + version = "1.52.0.41"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.nestopia"; + rev = "${version}-${rel}"; + sha256 = "sha256-DmBO+HcfIBcz7p16dND09iwXWeObtU/doo/mJ0IZGGg="; + }; + + extraCMakeFlags = [ + "-DNESTOPIA_LIB=${nestopia}/lib/retroarch/cores/nestopia_libretro.so" + ]; + + extraBuildInputs = [ nestopia ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.nestopia"; + description = "Nintendo - NES / Famicom (Nestopia UE) GameClient for Kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro-snes9x/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-snes9x/default.nix new file mode 100644 index 000000000000..7b52988e80cf --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro-snes9x/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libretro, snes9x }: + +buildKodiBinaryAddon rec { + pname = "kodi-libretro-snes9x"; + namespace = "game.libretro.snes9x"; + version = "1.61.0.34"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro.snes9x"; + rev = "${version}-Matrix"; + sha256 = "sha256-LniZf8Gae4+4Rgc9OGhMCkOI3IA7CPjVrN/gbz9te38="; + }; + + extraCMakeFlags = [ + "-DSNES9X_LIB=${snes9x}/lib/retroarch/cores/snes9x_libretro.so" + ]; + + extraBuildInputs = [ snes9x ]; + propagatedBuildInputs = [ + libretro + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro.snes9x"; + description = "Snes9X GameClient for Kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/libretro/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/libretro/default.nix new file mode 100644 index 000000000000..208f832d6944 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/libretro/default.nix @@ -0,0 +1,24 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml }: + +buildKodiBinaryAddon rec { + pname = "libretro"; + namespace = "game.libretro"; + version = "20.1.0"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = "game.libretro"; + rev = "${version}-${rel}"; + sha256 = "sha256-RwaLGAJt13PLKy45HU64TvQFyY532WWq2YX34Eyu+6o="; + }; + + extraBuildInputs = [ tinyxml ]; + + meta = with lib; { + homepage = "https://github.com/kodi-game/game.libretro"; + description = "Libretro wrapper for Kodi's Game API"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/mediacccde/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/mediacccde/default.nix new file mode 100644 index 000000000000..9c09078557ed --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/mediacccde/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests, routing }: + +buildKodiAddon rec { + pname = "media.ccc.de"; + namespace = "plugin.video.media-ccc-de"; + version = "0.3.0+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/plugin.video.media-ccc-de/plugin.video.media-ccc-de-${version}.zip"; + hash = "sha256-T8J2HtPVDfaPU0gZEa0xVBzwjNInxkRFCCSxS53QhmU="; + }; + + propagatedBuildInputs = [ + requests + routing + ]; + + passthru = { + updateScript = addonUpdateScript { + attrPath = "kodi.packages.mediacccde"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/voc/plugin.video.media-ccc-de/"; + description = "media.ccc.de for Kodi"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/mediathekview/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/mediathekview/default.nix new file mode 100644 index 000000000000..890567d5d6d5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/mediathekview/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchFromGitHub, myconnpy }: + +buildKodiAddon rec { + pname = "mediathekview"; + namespace = "plugin.video.mediathekview"; + version = "1.0.9"; + + src = fetchFromGitHub { + owner = pname; + repo = namespace; + rev = "release-${version}"; + hash = "sha256-XYyocXFTiYO7Ar0TtxjpCAy2Ywtnwb8BTxdKxwDWm4Y="; + }; + + propagatedBuildInputs = [ + myconnpy + ]; + + meta = with lib; { + homepage = "https://github.com/mediathekview/plugin.video.mediathekview"; + description = "Access media libraries of German speaking broadcasting stations"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/myconnpy/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/myconnpy/default.nix new file mode 100644 index 000000000000..dac308ab5837 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/myconnpy/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "myconnpy"; + namespace = "script.module.myconnpy"; + version = "8.0.33"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-NlLMq9RAdWu8rVsMc0FDe1HmQiVp5T7iBXbIH7HB5bI="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.myconnpy"; + }; + }; + + meta = with lib; { + homepage = "http://dev.mysql.com/doc/connector-python/en/index.html"; + description = "MySQL Connector/Python"; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/netflix/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/netflix/default.nix new file mode 100644 index 000000000000..2bff3b6d19b3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/netflix/default.nix @@ -0,0 +1,29 @@ +{ lib, buildKodiAddon, fetchFromGitHub, signals, inputstream-adaptive, inputstreamhelper, requests, myconnpy }: + +buildKodiAddon rec { + pname = "netflix"; + namespace = "plugin.video.netflix"; + version = "1.23.2"; + + src = fetchFromGitHub { + owner = "CastagnaIT"; + repo = namespace; + rev = "v${version}"; + hash = "sha256-/wHKwFZbuxK0iwlqvZpyfi0lnRkjm/HSn221IgCN7VQ="; + }; + + propagatedBuildInputs = [ + signals + inputstream-adaptive + inputstreamhelper + requests + myconnpy + ]; + + meta = with lib; { + homepage = "https://github.com/CastagnaIT/plugin.video.netflix"; + description = "Netflix VOD Services Add-on"; + license = licenses.mit; + maintainers = teams.kodi.members ++ [ maintainers.pks ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/orftvthek/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/orftvthek/default.nix new file mode 100644 index 000000000000..634347be4826 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/orftvthek/default.nix @@ -0,0 +1,28 @@ +{ lib, buildKodiAddon, fetchFromGitHub, future, kodi-six, simplejson, inputstreamhelper }: + +buildKodiAddon rec { + pname = "orftvthek"; + namespace = "plugin.video.orftvthek"; + version = "0.12.6"; + + src = fetchFromGitHub { + owner = "s0faking"; + repo = namespace; + rev = version; + sha256 = "sha256-r18vQ+2TSeflwByEAX33vIZG5qIGneraf5rLBugl5BU="; + }; + + propagatedBuildInputs = [ + future + kodi-six + simplejson + inputstreamhelper + ]; + + meta = with lib; { + homepage = "https://github.com/s0faking/plugin.video.orftvthek"; + description = "An addon that gives you access to the ORF TVthek Video Platform"; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/osmc-skin/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/osmc-skin/default.nix new file mode 100644 index 000000000000..901d1d65716c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/osmc-skin/default.nix @@ -0,0 +1,21 @@ +{ lib, buildKodiAddon, fetchFromGitHub }: +buildKodiAddon rec { + pname = "osmc-skin"; + namespace = "skin.osmc"; + version = "20.1.0"; + + src = fetchFromGitHub { + owner = "osmc"; + repo = namespace; + rev = "v20.1.0-August-update"; + sha256 = "E/+gC7NlVRMaymeYMBO39/+rs0blDjr2zIROr24ekzQ="; + }; + + meta = with lib; { + homepage = "https://github.com/osmc/skin.osmc"; + description = "The default skin for OSMC"; + platforms = platforms.all; + maintainers = with maintainers; [ ]; + license = licenses.cc-by-nc-sa-30; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/pdfreader/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/pdfreader/default.nix new file mode 100644 index 000000000000..62a5853c796b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/pdfreader/default.nix @@ -0,0 +1,22 @@ +{ lib, buildKodiAddon, fetchFromGitHub }: +buildKodiAddon rec { + pname = "pdfreader"; + namespace = "plugin.image.pdf"; + version = "2.0.2"; + + src = fetchFromGitHub { + owner = "i96751414"; + repo = "plugin.image.pdfreader"; + rev = "v${version}"; + sha256 = "0nkqhlm1gyagq6xpdgqvd5qxyr2ngpml9smdmzfabc8b972mwjml"; + }; + + passthru.pythonPath = "lib/api"; + + meta = with lib; { + homepage = "https://forum.kodi.tv/showthread.php?tid=187421"; + description = "A comic book reader"; + license = licenses.gpl2Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix new file mode 100644 index 000000000000..6308a6470acd --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hdhomerun/default.nix @@ -0,0 +1,23 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, jsoncpp, libhdhomerun }: +buildKodiBinaryAddon rec { + pname = "pvr-hdhomerun"; + namespace = "pvr.hdhomerun"; + version = "20.4.0"; + + src = fetchFromGitHub { + owner = "kodi-pvr"; + repo = "pvr.hdhomerun"; + rev = "${version}-${rel}"; + sha256 = "sha256-FKxoPD8t5JbouhvQtMVMFjk3O5zB9kVgrn0eC2RPDvQ="; + }; + + extraBuildInputs = [ jsoncpp libhdhomerun ]; + + meta = with lib; { + homepage = "https://github.com/kodi-pvr/pvr.hdhomerun"; + description = "Kodi's HDHomeRun PVR client addon"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hts/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hts/default.nix new file mode 100644 index 000000000000..7747b9e44c0b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-hts/default.nix @@ -0,0 +1,21 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub }: +buildKodiBinaryAddon rec { + pname = "pvr-hts"; + namespace = "pvr.hts"; + version = "20.7.0"; + + src = fetchFromGitHub { + owner = "kodi-pvr"; + repo = "pvr.hts"; + rev = "${version}-${rel}"; + sha256 = "sha256-Mc540n+TfZiAV2uDSGrItsoPOkEBNyyQlW2DJZLwYA4="; + }; + + meta = with lib; { + homepage = "https://github.com/kodi-pvr/pvr.hts"; + description = "Kodi's Tvheadend HTSP client addon"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix new file mode 100644 index 000000000000..28dd626502e8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-iptvsimple/default.nix @@ -0,0 +1,36 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub +, xz, pugixml, zlib +, inputstream-adaptive, inputstream-ffmpegdirect, inputstream-rtmp +}: + +buildKodiBinaryAddon rec { + pname = "pvr-iptvsimple"; + namespace = "pvr.iptvsimple"; + version = "20.13.0"; + + src = fetchFromGitHub { + owner = "kodi-pvr"; + repo = "pvr.iptvsimple"; + rev = "${version}-${rel}"; + sha256 = "sha256-W/tFM/WpWdSvLEf0iwQoH2JVDjyfr1l8CRQkOG5q4hk="; + }; + + extraBuildInputs = [ + xz + pugixml + zlib + ]; + propagatedBuildInputs = [ + inputstream-adaptive + inputstream-ffmpegdirect + inputstream-rtmp + ]; + + meta = with lib; { + homepage = "https://github.com/kodi-pvr/pvr.iptvsimple"; + description = "Kodi's IPTV Simple client addon"; + platforms = platforms.all; + license = licenses.gpl2Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix new file mode 100644 index 000000000000..4b5e8c6a7094 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/pvr-vdr-vnsi/default.nix @@ -0,0 +1,23 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libGL }: +buildKodiBinaryAddon rec { + pname = "pvr-vdr-vnsi"; + namespace = "pvr.vdr.vnsi"; + version = "20.4.1"; + + src = fetchFromGitHub { + owner = "kodi-pvr"; + repo = "pvr.vdr.vnsi"; + rev = "${version}-${rel}"; + sha256 = "sha256-QooWK+LwlN5RAISjAQ2YiyDAjQQMzod8fFXpI0ll+hc="; + }; + + extraBuildInputs = [ libGL ]; + + meta = with lib; { + homepage = "https://github.com/kodi-pvr/pvr.vdr.vnsi"; + description = "Kodi's VDR VNSI PVR client addon"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/radioparadise/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/radioparadise/default.nix new file mode 100644 index 000000000000..bb556e9ec822 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/radioparadise/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests }: + +buildKodiAddon rec { + pname = "radioparadise"; + namespace = "script.radioparadise"; + version = "2.0.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/script.radioparadise/script.radioparadise-${version}.zip"; + sha256 = "sha256-eRCP0XMQHmyDrZ8Y6RGFfxQ1r26/bWbE/PJz4PET7D8="; + }; + + propagatedBuildInputs = [ + requests + ]; + + passthru = { + pythonPath = "resources/lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.radioparadise"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/alxndr42/script.radioparadise"; + description = "Radio Paradise addon for Kodi"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/requests-cache/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/requests-cache/default.nix new file mode 100644 index 000000000000..6800ecde832a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/requests-cache/default.nix @@ -0,0 +1,29 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests }: +buildKodiAddon rec { + pname = "requests-cache"; + namespace = "script.module.requests-cache"; + version = "0.5.2+matrix.2"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-6M/v/ghS2TnSZhG8bREjxfEfcfLOmvA6hgsa7JUk9Dk="; + }; + + propagatedBuildInputs = [ + requests + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.requests-cache"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/reclosedev/requests-cache"; + description = "Persistent cache for requests library"; + license = licenses.bsd2; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/requests/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/requests/default.nix new file mode 100644 index 000000000000..e21dac1ef3a0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/requests/default.nix @@ -0,0 +1,32 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, certifi, chardet, idna, urllib3 }: +buildKodiAddon rec { + pname = "requests"; + namespace = "script.module.requests"; + version = "2.31.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-05BSD5aoN2CTnjqaSKYMb93j5nIfLvpJHyeQsK++sTw="; + }; + + propagatedBuildInputs = [ + certifi + chardet + idna + urllib3 + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.requests"; + }; + }; + + meta = with lib; { + homepage = "http://python-requests.org"; + description = "Python HTTP for Humans"; + license = licenses.asl20; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/routing/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/routing/default.nix new file mode 100644 index 000000000000..a96c16b8629c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/routing/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "routing"; + namespace = "script.module.routing"; + version = "0.2.3+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-piPmY8Q3NyIeImmkYhDwmQhBiwwcV0X532xV1DogF+I="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.routing"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/tamland/kodi-plugin-routing"; + description = "A routing module for kodi plugins"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/default.nix new file mode 100644 index 000000000000..f6946842ded4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/default.nix @@ -0,0 +1,40 @@ +{ lib, buildKodiAddon, fetchFromGitHub, addonUpdateScript, kodi, inputstreamhelper }: + +buildKodiAddon rec { + pname = "sendtokodi"; + namespace = "plugin.video.sendtokodi"; + version = "0.9.557"; + + src = fetchFromGitHub { + owner = "firsttris"; + repo = "plugin.video.sendtokodi"; + rev = "v${version}"; + hash = "sha256-Ga+9Q7x8+sEmQmteHbSyCahZ/T/l28BAEM84w7bf7z8="; + }; + + patches = [ + ./use-packaged-deps.patch + ]; + + propagatedBuildInputs = [ + inputstreamhelper + ]; + + postPatch = '' + # Remove vendored youtube-dl and yt-dlp libraries. + rm -r lib/ + ''; + + passthru = { + # Instead of the vendored libraries, we propagate youtube-dl and yt-dlp via + # the Python path. + pythonPath = with kodi.pythonPackages; makePythonPath [ youtube-dl yt-dlp ]; + }; + + meta = with lib; { + homepage = "https://github.com/firsttris/plugin.video.sendtokodi"; + description = "Plays various stream sites on Kodi using youtube-dl"; + license = licenses.mit; + maintainers = teams.kodi.members ++ [ maintainers.pks ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/use-packaged-deps.patch b/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/use-packaged-deps.patch new file mode 100644 index 000000000000..abfea58a7ceb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/sendtokodi/use-packaged-deps.patch @@ -0,0 +1,16 @@ +diff --git a/service.py b/service.py +index 1d7b6e4..9782993 100644 +--- a/service.py ++++ b/service.py +@@ -241,9 +241,9 @@ def playlistIndex(url, playlist): + + # Use the chosen resolver while forcing to use youtube_dl on legacy python 2 systems (dlp is python 3.6+) + if xbmcplugin.getSetting(int(sys.argv[1]),"resolver") == "0" or sys.version_info[0] == 2: +- from lib.youtube_dl import YoutubeDL ++ from youtube_dl import YoutubeDL + else: +- from lib.yt_dlp import YoutubeDL ++ from yt_dlp import YoutubeDL + + # patch broken strptime (see above) + patch_strptime() diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/signals/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/signals/default.nix new file mode 100644 index 000000000000..4d84bcafeeef --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/signals/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "signals"; + namespace = "script.module.addon.signals"; + version = "0.0.6+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-WsLR7iUh5F+LXMISBpWx71dLAtg/AMYF6BsiyKZakuE="; + }; + + passthru= { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.signals"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/ruuk/script.module.addon.signals"; + description = "Provides signal/slot mechanism for inter-addon communication"; + license = licenses.lgpl21Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/simplejson/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/simplejson/default.nix new file mode 100644 index 000000000000..b0a04402d3b1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/simplejson/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "simplejson"; + namespace = "script.module.simplejson"; + version = "3.19.1+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-RJy75WAr0XmXnSrPjqKhFjWJnWo3c5IEtUGumcE/mRo="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.simplejson"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/simplejson/simplejson"; + description = "Simple, fast, extensible JSON encoder/decoder for Python"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/six/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/six/default.nix new file mode 100644 index 000000000000..5ce4817eae3b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/six/default.nix @@ -0,0 +1,23 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "six"; + namespace = "script.module.six"; + version = "1.16.0+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-d6BNpnTg6K7NPX3uWp5X0rog33C+B7YoAtLH/CrUYno="; + }; + + passthru.updateScript = addonUpdateScript { + attrPath = "kodi.packages.six"; + }; + + meta = with lib; { + homepage = "https://pypi.org/project/six/"; + description = "Python 2 and 3 compatibility utilities"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/somafm/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/somafm/default.nix new file mode 100644 index 000000000000..4ffc69791298 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/somafm/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "somafm"; + namespace = "plugin.audio.somafm"; + version = "2.0.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/plugin.audio.somafm/plugin.audio.somafm-${version}.zip"; + sha256 = "sha256-auPLm7QFabU4tXJPjTl17KpE+lqWM2Edbd2HrXPRx40="; + }; + + passthru = { + pythonPath = "resources/lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.somafm"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/Soma-FM-Kodi-Add-On/plugin.audio.somafm"; + description = "SomaFM addon for Kodi"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/sponsorblock/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/sponsorblock/default.nix new file mode 100644 index 000000000000..d174a09625e5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/sponsorblock/default.nix @@ -0,0 +1,29 @@ +{ lib, buildKodiAddon, fetchFromGitHub, six, requests }: +buildKodiAddon rec { + pname = "sponsorblock"; + namespace = "script.service.sponsorblock"; + version = "0.5.0"; + + src = fetchFromGitHub { + owner = "siku2"; + repo = namespace; + rev = "v${version}"; + hash = "sha256-IBgh2kdPgCy+HHrR7UZxTgjF1LR77ABGlUp3PgaobNM="; + }; + + propagatedBuildInputs = [ + six + requests + ]; + + passthru = { + pythonPath = "resources/lib"; + }; + + meta = with lib; { + homepage = "https://github.com/siku2/script.service.sponsorblock"; + description = "A Port of SponsorBlock for Invidious and YouTube Plugin"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/steam-controller/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/steam-controller/default.nix new file mode 100644 index 000000000000..20488d8a3ffc --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/steam-controller/default.nix @@ -0,0 +1,21 @@ +{ lib, buildKodiBinaryAddon, fetchFromGitHub, libusb1 }: +buildKodiBinaryAddon rec { + pname = namespace; + namespace = "peripheral.steamcontroller"; + version = "20.0.2"; + + src = fetchFromGitHub { + owner = "kodi-game"; + repo = namespace; + rev = "b3174673c6feb34325975b6c007581c39bf3e4a5"; + sha256 = "sha256-Q+eJfbD4NpAPANm9Mx9/pD29L5tdS4gxhQqNufufYdw="; + }; + + extraBuildInputs = [ libusb1 ]; + + meta = with lib; { + description = "Binary addon for steam controller."; + platforms = platforms.all; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/steam-launcher/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/steam-launcher/default.nix new file mode 100644 index 000000000000..ef6b866e7e33 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/steam-launcher/default.nix @@ -0,0 +1,37 @@ +{ lib, buildKodiAddon, fetchFromGitHub, steam, which, xdotool, dos2unix, wmctrl }: +buildKodiAddon { + pname = "steam-launcher"; + namespace = "script.steam.launcher"; + version = "3.5.1"; + + src = fetchFromGitHub rec { + owner = "teeedubb"; + repo = owner + "-xbmc-repo"; + rev = "d5cea4b590b0ff08ac169b757946b7cb5145b983"; + sha256 = "sha256-arBMMOoHQuHRcJ7eXD1jvA45Svei7c0srcBZkdAzqY0="; + }; + + propagatedBuildInputs = [ steam which xdotool ]; + + postInstall = '' + substituteInPlace $out/share/kodi/addons/script.steam.launcher/resources/main.py \ + --replace "\"which\"" "\"${which}/bin/which\"" \ + --replace "\"xdotool\"" "\"${xdotool}/bin/xdotool\"" \ + --replace "\"wmctrl\"" "\"${wmctrl}/bin/wmctrl\"" + ${dos2unix}/bin/dos2unix $out/share/kodi/addons/script.steam.launcher/resources/scripts/steam-launcher.sh + ''; + + meta = with lib; { + homepage = "https://forum.kodi.tv/showthread.php?tid=157499"; + description = "Launch Steam in Big Picture Mode from Kodi"; + longDescription = '' + This add-on will close/minimise Kodi, launch Steam in Big + Picture Mode and when Steam BPM is exited (either by quitting + Steam or returning to the desktop) Kodi will + restart/maximise. Running pre/post Steam scripts can be + configured via the addon. + ''; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/steam-library/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/steam-library/default.nix new file mode 100644 index 000000000000..cf1ad1d8653d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/steam-library/default.nix @@ -0,0 +1,27 @@ +{ lib, buildKodiAddon, fetchFromGitHub, requests, requests-cache, routing }: + +buildKodiAddon rec { + pname = "steam-library"; + namespace = "plugin.program.steam.library"; + version = "0.9.0"; + + src = fetchFromGitHub { + owner = "aanderse"; + repo = namespace; + rev = "v${version}"; + sha256 = "sha256-LVdFih0n/lkjyaYf8jw0IFlcDiXXOtUH2N9OduV1H9Q="; + }; + + propagatedBuildInputs = [ + requests + requests-cache + routing + ]; + + meta = with lib; { + homepage = "https://github.com/aanderse/plugin.program.steam.library"; + description = "View your entire Steam library right from Kodi"; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/svtplay/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/svtplay/default.nix new file mode 100644 index 000000000000..7cc94bc435a5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/svtplay/default.nix @@ -0,0 +1,27 @@ +{ lib, buildKodiAddon, fetchFromGitHub }: +buildKodiAddon rec { + pname = "svtplay"; + namespace = "plugin.video.svtplay"; + version = "5.1.21"; + + src = fetchFromGitHub { + owner = "nilzen"; + repo = "xbmc-" + pname; + rev = "v${version}"; + sha256 = "sha256-CZtBUqFaKtMmKcpfBQp0Mb8sVvpCTkqcpfdYe41YSJs="; + }; + + meta = with lib; { + homepage = "https://forum.kodi.tv/showthread.php?tid=67110"; + description = "Watch content from SVT Play"; + longDescription = '' + With this addon you can stream content from SVT Play + (svtplay.se). The plugin fetches the video URL from the SVT + Play website and feeds it to the Kodi video player. HLS (m3u8) + is the preferred video format by the plugin. + ''; + platforms = platforms.all; + license = licenses.gpl3Plus; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/trakt-module/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/trakt-module/default.nix new file mode 100644 index 000000000000..1c9680147cb5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/trakt-module/default.nix @@ -0,0 +1,31 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, requests, six, arrow }: +buildKodiAddon rec { + pname = "trakt-module"; + namespace = "script.module.trakt"; + version = "4.4.0+matrix.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-6JIAQwot5VZ36gvQym88BD/e/mSyS8WO8VqkPn2GcqY="; + }; + + propagatedBuildInputs = [ + requests + six + arrow + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.trakt-module"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/Razzeee/script.module.trakt"; + description = "Python trakt.py library packed for Kodi"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/trakt/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/trakt/default.nix new file mode 100644 index 000000000000..64113cb0139b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/trakt/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, trakt-module, dateutil }: +buildKodiAddon rec { + pname = "trakt"; + namespace = "script.trakt"; + version = "3.5.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-OyU6S5r/y3vqW6Wg6OP0+Zn4YchBy8x1i++hzCQHyx0="; + }; + + propagatedBuildInputs = [ + dateutil + trakt-module + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.trakt"; + }; + }; + + meta = with lib; { + homepage = "https://kodi.wiki/view/Add-on:Trakt"; + description = "Trakt.tv movie and TV show scrobbler for Kodi"; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/typing_extensions/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/typing_extensions/default.nix new file mode 100644 index 000000000000..fd52528b7ca0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/typing_extensions/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: +buildKodiAddon rec { + pname = "typing_extensions"; + namespace = "script.module.typing_extensions"; + version = "4.7.1"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-bCGPl5fGVyptCenpNXP/Msi7hu+UdtZd2ms7MfzbsbM="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.typing_extensions"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/python/typing/tree/master/typing_extensions"; + description = "Python typing extensions"; + license = licenses.psfl; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/urllib3/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/urllib3/default.nix new file mode 100644 index 000000000000..8d13052b950e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/urllib3/default.nix @@ -0,0 +1,26 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript }: + +buildKodiAddon rec { + pname = "urllib3"; + namespace = "script.module.urllib3"; + version = "2.1.0"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-UCvkeguxytPoP1gIIt8N79TVs98ATzsfrRSabtbgnGc="; + }; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.urllib3"; + }; + }; + + meta = with lib; { + homepage = "https://urllib3.readthedocs.io/en/latest/"; + description = "HTTP library with thread-safe connection pooling, file post, and more"; + license = licenses.mit; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix new file mode 100644 index 000000000000..674495f9d848 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-libarchive/default.nix @@ -0,0 +1,22 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libarchive, xz, bzip2, zlib, lz4, lzo, openssl }: +buildKodiBinaryAddon rec { + pname = namespace; + namespace = "vfs.libarchive"; + version = "20.1.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + sha256 = "sha256-D0eLH+G+qF5xLBBX/FdJC+gKNQpqSb7LjRmi/99rPNg="; + }; + + extraBuildInputs = [ libarchive xz bzip2 zlib lz4 lzo openssl ]; + + meta = with lib; { + description = "LibArchive Virtual Filesystem add-on for Kodi"; + license = licenses.gpl2Plus; + platforms = platforms.all; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/vfs-rar/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-rar/default.nix new file mode 100644 index 000000000000..259295be7ca7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-rar/default.nix @@ -0,0 +1,22 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml }: +buildKodiBinaryAddon rec { + pname = namespace; + namespace = "vfs.rar"; + version = "20.1.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + sha256 = "sha256-8IEYA2gNchCa7O9kzrCbO5DxYWJqPzQN3SJIr9zCWc8="; + }; + + extraBuildInputs = [ tinyxml ]; + + meta = with lib; { + description = "RAR archive Virtual Filesystem add-on for Kodi"; + license = licenses.gpl2Plus; + platforms = platforms.all; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix new file mode 100644 index 000000000000..b8e2213fec3a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/vfs-sftp/default.nix @@ -0,0 +1,22 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, libssh, zlib }: +buildKodiBinaryAddon rec { + pname = namespace; + namespace = "vfs.sftp"; + version = "20.1.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + sha256 = "sha256-Dv/C8PHaSx13JoGp77rQPtp5G5EH5tqKqzjwZZA7+80="; + }; + + extraBuildInputs = [ openssl libssh zlib ]; + + meta = with lib; { + description = "SFTP Virtual Filesystem add-on for Kodi"; + license = licenses.gpl2Plus; + platforms = platforms.all; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-fishbmc/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-fishbmc/default.nix new file mode 100644 index 000000000000..adb37bf770f6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-fishbmc/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-fishbmc"; + namespace = "visualization.fishbmc"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-MgeSIKAy0N2NMGsU/15tKtDb34CROjcMaKjGyySl9Z0="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.fishbmc"; + description = "FishBMC visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-goom/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-goom/default.nix new file mode 100644 index 000000000000..34eb4c65606a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-goom/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-goom"; + namespace = "visualization.goom"; + version = "20.1.1"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-TxXqJQdPT1+3DwAJv0F2Hfksh+ZV4QjfOnp4/k53GpQ="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.goom"; + description = "Goom visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-matrix/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-matrix/default.nix new file mode 100644 index 000000000000..0839982ebb66 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-matrix/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-matrix"; + namespace = "visualization.matrix"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-tojzPqt6VMccveqnhkl0yXS+/fLdxotmQO3jdtYlkFk="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.matrix"; + description = "Matrix visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-pictureit/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-pictureit/default.nix new file mode 100644 index 000000000000..121850542a91 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-pictureit/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-pictureit"; + namespace = "visualization.pictureit"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-mQDPjpsxStU01H2XJKnX183KAHG+O1CH8JOmApMmwMc="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.pictureit"; + description = "PictureIt visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix new file mode 100644 index 000000000000..8eaecd87fc47 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-projectm/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL, projectm }: + +buildKodiBinaryAddon rec { + pname = "visualization-projectm"; + namespace = "visualization.projectm"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-Kcl1ep+RJlofFmxkrGT3T+XXdwiCofq1hggwU0PAd0E="; + }; + + extraBuildInputs = [ pkg-config libGL projectm ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.projectm"; + description = "Projectm visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-shadertoy/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-shadertoy/default.nix new file mode 100644 index 000000000000..2b0b1b5b6eee --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-shadertoy/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL, jsoncpp }: + +buildKodiBinaryAddon rec { + pname = "visualization-shadertoy"; + namespace = "visualization.shadertoy"; + version = "20.3.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-PaHbEcB4gCC8gUzc7T49msI8f0xa2iXqSaYW/eqD8yw="; + }; + + extraBuildInputs = [ pkg-config libGL jsoncpp ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.shadertoy"; + description = "Shadertoy visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-spectrum/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-spectrum/default.nix new file mode 100644 index 000000000000..e4d44dd12bed --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-spectrum/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-spectrum"; + namespace = "visualization.spectrum"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-rl6eydHv0g646H7478UQboVp/OrKExQYJOiaVDeDRhE="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.spectrum"; + description = "Spectrum visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-starburst/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-starburst/default.nix new file mode 100644 index 000000000000..5774c707397e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-starburst/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-starburst"; + namespace = "visualization.starburst"; + version = "20.2.0"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-FTGyQqzRywKjywtckkP56Fc8KwF07A8WUAe0LackxSM="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.starburst"; + description = "Starburst visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/visualization-waveform/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-waveform/default.nix new file mode 100644 index 000000000000..20acfad234ac --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/visualization-waveform/default.nix @@ -0,0 +1,25 @@ +{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, pkg-config, glm, libGL }: + +buildKodiBinaryAddon rec { + pname = "visualization-waveform"; + namespace = "visualization.waveform"; + version = "20.2.1"; + + src = fetchFromGitHub { + owner = "xbmc"; + repo = namespace; + rev = "${version}-${rel}"; + hash = "sha256-e1SIpMmfnS92X4f114MKch4o9Ke80aIzw6OQPrEb8d0="; + }; + + extraBuildInputs = [ pkg-config libGL ]; + + propagatedBuildInputs = [ glm ]; + meta = with lib; { + homepage = "https://github.com/xbmc/visualization.waveform"; + description = "Waveform visualization for kodi"; + platforms = platforms.all; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/websocket/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/websocket/default.nix new file mode 100644 index 000000000000..c2bbe9de09b6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/websocket/default.nix @@ -0,0 +1,30 @@ +{ lib, buildKodiAddon, fetchzip, addonUpdateScript, six, addonDir }: + +buildKodiAddon rec { + pname = "websocket"; + namespace = "script.module.websocket"; + version = "1.6.4"; + + src = fetchzip { + url = "https://mirrors.kodi.tv/addons/nexus/${namespace}/${namespace}-${version}.zip"; + sha256 = "sha256-1Wy+hxB059UoZnQlncytVT3sQ07dYAhNRnW3/QVD4ZE="; + }; + + propagatedBuildInputs = [ + six + ]; + + passthru = { + pythonPath = "lib"; + updateScript = addonUpdateScript { + attrPath = "kodi.packages.websocket"; + }; + }; + + meta = with lib; { + homepage = "https://github.com/websocket-client/websocket-client"; + description = "A WebSocket client for Python"; + license = licenses.lgpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/xbmcswift2/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/xbmcswift2/default.nix new file mode 100644 index 000000000000..7d435521f06c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/xbmcswift2/default.nix @@ -0,0 +1,25 @@ +{ lib, buildKodiAddon, fetchFromGitHub }: + +buildKodiAddon rec { + pname = "xbmcswift2"; + namespace = "script.module.xbmcswift2"; + version = "19.0.7"; + + src = fetchFromGitHub { + owner = "XBMC-Addons"; + repo = namespace; + rev = version; + sha256 = "sha256-Z+rHz3wncoNvV1pwhRzJFB/X0H6wdfwg88otVh27wg8="; + }; + + passthru = { + pythonPath = "lib"; + }; + + meta = with lib; { + homepage = "https://github.com/XBMC-Addons/script.module.xbmcswift2"; + description = "Framework to ease development of Kodi addons"; + license = licenses.gpl3Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/addons/youtube/default.nix b/nixpkgs/pkgs/applications/video/kodi/addons/youtube/default.nix new file mode 100644 index 000000000000..83afc51053ba --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/addons/youtube/default.nix @@ -0,0 +1,32 @@ +{ lib, buildKodiAddon, fetchFromGitHub, six, requests, infotagger, inputstreamhelper }: + +buildKodiAddon rec { + pname = "youtube"; + namespace = "plugin.video.youtube"; + version = "7.0.3.2"; + + src = fetchFromGitHub { + owner = "anxdpanic"; + repo = "plugin.video.youtube"; + rev = "v${version}"; + hash = "sha256-gJ7RGB0pSG/iLdpmXHpQOoQTisXnMl1Mgd0KYFgg2qI="; + }; + + propagatedBuildInputs = [ + six + requests + infotagger + inputstreamhelper + ]; + + passthru = { + pythonPath = "resources/lib"; + }; + + meta = with lib; { + homepage = "https://github.com/anxdpanic/plugin.video.youtube"; + description = "YouTube is one of the biggest video-sharing websites of the world"; + license = licenses.gpl2Only; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/build-kodi-addon.nix b/nixpkgs/pkgs/applications/video/kodi/build-kodi-addon.nix new file mode 100644 index 000000000000..8f9c05d8fa12 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/build-kodi-addon.nix @@ -0,0 +1,25 @@ +{ stdenv, toKodiAddon, addonDir }: +{ name ? "${attrs.pname}-${attrs.version}" +, namespace +, sourceDir ? "" +, ... } @ attrs: +toKodiAddon (stdenv.mkDerivation ({ + name = "kodi-" + name; + + dontStrip = true; + + extraRuntimeDependencies = [ ]; + + installPhase = '' + runHook preInstall + + cd ./$sourceDir + d=$out${addonDir}/${namespace} + mkdir -p $d + sauce="." + [ -d ${namespace} ] && sauce=${namespace} + cp -R "$sauce/"* $d + + runHook postInstall + ''; +} // attrs)) diff --git a/nixpkgs/pkgs/applications/video/kodi/build-kodi-binary-addon.nix b/nixpkgs/pkgs/applications/video/kodi/build-kodi-binary-addon.nix new file mode 100644 index 000000000000..d1eb38cd0bd4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/build-kodi-binary-addon.nix @@ -0,0 +1,40 @@ +{ stdenv, toKodiAddon, addonDir, cmake, kodi, kodi-platform, libcec_platform }: +{ name ? "${attrs.pname}-${attrs.version}" +, namespace +, version +, extraNativeBuildInputs ? [] +, extraBuildInputs ? [] +, extraRuntimeDependencies ? [] +, extraCMakeFlags ? [] +, extraInstallPhase ? "", ... } @ attrs: +toKodiAddon (stdenv.mkDerivation ({ + name = "kodi-" + name; + + dontStrip = true; + + nativeBuildInputs = [ cmake ] ++ extraNativeBuildInputs; + buildInputs = [ kodi kodi-platform libcec_platform ] ++ extraBuildInputs; + + inherit extraRuntimeDependencies; + + # disables check ensuring install prefix is that of kodi + cmakeFlags = [ + "-DOVERRIDE_PATHS=1" + ] ++ extraCMakeFlags; + + # kodi checks for addon .so libs existance in the addon folder (share/...) + # and the non-wrapped kodi lib/... folder before even trying to dlopen + # them. Symlinking .so, as setting LD_LIBRARY_PATH is of no use + installPhase = let n = namespace; in '' + runHook preInstall + + make install + + [[ -f $out/lib/addons/${n}/${n}.so ]] && ln -s $out/lib/addons/${n}/${n}.so $out${addonDir}/${n}/${n}.so || true + [[ -f $out/lib/addons/${n}/${n}.so.${version} ]] && ln -s $out/lib/addons/${n}/${n}.so.${version} $out${addonDir}/${n}/${n}.so.${version} || true + + ${extraInstallPhase} + + runHook postInstall + ''; +} // attrs)) diff --git a/nixpkgs/pkgs/applications/video/kodi/default.nix b/nixpkgs/pkgs/applications/video/kodi/default.nix new file mode 100644 index 000000000000..3f382efff11b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/default.nix @@ -0,0 +1,14 @@ +{ callPackage, ... } @ args: +let + unwrapped = callPackage ./unwrapped.nix (removeAttrs args [ "callPackage" ]); + kodiPackages = callPackage ../../../top-level/kodi-packages.nix { kodi = unwrapped; }; +in + unwrapped.overrideAttrs (oldAttrs: { + passthru = oldAttrs.passthru // { + packages = kodiPackages; + withPackages = func: callPackage ./wrapper.nix { + kodi = unwrapped; + addons = kodiPackages.requiredKodiAddons (func kodiPackages); + }; + }; + }) diff --git a/nixpkgs/pkgs/applications/video/kodi/unwrapped.nix b/nixpkgs/pkgs/applications/video/kodi/unwrapped.nix new file mode 100644 index 000000000000..f97b53b60937 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/unwrapped.nix @@ -0,0 +1,270 @@ +{ stdenv, lib, fetchFromGitHub +, fetchpatch +, autoconf, automake, libtool, makeWrapper +, pkg-config, cmake, yasm, python3Packages +, libxcrypt, libgcrypt, libgpg-error, libunistring +, boost, avahi, lame +, gettext, pcre-cpp, yajl, fribidi, which +, openssl, gperf, tinyxml2, taglib, libssh, swig, jre_headless +, gtest, ncurses, spdlog +, libxml2, systemd +, alsa-lib, libGLU, libGL, fontconfig, freetype, ftgl +, libjpeg, libpng, libtiff +, libmpeg2, libsamplerate, libmad +, libogg, libvorbis, flac, libxslt +, lzo, libcdio, libmodplug, libass, libbluray, libudfread +, sqlite, libmysqlclient, nasm, gnutls, libva, libdrm +, curl, bzip2, zip, unzip, glxinfo +, libcec, libcec_platform, dcadec, libuuid +, libcrossguid, libmicrohttpd +, bluez, doxygen, giflib, glib, harfbuzz, lcms2, libidn2, libpthreadstubs, libtasn1 +, libplist, p11-kit, zlib, flatbuffers, fstrcmp, rapidjson +, lirc +, x11Support ? true, libX11, xorgproto, libXt, libXmu, libXext, libXinerama, libXrandr, libXtst, libXfixes, xdpyinfo, libXdmcp +, dbusSupport ? true, dbus +, joystickSupport ? true, cwiid +, nfsSupport ? true, libnfs +, pulseSupport ? true, libpulseaudio +, pipewireSupport ? true, pipewire +, rtmpSupport ? true, rtmpdump +, sambaSupport ? true, samba +, udevSupport ? true, udev +, usbSupport ? false, libusb-compat-0_1 +, vdpauSupport ? true, libvdpau +, waylandSupport ? false, wayland, wayland-protocols +, waylandpp ? null, libxkbcommon +, gbmSupport ? false, mesa, libinput +, buildPackages +}: + +assert usbSupport -> !udevSupport; # libusb-compat-0_1 won't be used if udev is available +assert gbmSupport || waylandSupport || x11Support; + +let + kodiReleaseDate = "20240302"; + kodiVersion = "20.5"; + rel = "Nexus"; + + kodi_src = fetchFromGitHub { + owner = "xbmc"; + repo = "xbmc"; + rev = "${kodiVersion}-${rel}"; + hash = "sha256-R/tzk3ZarJ4BTR312p2lTLezeCEsqdQH54ROsNIoJZA="; + }; + + # see https://github.com/xbmc/xbmc/blob/${kodiVersion}-${rel}/tools/depends/target/ to get suggested versions for all dependencies + + # kodi 20.0 moved to ffmpeg 5, *but* there is a bug making the compilation fail which will + # only been fixed in kodi 21, so stick to ffmpeg 4 for now + ffmpeg = stdenv.mkDerivation rec { + pname = "kodi-ffmpeg"; + version = "4.4.1"; + src = fetchFromGitHub { + owner = "xbmc"; + repo = "FFmpeg"; + rev = "${version}-${rel}-Alpha1"; + sha256 = "sha256-EQHmmWnDw+/udKYq7Nrf00nL7I5XWUtmzdauDryfTII="; + }; + patches = [ + # Backport fix for binutils-2.41. + (fetchpatch { + name = "binutils-2.41.patch"; + url = "https://git.ffmpeg.org/gitweb/ffmpeg.git/patch/effadce6c756247ea8bae32dc13bb3e6f464f0eb"; + hash = "sha256-vlBUMJ1bORQHRNpuzc5iXsTWwS/CN5BmGIA8g7H7mJE="; + }) + ]; + preConfigure = '' + cp ${kodi_src}/tools/depends/target/ffmpeg/{CMakeLists.txt,*.cmake} . + sed -i 's/ --cpu=''${CPU}//' CMakeLists.txt + sed -i 's/--strip=''${CMAKE_STRIP}/--strip=''${CMAKE_STRIP} --ranlib=''${CMAKE_RANLIB}/' CMakeLists.txt + ''; + cmakeFlags = lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "-DCROSSCOMPILING=ON" + "-DCPU=${stdenv.hostPlatform.parsed.cpu.name}" + "-DOS=${stdenv.hostPlatform.parsed.kernel.name}" + "-DPKG_CONFIG_EXECUTABLE=pkg-config" + ]; + buildInputs = [ libidn2 libtasn1 p11-kit zlib libva ] + ++ lib.optional vdpauSupport libvdpau; + nativeBuildInputs = [ cmake nasm pkg-config gnutls ]; + }; + + # We can build these externally but FindLibDvd.cmake forces us to build it + # them, so we currently just use them for the src. + libdvdcss = fetchFromGitHub { + owner = "xbmc"; + repo = "libdvdcss"; + rev = "1.4.3-Next-Nexus-Alpha2-2"; + sha256 = "sha256-CJMGH50mNAkovccNcol5ArF3zUnZKfbVB9EXyQgu5k4="; + }; + + libdvdnav = fetchFromGitHub { + owner = "xbmc"; + repo = "libdvdnav"; + rev = "6.1.1-Next-Nexus-Alpha2-2"; + sha256 = "sha256-m8SCjOokVbwJ7eVfYKHap1pQjVbI+BXaoxhGZQIg0+k="; + }; + + libdvdread = fetchFromGitHub { + owner = "xbmc"; + repo = "libdvdread"; + rev = "6.1.3-Next-Nexus-Alpha2-2"; + sha256 = "sha256-AphBQhXud+a6wm52zjzC5biz53NnqWdgpL2QDt2ZuXc="; + }; + + kodi_platforms = lib.optional gbmSupport "gbm" + ++ lib.optional waylandSupport "wayland" + ++ lib.optional x11Support "x11"; + +in stdenv.mkDerivation { + pname = "kodi"; + version = kodiVersion; + + src = kodi_src; + buildInputs = [ + gnutls libidn2 libtasn1 nasm p11-kit + libxml2 python3Packages.python + boost libmicrohttpd + gettext pcre-cpp yajl fribidi libva libdrm + openssl gperf tinyxml2 taglib libssh + gtest ncurses spdlog + alsa-lib libGL libGLU fontconfig freetype ftgl + libjpeg libpng libtiff + libmpeg2 libsamplerate libmad + libogg libvorbis flac libxslt systemd + lzo libcdio libmodplug libass libbluray libudfread + sqlite libmysqlclient avahi lame + curl bzip2 zip unzip glxinfo + libcec libcec_platform dcadec libuuid + libxcrypt libgcrypt libgpg-error libunistring + libcrossguid libplist + bluez giflib glib harfbuzz lcms2 libpthreadstubs + ffmpeg flatbuffers fstrcmp rapidjson + lirc + mesa # for libEGL + ] + ++ lib.optionals x11Support [ + libX11 xorgproto libXt libXmu libXext.dev libXdmcp + libXinerama libXrandr.dev libXtst libXfixes + ] + ++ lib.optional dbusSupport dbus + ++ lib.optional joystickSupport cwiid + ++ lib.optional nfsSupport libnfs + ++ lib.optional pulseSupport libpulseaudio + ++ lib.optional pipewireSupport pipewire + ++ lib.optional rtmpSupport rtmpdump + ++ lib.optional sambaSupport samba + ++ lib.optional udevSupport udev + ++ lib.optional usbSupport libusb-compat-0_1 + ++ lib.optional vdpauSupport libvdpau + ++ lib.optionals waylandSupport [ + wayland + waylandpp.dev + wayland-protocols + # Not sure why ".dev" is needed here, but CMake doesn't find libxkbcommon otherwise + libxkbcommon.dev + ] + ++ lib.optionals gbmSupport [ + libxkbcommon.dev + mesa.dev + libinput.dev + ]; + + nativeBuildInputs = [ + cmake + doxygen + makeWrapper + which + pkg-config + autoconf automake libtool # still needed for some components. Check if that is the case with 19.0 + jre_headless yasm gettext python3Packages.python flatbuffers + + # for TexturePacker + giflib zlib libpng libjpeg lzo + ] ++ lib.optionals waylandSupport [ wayland-protocols waylandpp.bin ]; + + depsBuildBuild = [ + buildPackages.stdenv.cc + ]; + + cmakeFlags = [ + "-DAPP_RENDER_SYSTEM=${if gbmSupport then "gles" else "gl"}" + "-Dlibdvdcss_URL=${libdvdcss}" + "-Dlibdvdnav_URL=${libdvdnav}" + "-Dlibdvdread_URL=${libdvdread}" + "-DGIT_VERSION=${kodiReleaseDate}" + "-DENABLE_EVENTCLIENTS=ON" + "-DENABLE_INTERNAL_CROSSGUID=OFF" + "-DENABLE_INTERNAL_RapidJSON=OFF" + "-DENABLE_OPTICAL=ON" + "-DLIRC_DEVICE=/run/lirc/lircd" + "-DSWIG_EXECUTABLE=${buildPackages.swig}/bin/swig" + "-DFLATBUFFERS_FLATC_EXECUTABLE=${buildPackages.flatbuffers}/bin/flatc" + "-DPYTHON_EXECUTABLE=${buildPackages.python3Packages.python}/bin/python" + # When wrapped KODI_HOME will likely contain symlinks to static assets + # that Kodi's built in webserver will cautiously refuse to serve up + # (because their realpaths are outside of KODI_HOME and the other + # whitelisted directories). This adds the entire nix store to the Kodi + # webserver whitelist to avoid this problem. + "-DKODI_WEBSERVER_EXTRA_WHITELIST=${builtins.storeDir}" + ] ++ lib.optionals waylandSupport [ + "-DWAYLANDPP_SCANNER=${buildPackages.waylandpp}/bin/wayland-scanner++" + ]; + + # 14 tests fail but the biggest issue is that every test takes 30 seconds - + # I'm guessing there is a thing waiting to time out + doCheck = false; + + preConfigure = '' + cmakeFlagsArray+=("-DCORE_PLATFORM_NAME=${lib.concatStringsSep " " kodi_platforms}") + '' + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' + # Need these tools on the build system when cross compiling, + # hacky, but have found no other way. + CXX=$CXX_FOR_BUILD LD=ld make -C tools/depends/native/JsonSchemaBuilder + cmakeFlags+=" -DWITH_JSONSCHEMABUILDER=$PWD/tools/depends/native/JsonSchemaBuilder/bin" + + CXX=$CXX_FOR_BUILD LD=ld make EXTRA_CONFIGURE= -C tools/depends/native/TexturePacker + cmakeFlags+=" -DWITH_TEXTUREPACKER=$PWD/tools/depends/native/TexturePacker/bin" + ''; + + postPatch = '' + substituteInPlace xbmc/platform/posix/PosixTimezone.cpp \ + --replace 'usr/share/zoneinfo' 'etc/zoneinfo' + ''; + + postInstall = '' + # TODO: figure out which binaries should be wrapped this way and which shouldn't + for p in $(ls --ignore=kodi-send $out/bin/) ; do + wrapProgram $out/bin/$p \ + --prefix PATH ":" "${lib.makeBinPath ([ python3Packages.python glxinfo ] + ++ lib.optional x11Support xdpyinfo ++ lib.optional sambaSupport samba)}" \ + --prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath + ([ curl systemd libmad libvdpau libcec libcec_platform libass ] + ++ lib.optional nfsSupport libnfs + ++ lib.optional rtmpSupport rtmpdump)}" + done + + wrapProgram $out/bin/kodi-send \ + --prefix PYTHONPATH : $out/${python3Packages.python.sitePackages} + + substituteInPlace $out/share/xsessions/kodi.desktop \ + --replace kodi-standalone $out/bin/kodi-standalone + ''; + + doInstallCheck = true; + + installCheckPhase = "$out/bin/kodi --version"; + + passthru = { + pythonPackages = python3Packages; + ffmpeg = ffmpeg; + }; + + meta = with lib; { + description = "Media center"; + homepage = "https://kodi.tv/"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = teams.kodi.members; + }; +} diff --git a/nixpkgs/pkgs/applications/video/kodi/wrapper.nix b/nixpkgs/pkgs/applications/video/kodi/wrapper.nix new file mode 100644 index 000000000000..52b7679a325e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kodi/wrapper.nix @@ -0,0 +1,39 @@ +{ lib, makeWrapper, buildEnv, kodi, addons, callPackage }: + +let + kodiPackages = callPackage ../../../top-level/kodi-packages.nix { inherit kodi; }; + + # linux distros are supposed to provide pillow and pycryptodome + requiredPythonPath = with kodi.pythonPackages; makePythonPath ([ pillow pycryptodome ]); + + # each kodi addon can potentially export a python module which should be included in PYTHONPATH + # see any addon which supplies `passthru.pythonPath` and the corresponding entry in the addons `addon.xml` + # eg. `<extension point="xbmc.python.module" library="lib" />` -> pythonPath = "lib"; + additionalPythonPath = + let + addonsWithPythonPath = lib.filter (addon: addon ? pythonPath) addons; + in + lib.concatMapStringsSep ":" (addon: "${addon}${kodiPackages.addonDir}/${addon.namespace}/${addon.pythonPath}") addonsWithPythonPath; +in + +buildEnv { + name = "${kodi.name}-env"; + + paths = [ kodi ] ++ addons; + pathsToLink = [ "/share" ]; + + nativeBuildInputs = [ makeWrapper ]; + + postBuild = '' + mkdir $out/bin + for exe in kodi{,-standalone} + do + makeWrapper ${kodi}/bin/$exe $out/bin/$exe \ + --prefix PYTHONPATH : ${requiredPythonPath}:${additionalPythonPath} \ + --prefix KODI_HOME : $out/share/kodi \ + --prefix LD_LIBRARY_PATH ":" "${lib.makeLibraryPath + (lib.concatMap + (plugin: plugin.extraRuntimeDependencies or []) addons)}" + done + ''; +} diff --git a/nixpkgs/pkgs/applications/video/kooha/default.nix b/nixpkgs/pkgs/applications/video/kooha/default.nix new file mode 100644 index 000000000000..bda712cac113 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/kooha/default.nix @@ -0,0 +1,78 @@ +{ lib +, stdenv +, fetchFromGitHub +, appstream-glib +, cargo +, desktop-file-utils +, glib +, gst_all_1 +, pipewire +, gtk4 +, libadwaita +, libpulseaudio +, librsvg +, meson +, ninja +, pkg-config +, rustPlatform +, rustc +, wayland +, wrapGAppsHook4 +}: + +stdenv.mkDerivation rec { + pname = "kooha"; + version = "2.2.3"; + + src = fetchFromGitHub { + owner = "SeaDve"; + repo = "Kooha"; + rev = "v${version}"; + hash = "sha256-vLgBuP0DncBIb05R3484WozS+Nl+S7YBJUYek2CkJkQ="; + }; + + cargoDeps = rustPlatform.fetchCargoTarball { + inherit src; + name = "${pname}-${version}"; + hash = "sha256-NPh603/5yZDUdTegAzFvjRn5tuzyrcNzbbKQr6NxXso="; + }; + + nativeBuildInputs = [ + appstream-glib + desktop-file-utils + meson + ninja + pkg-config + rustPlatform.cargoSetupHook + cargo + rustc + wrapGAppsHook4 + ]; + + buildInputs = [ + glib + gst_all_1.gstreamer + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-ugly + gtk4 + libadwaita + libpulseaudio + librsvg + wayland + pipewire + ]; + + installCheckPhase = '' + $out/bin/kooha --help + ''; + + meta = with lib; { + description = "Elegantly record your screen"; + homepage = "https://github.com/SeaDve/Kooha"; + license = licenses.gpl3Only; + platforms = platforms.linux; + maintainers = with maintainers; [ austinbutler ]; + mainProgram = "kooha"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/lbry/default.nix b/nixpkgs/pkgs/applications/video/lbry/default.nix new file mode 100644 index 000000000000..b7c03850c951 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/lbry/default.nix @@ -0,0 +1,50 @@ +{ lib, fetchurl, appimageTools}: + +let + pname = "lbry-desktop"; + version = "0.53.9"; +in appimageTools.wrapAppImage rec { + name = "${pname}-${version}"; + + # Fetch from GitHub Releases and extract + src = appimageTools.extract { + inherit name; + src = fetchurl { + url = "https://github.com/lbryio/lbry-desktop/releases/download/v${version}/LBRY_${version}.AppImage"; + # Gotten from latest-linux.yml + hash = "sha256-FkqIazE4eIEobYRBstXfPWh6MTCaNcCLk14yDGC4rRk="; + }; + }; + + # At runtime, Lbry likes to have access to Ffmpeg + extraPkgs = pkgs: with pkgs; [ + ffmpeg + ]; + + # General fixup + extraInstallCommands = '' + # Firstly, rename the executable to lbry for convinence + mv $out/bin/${name} $out/bin/lbry + + # Now, install assets such as the desktop file and icons + install -m 444 -D ${src}/lbry.desktop -t $out/share/applications + substituteInPlace $out/share/applications/lbry.desktop \ + --replace 'Exec=AppRun' 'Exec=lbry' + cp -r ${src}/usr/share/icons $out/share + ''; + + meta = with lib; { + description = "A browser and wallet for LBRY, the decentralized, user-controlled content marketplace"; + longDescription = '' + The LBRY app is a graphical browser for the decentralized content marketplace provided by the LBRY protocol. + It is essentially the lbry daemon bundled with a UI using Electron. + ''; + license = licenses.mit; + homepage = "https://lbry.com/"; + downloadPage = "https://lbry.com/get/"; + changelog = "https://github.com/lbryio/lbry-desktop/blob/master/CHANGELOG.md"; + maintainers = with maintainers; [ enderger ]; + platforms = [ "x86_64-linux" ]; + mainProgram = "lbry"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/lightworks/default.nix b/nixpkgs/pkgs/applications/video/lightworks/default.nix new file mode 100644 index 000000000000..f08b014273c0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/lightworks/default.nix @@ -0,0 +1,97 @@ +{ lib, stdenv, fetchurl, dpkg, makeWrapper, buildFHSEnv +, gtk3, gdk-pixbuf, cairo, libjpeg_original, glib, pango, libGLU +, libGL, nvidia_cg_toolkit, zlib, openssl, libuuid +, alsa-lib, udev, libjack2, freetype, libva, libvdpau +}: +let + fullPath = lib.makeLibraryPath [ + stdenv.cc.cc + gtk3 + gdk-pixbuf + cairo + libjpeg_original + glib + pango + libGL + libGLU + nvidia_cg_toolkit + zlib + openssl + libuuid + alsa-lib + libjack2 + udev + freetype + libva + libvdpau + ]; + + lightworks = stdenv.mkDerivation rec { + version = "2023.1"; + rev = "141770"; + pname = "lightworks"; + + src = + if stdenv.hostPlatform.system == "x86_64-linux" then + fetchurl { + url = "https://cdn.lwks.com/releases/${version}/lightworks_${version}_r${rev}.deb"; + sha256 = "sha256-QRbghrZQbprl2wUBKNMJVBeW0Ek6nWvo4006jyPYIBg="; + } + else throw "${pname}-${version} is not supported on ${stdenv.hostPlatform.system}"; + + nativeBuildInputs = [ makeWrapper ]; + buildInputs = [ dpkg ]; + + unpackPhase = "dpkg-deb -x ${src} ./"; + + installPhase = '' + mkdir -p $out/bin + substitute usr/bin/lightworks $out/bin/lightworks \ + --replace "/usr/lib/lightworks" "$out/lib/lightworks" + chmod +x $out/bin/lightworks + + cp -r usr/lib $out + + # /usr/share/fonts is not normally searched + # This adds it to lightworks' search path while keeping the default + # using the FONTCONFIG_FILE env variable + echo "<?xml version='1.0'?> + <!DOCTYPE fontconfig SYSTEM 'urn:fontconfig:fonts.dtd'> + <fontconfig> + <dir>/usr/share/fonts/truetype</dir> + <include>/etc/fonts/fonts.conf</include> + </fontconfig>" > $out/lib/lightworks/fonts.conf + + patchelf \ + --interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + $out/lib/lightworks/ntcardvt + + wrapProgram $out/lib/lightworks/ntcardvt \ + --prefix LD_LIBRARY_PATH : ${fullPath}:$out/lib/lightworks \ + --set FONTCONFIG_FILE $out/lib/lightworks/fonts.conf + + cp -r usr/share $out/share + ''; + + dontPatchELF = true; + }; + +# Lightworks expects some files in /usr/share/lightworks +in buildFHSEnv { + name = lightworks.name; + + targetPkgs = pkgs: [ + lightworks + ]; + + runScript = "lightworks"; + + meta = { + description = "Professional Non-Linear Video Editor"; + homepage = "https://www.lwks.com/"; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + license = lib.licenses.unfree; + maintainers = with lib.maintainers; [ antonxy vojta001 kashw2 ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/linuxstopmotion/default.nix b/nixpkgs/pkgs/applications/video/linuxstopmotion/default.nix new file mode 100644 index 000000000000..bdf361cec9fc --- /dev/null +++ b/nixpkgs/pkgs/applications/video/linuxstopmotion/default.nix @@ -0,0 +1,28 @@ +{ mkDerivation, lib, fetchgit, pkg-config, qmake, qtbase, qttools, qtmultimedia, libvorbis, libtar, libxml2 }: + +mkDerivation rec { + version = "0.8.5"; + pname = "linuxstopmotion"; + + src = fetchgit { + url = "https://git.code.sf.net/p/linuxstopmotion/code"; + rev = version; + sha256 = "1612lkwsfzc59wvdj2zbj5cwsyw66bwn31jrzjrxvygxdh4ab069"; + }; + + nativeBuildInputs = [ qmake pkg-config ]; + buildInputs = [ qtbase qttools qtmultimedia libvorbis libtar libxml2 ]; + + postPatch = '' + substituteInPlace stopmotion.pro --replace '$$[QT_INSTALL_BINS]' '${lib.getDev qttools}/bin' + ''; + + meta = with lib; { + description = "Create stop-motion animation movies"; + homepage = "http://linuxstopmotion.org/"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = [ maintainers.bjornfor ]; + mainProgram = "stopmotion"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix new file mode 100644 index 000000000000..d75adb88f359 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-appimage.nix @@ -0,0 +1,58 @@ +{ lib +, appimageTools +, fetchurl +, makeWrapper +, gtk3 +, gsettings-desktop-schemas +, pname +, version +, hash +, metaCommon ? { } +}: + +let + pname = "losslesscut"; + + src = fetchurl { + url = "https://github.com/mifi/lossless-cut/releases/download/v${version}/LosslessCut-linux-x86_64.AppImage"; + inherit hash; + }; + + extracted = appimageTools.extractType2 { + inherit pname version src; + }; +in +(appimageTools.wrapType2 { + inherit pname version src; + + profile = '' + export LC_ALL=C.UTF-8 + ''; + + extraPkgs = ps: appimageTools.defaultFhsEnvArgs.multiPkgs ps; + + extraInstallCommands = '' + mv $out/bin/{${pname}-${version},losslesscut} + ( + mkdir -p $out/share + cd ${extracted}/usr + find share -mindepth 1 -type d -exec mkdir -p $out/{} \; + find share -mindepth 1 -type f,l -exec ln -s $PWD/{} $out/{} \; + ) + ln -s ${extracted}/losslesscut.png $out/share/icons/losslesscut.png + mkdir $out/share/applications + cp ${extracted}/losslesscut.desktop $out/share/applications + substituteInPlace $out/share/applications/losslesscut.desktop \ + --replace AppRun losslesscut + source "${makeWrapper}/nix-support/setup-hook" + wrapProgram "$out/bin/losslesscut" \ + --add-flags "--disable-seccomp-filter-sandbox" + ''; + + meta = metaCommon // { + platforms = [ "x86_64-linux" ]; + mainProgram = "losslesscut"; + }; +}) // { + inherit pname version; +} diff --git a/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix new file mode 100644 index 000000000000..9b3a91b9d029 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-dmg.nix @@ -0,0 +1,37 @@ +{ lib +, stdenvNoCC +, fetchurl +, undmg +, pname +, version +, hash +, isAarch64 +, metaCommon ? { } +}: + +let + pname = "losslesscut"; + src = fetchurl { + url = "https://github.com/mifi/lossless-cut/releases/download/v${version}/LosslessCut-mac-${if isAarch64 then "arm64" else "x64"}.dmg"; + inherit hash; + }; +in +stdenvNoCC.mkDerivation { + inherit pname version src; + + nativeBuildInputs = [ undmg ]; + + sourceRoot = "LosslessCut.app"; + + installPhase = '' + mkdir -p "$out/Applications/LosslessCut.app" + cp -R . "$out/Applications/LosslessCut.app" + mkdir -p "$out/bin" + ln -s "$out/Applications/LosslessCut.app/Contents/MacOS/LosslessCut" "$out/bin/losslesscut" + ''; + + meta = metaCommon // (with lib; { + platforms = if isAarch64 then [ "aarch64-darwin" ] else platforms.darwin; + mainProgram = "losslesscut"; + }); +} diff --git a/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-windows.nix b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-windows.nix new file mode 100644 index 000000000000..ddaf87380644 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/losslesscut-bin/build-from-windows.nix @@ -0,0 +1,37 @@ +{ lib +, stdenvNoCC +, fetchurl +, p7zip +, pname +, version +, hash +, metaCommon ? { } +}: + +stdenvNoCC.mkDerivation { + inherit pname version; + + src = fetchurl { + url = "https://github.com/mifi/lossless-cut/releases/download/v${version}/LosslessCut-win-x64.7z"; + inherit hash; + }; + + nativeBuildInputs = [ p7zip ]; + + unpackPhase = '' + 7z x $src -oLosslessCut-win-x64 + ''; + + sourceRoot = "LosslessCut-win-x64"; + + installPhase = '' + mkdir -p $out/bin $out/libexec + (cd .. && mv LosslessCut-win-x64 $out/libexec) + ln -s "$out/libexec/LosslessCut-win-x64/LosslessCut.exe" "$out/bin/LosslessCut.exe" + ''; + + meta = metaCommon // (with lib; { + platforms = platforms.windows; + mainProgram = "LosslessCut.exe"; + }); +} diff --git a/nixpkgs/pkgs/applications/video/losslesscut-bin/default.nix b/nixpkgs/pkgs/applications/video/losslesscut-bin/default.nix new file mode 100644 index 000000000000..5fe8c8785a81 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/losslesscut-bin/default.nix @@ -0,0 +1,55 @@ +{ lib +, stdenv +, callPackage +, buildPackages +}: + +let + pname = "losslesscut"; + version = "3.58.0"; + metaCommon = with lib; { + description = "The swiss army knife of lossless video/audio editing"; + homepage = "https://mifi.no/losslesscut/"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ ShamrockLee ]; + mainProgram = "losslesscut"; + }; + x86_64-appimage = callPackage ./build-from-appimage.nix { + inherit pname version metaCommon; + hash = "sha256-wmOdW5LdGLs6Wrt/VBlbC1ScFZBmd5gVQaj/cYADnWc="; + inherit (buildPackages) makeWrapper; + }; + x86_64-dmg = callPackage ./build-from-dmg.nix { + inherit pname version metaCommon; + hash = "sha256-ZNUkzxpFTmsFcdC4oJWDxvqunpaBKz7Fnmrsa4W12Bg="; + isAarch64 = false; + }; + aarch64-dmg = callPackage ./build-from-dmg.nix { + inherit pname version metaCommon; + hash = "sha256-PpQF31qsn9TOIRVzOdDoLUqti+m1uRpBQrrqKtxFleE="; + isAarch64 = true; + }; + x86_64-windows = callPackage ./build-from-windows.nix { + inherit pname version metaCommon; + hash = "sha256-AgWvLU9m2q7fxZYXgHGMgEj1WLP5XzERq7tWcin2/30="; + }; +in +( + if stdenv.hostPlatform.system == "aarch64-darwin" then aarch64-dmg + else if stdenv.hostPlatform.isDarwin then x86_64-dmg + else if stdenv.hostPlatform.isCygwin then x86_64-windows + else x86_64-appimage +).overrideAttrs + (oldAttrs: { + passthru = (oldAttrs.passthru or { }) // { + inherit x86_64-appimage x86_64-dmg aarch64-dmg x86_64-windows; + }; + meta = oldAttrs.meta // { + platforms = lib.unique ( + x86_64-appimage.meta.platforms + ++ x86_64-dmg.meta.platforms + ++ aarch64-dmg.meta.platforms + ++ x86_64-windows.meta.platforms + ); + }; + }) diff --git a/nixpkgs/pkgs/applications/video/lxdvdrip/default.nix b/nixpkgs/pkgs/applications/video/lxdvdrip/default.nix new file mode 100644 index 000000000000..6b9c8ef2fd14 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/lxdvdrip/default.nix @@ -0,0 +1,31 @@ +{ lib, stdenv, fetchurl, libdvdread }: + +stdenv.mkDerivation rec { + pname = "lxdvdrip"; + version = "1.77"; + + src = fetchurl { + url = "mirror://sourceforge/lxdvdrip/lxdvdrip-${version}.tgz"; + hash = "sha256-OzHrscftsCmJvSw7bb/Z2WDP322VCuQDY58dW2OqxB8="; + }; + + postPatch = '' + sed -i -e s,/usr/local,$out, -e s,/etc,$out/etc,g Makefile + sed -i -e s,/usr/local,$out, mbuffer/Makefile + makeFlags="$makeFlags PREFIX=$out" + ''; + + preInstall = '' + mkdir -p $out/man/man1 $out/bin $out/share $out/etc + ''; + + buildInputs = [ libdvdread ]; + + meta = { + broken = (stdenv.isLinux && stdenv.isAarch64); + description = "Command line tool to make a copy from a video DVD for private use"; + homepage = "https://sourceforge.net/projects/lxdvdrip"; + license = lib.licenses.gpl2; + platforms = lib.platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/makemkv/default.nix b/nixpkgs/pkgs/applications/video/makemkv/default.nix new file mode 100644 index 000000000000..dc016fda0a99 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/makemkv/default.nix @@ -0,0 +1,92 @@ +{ lib +, mkDerivation +, fetchurl +, autoPatchelfHook +, pkg-config +, curl +, ffmpeg +, openssl +, qtbase +, zlib + +, withJava ? true +, jre_headless +}: + +let + version = "1.17.6"; + # Using two URLs as the first one will break as soon as a new version is released + src_bin = fetchurl { + urls = [ + "http://www.makemkv.com/download/makemkv-bin-${version}.tar.gz" + "http://www.makemkv.com/download/old/makemkv-bin-${version}.tar.gz" + ]; + sha256 = "KHZGAFAp93HTZs8OT76xf88QM0UtlVVH3q57CZm07Rs="; + }; + src_oss = fetchurl { + urls = [ + "http://www.makemkv.com/download/makemkv-oss-${version}.tar.gz" + "http://www.makemkv.com/download/old/makemkv-oss-${version}.tar.gz" + ]; + sha256 = "2dtNdyv0+QYWQrfrIu5RQKSN4scSWKuLFNlJZXpxDUM="; + }; + +in mkDerivation { + pname = "makemkv"; + inherit version; + + srcs = [ src_bin src_oss ]; + + sourceRoot = "makemkv-oss-${version}"; + + patches = [ ./r13y.patch ]; + + enableParallelBuilding = true; + + nativeBuildInputs = [ autoPatchelfHook pkg-config ]; + + buildInputs = [ ffmpeg openssl qtbase zlib ]; + + runtimeDependencies = [ (lib.getLib curl) ]; + + qtWrapperArgs = + let + binPath = lib.makeBinPath [ jre_headless ]; + in lib.optionals withJava [ + "--prefix PATH : ${binPath}" + ]; + + installPhase = '' + runHook preInstall + + install -Dm555 -t $out/bin out/makemkv out/mmccextr out/mmgplsrv ../makemkv-bin-${version}/bin/amd64/makemkvcon + install -D -t $out/lib out/lib{driveio,makemkv,mmbd}.so.* + install -D -t $out/share/MakeMKV ../makemkv-bin-${version}/src/share/* + install -Dm444 -t $out/share/applications ../makemkv-oss-${version}/makemkvgui/share/makemkv.desktop + install -Dm444 -t $out/share/icons/hicolor/16x16/apps ../makemkv-oss-${version}/makemkvgui/share/icons/16x16/* + install -Dm444 -t $out/share/icons/hicolor/32x32/apps ../makemkv-oss-${version}/makemkvgui/share/icons/32x32/* + install -Dm444 -t $out/share/icons/hicolor/64x64/apps ../makemkv-oss-${version}/makemkvgui/share/icons/64x64/* + install -Dm444 -t $out/share/icons/hicolor/128x128/apps ../makemkv-oss-${version}/makemkvgui/share/icons/128x128/* + install -Dm444 -t $out/share/icons/hicolor/256x256/apps ../makemkv-oss-${version}/makemkvgui/share/icons/256x256/* + + runHook postInstall + ''; + + meta = with lib; { + description = "Convert blu-ray and dvd to mkv"; + longDescription = '' + makemkv is a one-click QT application that transcodes an encrypted + blu-ray or DVD disc into a more portable set of mkv files, preserving + subtitles, chapter marks, all video and audio tracks. + + Program is time-limited -- it will stop functioning after 60 days. You + can always download the latest version from makemkv.com that will reset the + expiration date. + ''; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + license = [ licenses.unfree licenses.lgpl21 ]; + homepage = "http://makemkv.com"; + platforms = [ "x86_64-linux" ]; + maintainers = with maintainers; [ titanous ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/makemkv/r13y.patch b/nixpkgs/pkgs/applications/video/makemkv/r13y.patch new file mode 100644 index 000000000000..fa980611997b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/makemkv/r13y.patch @@ -0,0 +1,13 @@ +diff --git a/Makefile.in b/Makefile.in +index 61c47fc..e08ffac 100644 +--- a/Makefile.in ++++ b/Makefile.in +@@ -27,7 +27,7 @@ INSTALL=@INSTALL@ + OBJCOPY=@OBJCOPY@ + LD=@LD@ + BUILDINFO_ARCH_NAME=$(shell $(GCC) -dumpmachine) +-BUILDINFO_BUILD_DATE=$(shell date) ++BUILDINFO_BUILD_DATE=$(shell date -d @${SOURCE_DATE_EPOCH}) + + top_srcdir ?= . + INCF=-I$(top_srcdir)/ diff --git a/nixpkgs/pkgs/applications/video/manim/default.nix b/nixpkgs/pkgs/applications/video/manim/default.nix new file mode 100644 index 000000000000..2768dadad826 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/manim/default.nix @@ -0,0 +1,145 @@ +{ lib +, fetchFromGitHub + +, cairo +, ffmpeg +, texliveInfraOnly + +, python3 +}: + +let + # According to ManimCommunity documentation manim uses tex-packages packaged + # in a custom distribution called "manim-latex", + # + # https://community.chocolatey.org/packages/manim-latex#files + # + # which includes another cutom distribution called tinytex, for which the + # package list can be found at + # + # https://github.com/yihui/tinytex/blob/master/tools/pkgs-custom.txt + # + # these two combined add up to: + manim-tinytex = texliveInfraOnly.withPackages (ps: with ps; [ + + # tinytex + amsfonts amsmath atbegshi atveryend auxhook babel bibtex + bigintcalc bitset booktabs cm dehyph dvipdfmx dvips ec epstopdf-pkg etex + etexcmds etoolbox euenc everyshi fancyvrb filehook firstaid float fontspec + framed geometry gettitlestring glyphlist graphics graphics-cfg graphics-def + grffile helvetic hycolor hyperref hyph-utf8 iftex inconsolata infwarerr + intcalc knuth-lib kvdefinekeys kvoptions kvsetkeys l3backend l3kernel + l3packages latex latex-amsmath-dev latex-bin latex-fonts latex-tools-dev + latexconfig latexmk letltxmacro lm lm-math ltxcmds lua-alt-getopt luahbtex + lualatex-math lualibs luaotfload luatex mdwtools metafont mfware natbib + pdfescape pdftex pdftexcmds plain psnfss refcount rerunfilecheck stringenc + tex tex-ini-files times tipa tools unicode-data unicode-math uniquecounter + url xcolor xetex xetexconfig xkeyval xunicode zapfding + + # manim-latex + standalone everysel preview doublestroke ms setspace rsfs relsize ragged2e + fundus-calligra microtype wasysym physics dvisvgm jknapltx wasy cm-super + babel-english gnu-freefont mathastext cbfonts-fd + ]); + + python = python3; + +in python.pkgs.buildPythonApplication rec { + pname = "manim"; + pyproject = true; + version = "0.18.0"; + disabled = python3.pythonOlder "3.8"; + + src = fetchFromGitHub { + owner = "ManimCommunity"; + repo = "manim"; + rev = "refs/tags/v${version}"; + hash = "sha256-TI7O0b1JvUZAxTj6XfpAJKhbGqrGnhcrE9eRJUVx4GM="; + }; + + nativeBuildInputs = with python.pkgs; [ + poetry-core + pythonRelaxDepsHook + ]; + + pythonRelaxDeps = [ + "cloup" + "pillow" + "skia-pathops" + ]; + + patches = [ + ./pytest-report-header.patch + ]; + + postPatch = '' + substituteInPlace pyproject.toml \ + --replace "--no-cov-on-fail --cov=manim --cov-report xml --cov-report term" "" + ''; + + buildInputs = [ cairo ]; + + propagatedBuildInputs = with python.pkgs; [ + click + click-default-group + cloup + colour + grpcio + grpcio-tools + importlib-metadata + isosurfaces + jupyterlab + manimpango + mapbox-earcut + moderngl + moderngl-window + networkx + numpy + pillow + pycairo + pydub + pygments + pysrt + rich + scipy + screeninfo + skia-pathops + srt + svgelements + tqdm + watchdog + ]; + + makeWrapperArgs = [ + "--prefix" "PATH" ":" (lib.makeBinPath [ + ffmpeg + manim-tinytex + ]) + ]; + + nativeCheckInputs = [ + ffmpeg + manim-tinytex + ] ++ (with python.pkgs; [ + pytest-xdist + pytestCheckHook + ]); + + # about 55 of ~600 tests failing mostly due to demand for display + disabledTests = import ./failing_tests.nix; + + pythonImportsCheck = [ "manim" ]; + + meta = with lib; { + description = "Animation engine for explanatory math videos - Community version"; + longDescription = '' + Manim is an animation engine for explanatory math videos. It's used to + create precise animations programmatically, as seen in the videos of + 3Blue1Brown on YouTube. This is the community maintained version of + manim. + ''; + homepage = "https://github.com/ManimCommunity/manim"; + license = licenses.mit; + maintainers = with maintainers; [ friedelino ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/manim/failing_tests.nix b/nixpkgs/pkgs/applications/video/manim/failing_tests.nix new file mode 100644 index 000000000000..1bffaf6e7405 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/manim/failing_tests.nix @@ -0,0 +1,77 @@ +[ + # reason for failure: tests try to open display + "test_background_color" + "test_scene_add_remove" + "test_Circle" + "test_wait_skip" + "test_basic_scene_with_default_values" + "test_dry_run_with_png_format" + "test_dry_run_with_png_format_skipped_animations" + "test_FixedMobjects3D" + "test_basic_scene_l_flag" + "test_n_flag" + "test_s_flag_opengl_renderer" + "test_s_flag_no_animations" + "test_image_output_for_static_scene" + "test_no_image_output_with_interactive_embed" + "test_no_default_image_output_with_non_static_scene" + "test_image_output_for_static_scene_with_write_to_movie" + "test_s_flag" + "test_r_flag" + "test_play_skip" + "test_write_to_movie_disables_window" + "test_a_flag" + "test_pixel_coords_to_space_coords" + "test_t_values" + "test_custom_folders" + "test_t_values[15]" + "test_t_values[30]" + "test_t_values[60]" + "test_dash_as_filename" + "test_images_are_created_when_png_format_set_for_opengl" + "test_t_values_with_skip_animations" + "test_static_wait_detection" + "test_non_static_wait_detection" + "test_frozen_frame" + "test_gif_format_output" + "test_animate_with_changed_custom_attribute" + "test_images_are_zero_padded_when_zero_pad_set_for_opengl" + "test_mp4_format_output" + "test_videos_not_created_when_png_format_set" + "test_images_are_created_when_png_format_set" + "test_images_are_zero_padded_when_zero_pad_set" + "test_webm_format_output" + "test_default_format_output_for_transparent_flag" + "test_mov_can_be_set_as_output_format" + "test_force_window_opengl_render_with_format" + "test_get_frame_with_preview_disabled" + "test_get_frame_with_preview_enabled" + + # reason for failure: tests try to reach network + "test_logging_to_file" + "test_plugin_function_like" + "test_plugin_no_all" + "test_plugin_with_all" + + # failing with: + # E AssertionError: + # E Not equal to tolerance rtol=1e-07, atol=1.01 + # E Frame no -1. You can use --show_diff to visually show the difference. + # E Mismatched elements: 18525 / 1639680 (1.13%) + # E Max absolute difference: 255 + # E Max relative difference: 255. + "test_Text2Color" + "test_PointCloudDot" + "test_Torus" + + # failing with: + # TypeError: __init__() got an unexpected keyword argument 'msg' - maybe you meant pytest.mark.skipif? + "test_force_window_opengl_render_with_movies" + + # mismatching expecation on the new commandline + "test_manim_new_command" + + # This tests checks if the manim executable is a python script. In our case it is not. + # It is a wrapper shell script instead. + "test_manim_checkhealth_subcommand" +] diff --git a/nixpkgs/pkgs/applications/video/manim/pytest-report-header.patch b/nixpkgs/pkgs/applications/video/manim/pytest-report-header.patch new file mode 100644 index 000000000000..7aa87d373e50 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/manim/pytest-report-header.patch @@ -0,0 +1,22 @@ +diff --git a/conftest.py b/conftest.py +index dacb730a..149c6702 100644 +--- a/conftest.py ++++ b/conftest.py +@@ -33,17 +33,3 @@ def temp_media_dir(tmpdir, monkeypatch, request): + with tempconfig({"media_dir": str(tmpdir)}): + assert config.media_dir == str(tmpdir) + yield tmpdir +- +- +-def pytest_report_header(config): +- ctx = moderngl.create_standalone_context() +- info = ctx.info +- ctx.release() +- return ( +- f"\nCairo Version: {cairo.cairo_version()}", +- "\nOpenGL information", +- "------------------", +- f"vendor: {info['GL_VENDOR'].strip()}", +- f"renderer: {info['GL_RENDERER'].strip()}", +- f"version: {info['GL_VERSION'].strip()}\n", +- ) diff --git a/nixpkgs/pkgs/applications/video/mapmap/default.nix b/nixpkgs/pkgs/applications/video/mapmap/default.nix new file mode 100644 index 000000000000..39904f829159 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mapmap/default.nix @@ -0,0 +1,79 @@ +{ lib, stdenv +, fetchFromGitHub +, fetchpatch +, qttools +, qtmultimedia +, liblo +, gst_all_1 +, qmake +, pkg-config +, wrapQtAppsHook +}: + +with stdenv; + +mkDerivation rec { + + version = "0.6.2"; + pname = "mapmap"; + + src = fetchFromGitHub { + owner = "mapmapteam"; + repo = "mapmap"; + rev = version; + sha256 = "1pyb3vz19lbfz2hrfqm9a29vnajw1bigdrblbmcy32imkf4isfvm"; + }; + + nativeBuildInputs = [ + qmake + pkg-config + wrapQtAppsHook + ]; + + buildInputs = [ + qttools + qtmultimedia + liblo + gst_all_1.gstreamer + gst_all_1.gstreamermm + gst_all_1.gst-libav + gst_all_1.gst-vaapi + ]; + + patches = [ + (fetchpatch { + name = "message-handler-segfault.patch"; + url = "https://github.com/mapmapteam/mapmap/pull/519/commits/22eeee59ba7de6de7b73ecec3b0ea93bdc7f04e8.patch"; + sha256 = "0is905a4lf9vvl5b1n4ky6shrnbs5kz9mlwfk78hrl4zabfmcl5l"; + }) + # fix build with libsForQt515 + (fetchpatch { + url = "https://github.com/mapmapteam/mapmap/pull/518/commits/ac49acc1e2ec839832b86838e93a8c13030affeb.patch"; + sha256 = "sha256-tSLbyIDv5mSejnw9oru5KLAyQqjgJLLREKQomEUcGt8="; + }) + ]; + + installPhase = '' + mkdir -p $out/bin + cp mapmap $out/bin/mapmap + mkdir -p $out/share/applications/ + sed 's|Icon=/usr/share/icons/hicolor/scalable/apps/mapmap.svg|Icon=mapmap|g' resources/texts/mapmap.desktop > $out/share/applications/mapmap.desktop + mkdir -p $out/share/icons/hicolor/scalable/apps/ + cp resources/images/logo/mapmap.* $out/share/icons/hicolor/scalable/apps/ + ''; + + # RPATH in /tmp hack + # preFixup = '' + # rm -r $NIX_BUILD_TOP/__nix_qt5__ + # ''; + + meta = with lib; { + description = "Open source video mapping software"; + homepage = "https://github.com/mapmapteam/mapmap"; + license = licenses.gpl3; + maintainers = [ maintainers.erictapen ]; + platforms = platforms.linux; + mainProgram = "mapmap"; + }; + +} diff --git a/nixpkgs/pkgs/applications/video/media-downloader/default.nix b/nixpkgs/pkgs/applications/video/media-downloader/default.nix new file mode 100644 index 000000000000..b0a40aaa8a34 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/media-downloader/default.nix @@ -0,0 +1,50 @@ +{ aria2 +, cmake +, fetchFromGitHub +, ffmpeg +, lib +, python3 +, qtbase +, stdenv +, wrapQtAppsHook +, yt-dlp +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "media-downloader"; + version = "4.3.1"; + + src = fetchFromGitHub { + owner = "mhogomchungu"; + repo = "media-downloader"; + rev = finalAttrs.version; + hash = "sha256-+vPGfPncb8f5c9OiBmpMvvDh3X6ZMHPbyngcDfrP9qQ="; + }; + + nativeBuildInputs = [ + cmake + wrapQtAppsHook + ]; + + buildInputs = [ + qtbase + ]; + + qtWrapperArgs = [ + "--prefix PATH : ${lib.makeBinPath [ + aria2 + ffmpeg + python3 + yt-dlp + ]}" + ]; + + meta = { + description = "A Qt/C++ GUI front end for yt-dlp and others"; + homepage = "https://github.com/mhogomchungu/media-downloader"; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ zendo ]; + platforms = lib.platforms.linux; + mainProgram = "media-downloader"; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/mediathekview/default.nix b/nixpkgs/pkgs/applications/video/mediathekview/default.nix new file mode 100644 index 000000000000..6db16f1aec06 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mediathekview/default.nix @@ -0,0 +1,49 @@ +{ lib, stdenv, fetchurl, makeWrapper, libglvnd, libnotify, jre, zip }: + +stdenv.mkDerivation rec { + version = "14.0.0"; + pname = "mediathekview"; + src = fetchurl { + url = "https://download.mediathekview.de/stabil/MediathekView-${version}-linux.tar.gz"; + sha256 = "sha256-vr0yqKVRodtXalHEIsm5gdEp9wPU9U5nnYhMk7IiPF4="; + }; + + + nativeBuildInputs = [ makeWrapper zip ]; + + installPhase = + let + libraryPath = lib.strings.makeLibraryPath [ libglvnd libnotify ]; + in + '' + runHook preInstall + + mkdir -p $out/{bin,lib} + + install -m644 MediathekView.jar $out/lib + + makeWrapper ${jre}/bin/java $out/bin/mediathek \ + --add-flags "-jar $out/lib/MediathekView.jar" \ + --suffix LD_LIBRARY_PATH : "${libraryPath}" + + makeWrapper ${jre}/bin/java $out/bin/MediathekView \ + --add-flags "-jar $out/lib/MediathekView.jar" \ + --suffix LD_LIBRARY_PATH : "${libraryPath}" + + makeWrapper ${jre}/bin/java $out/bin/MediathekView_ipv4 \ + --add-flags "-Djava.net.preferIPv4Stack=true -jar $out/lib/MediathekView.jar" \ + --suffix LD_LIBRARY_PATH : "${libraryPath}" + + runHook postInstall + ''; + + meta = with lib; { + description = "Offers access to the Mediathek of different tv stations (ARD, ZDF, Arte, etc.)"; + homepage = "https://mediathekview.de/"; + sourceProvenance = with sourceTypes; [ binaryBytecode ]; + license = licenses.gpl3Plus; + mainProgram = "mediathek"; + maintainers = with maintainers; [ moredread ]; + platforms = platforms.all; + }; +} diff --git a/nixpkgs/pkgs/applications/video/memento/default.nix b/nixpkgs/pkgs/applications/video/memento/default.nix new file mode 100644 index 000000000000..cee74556eaab --- /dev/null +++ b/nixpkgs/pkgs/applications/video/memento/default.nix @@ -0,0 +1,64 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, qtbase +, qtx11extras ? null # qt5 only +, wrapQtAppsHook + +# before that => zeal +, sqlite +, json_c +, mecab +, libzip +, mpv +, yt-dlp +# optional +, makeWrapper}: + +let + isQt5 = lib.versions.major qtbase.version == "5"; + +in +stdenv.mkDerivation (finalAttrs: { + pname = "memento"; + version = "1.2.2"; + + src = fetchFromGitHub { + owner = "ripose-jp"; + repo = "Memento"; + rev = "v${finalAttrs.version}"; + hash = "sha256-55VvT7pHN0/HqxM4vMDQDgUwkVmO/8aOEOye8jcFzgI="; + }; + + nativeBuildInputs = [ + cmake + makeWrapper + wrapQtAppsHook + ]; + + buildInputs = [ + qtbase + sqlite + json_c + libzip + mecab + ] ++ lib.optionals isQt5 [ qtx11extras ]; + + propagatedBuildInputs = [ mpv ]; + + preFixup = '' + wrapProgram "$out/bin/memento" \ + --prefix PATH : "${yt-dlp}/bin" \ + ''; + + meta = with lib; { + description = "An mpv-based video player for studying Japanese"; + homepage = "https://ripose-jp.github.io/Memento/"; + license = licenses.gpl2; + maintainers = with maintainers; [ teto ]; + platforms = platforms.linux; + mainProgram = "memento"; + }; +}) + diff --git a/nixpkgs/pkgs/applications/video/minitube/default.nix b/nixpkgs/pkgs/applications/video/minitube/default.nix new file mode 100644 index 000000000000..3caa2b7fc56c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/minitube/default.nix @@ -0,0 +1,44 @@ +{ mkDerivation, lib, fetchFromGitHub, fetchpatch, phonon, phonon-backend-vlc, qtbase, qmake +, qtdeclarative, qttools, qtx11extras, mpv + +# "Free" key generated by pasqui23 +, withAPIKey ? "AIzaSyBQvZXseEVvgu5Ega_DI-AIJ55v0OsHmVY" }: + +mkDerivation rec { + pname = "minitube"; + version = "3.9.3"; + + src = fetchFromGitHub { + sha256 = "sha256-ROqROQsV8ddrxYT5mMdkf6rCgCoGr1jpxQ1ohcoEaQs="; + rev = version; + repo = "minitube"; + owner = "flaviotordini"; + fetchSubmodules = true; + }; + + patches = [ + # Taken from FreeBSD; already merged upstream in the media submodule + # (https://github.com/flaviotordini/media/commit/f6b7020f273e1fc06e6e204fab37a7c8edaa857a) + ./lib_media_src_mpv_mpvwidget.patch + ]; + + nativeBuildInputs = [ qmake qttools ]; + + buildInputs = [ phonon phonon-backend-vlc qtbase qtdeclarative qtx11extras mpv ]; + + qmakeFlags = [ "DEFINES+=APP_GOOGLE_API_KEY=${withAPIKey}" ]; + + meta = with lib; { + description = "Stand-alone YouTube video player"; + longDescription = '' + Watch YouTube videos in a new way: you type a keyword, Minitube gives + you an endless video stream. Minitube is not about cloning the YouTube + website, it aims to create a new TV-like experience. + ''; + homepage = "https://flavio.tordini.org/minitube"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ ]; + mainProgram = "minitube"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/minitube/lib_media_src_mpv_mpvwidget.patch b/nixpkgs/pkgs/applications/video/minitube/lib_media_src_mpv_mpvwidget.patch new file mode 100644 index 000000000000..9beff68a0ec4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/minitube/lib_media_src_mpv_mpvwidget.patch @@ -0,0 +1,16 @@ +diff -Nur a/lib/media/src/mpv/mpvwidget.cpp b/lib/media/src/mpv/mpvwidget.cpp +--- a/lib/media/src/mpv/mpvwidget.cpp ++++ b/lib/media/src/mpv/mpvwidget.cpp +@@ -30,7 +30,11 @@ + qDebug() << "initializeGL" << nativeParent; + if (nativeParent == nullptr) qFatal("No native parent"); + +- mpv_opengl_init_params gl_init_params{get_proc_address, this, nullptr}; ++ #if MPV_CLIENT_API_VERSION < MPV_MAKE_VERSION(2,0) ++ mpv_opengl_init_params gl_init_params{get_proc_address, this, nullptr}; ++ #else ++ mpv_opengl_init_params gl_init_params{get_proc_address, this}; ++ #endif + mpv_render_param params[]{{MPV_RENDER_PARAM_API_TYPE, (void *)MPV_RENDER_API_TYPE_OPENGL}, + {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params}, + {MPV_RENDER_PARAM_INVALID, nullptr}, diff --git a/nixpkgs/pkgs/applications/video/mirakurun/default.nix b/nixpkgs/pkgs/applications/video/mirakurun/default.nix new file mode 100644 index 000000000000..3d8034521c89 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mirakurun/default.nix @@ -0,0 +1,75 @@ +{ lib +, stdenv +, bash +, buildNpmPackage +, fetchFromGitHub +, installShellFiles +, makeWrapper +, nodejs +, substituteAll +, v4l-utils +, which +}: + +buildNpmPackage rec { + pname = "mirakurun"; + version = "3.9.0-rc.4"; + + src = fetchFromGitHub { + owner = "Chinachu"; + repo = "Mirakurun"; + rev = version; + sha256 = "sha256-Qg+wET5H9t3Mv2Hv0iT/C85/SEaQ+BHSBL3JjMQW5+Q="; + }; + + patches = [ + # NOTE: fixes for hardcoded paths and assumptions about filesystem + # permissions + ./nix-filesystem.patch + ]; + + npmDepsHash = "sha256-e7m7xb7p1SBzLAyQ82TTR/qLXv4lRm37x0JJPWYYGvI="; + + nativeBuildInputs = [ installShellFiles makeWrapper ]; + + # workaround for https://github.com/webpack/webpack/issues/14532 + NODE_OPTIONS = "--openssl-legacy-provider"; + + postInstall = + let + runtimeDeps = [ + bash + nodejs + which + ] ++ lib.optionals stdenv.isLinux [ v4l-utils ]; + crc32Patch = substituteAll { + src = ./fix-musl-detection.patch; + isMusl = if stdenv.hostPlatform.isMusl then "true" else "false"; + }; + in + '' + sed 's/@DESCRIPTION@/${meta.description}/g' ${./mirakurun.1} > mirakurun.1 + installManPage mirakurun.1 + + wrapProgram $out/bin/mirakurun-epgdump \ + --prefix PATH : ${lib.makeBinPath runtimeDeps} + + # XXX: The original mirakurun command uses PM2 to manage the Mirakurun + # server. However, we invoke the server directly and let systemd + # manage it to avoid complication. This is okay since no features + # unique to PM2 is currently being used. + makeWrapper ${nodejs}/bin/npm $out/bin/mirakurun \ + --chdir "$out/lib/node_modules/mirakurun" \ + --prefix PATH : ${lib.makeBinPath runtimeDeps} + + pushd $out/lib/node_modules/mirakurun/node_modules/@node-rs/crc32 + patch -p3 < ${crc32Patch} + popd + ''; + + meta = with lib; { + description = "Resource manager for TV tuners."; + license = licenses.asl20; + maintainers = with maintainers; [ midchildan ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mirakurun/fix-musl-detection.patch b/nixpkgs/pkgs/applications/video/mirakurun/fix-musl-detection.patch new file mode 100644 index 000000000000..6f27b2fe6c7a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mirakurun/fix-musl-detection.patch @@ -0,0 +1,29 @@ +diff --git a/packages/crc32/index.js b/packages/crc32/index.js +index cdc7519..7b05930 100644 +--- a/packages/crc32/index.js ++++ b/packages/crc32/index.js +@@ -5,7 +5,7 @@ const { platform, arch } = process + + let nativeBinding = null + let localFileExisted = false +-let isMusl = false ++let isMusl = @isMusl@ + let loadError = null + + switch (platform) { +@@ -114,7 +114,6 @@ switch (platform) { + case 'linux': + switch (arch) { + case 'x64': +- isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') + if (isMusl) { + localFileExisted = existsSync(join(__dirname, 'crc32.linux-x64-musl.node')) + try { +@@ -140,7 +139,6 @@ switch (platform) { + } + break + case 'arm64': +- isMusl = readFileSync('/usr/bin/ldd', 'utf8').includes('musl') + if (isMusl) { + localFileExisted = existsSync(join(__dirname, 'crc32.linux-arm64-musl.node')) + try { diff --git a/nixpkgs/pkgs/applications/video/mirakurun/mirakurun.1 b/nixpkgs/pkgs/applications/video/mirakurun/mirakurun.1 new file mode 100644 index 000000000000..5d65b915ed40 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mirakurun/mirakurun.1 @@ -0,0 +1,44 @@ +.Dd $Mdocdate$ +.Dt MIRAKURUN 1 +.Os +.Sh NAME +.Nm mirakurun +.Nd @DESCRIPTION@ +.Sh SYNOPSIS +.Nm +.Bk -words +.Op Ar command Op Ar args +.Ek +.Sh DESCRIPTION +.Nm +is a wrapper command for Mirakurun provided by Nix. It's actually a thin +wrapper around the +.Xr npm 1 +command line tool which you can use to invoke npm commands from the Mirakurun +project directory. The command line arguments are simply passed as-is to +.Xr npm 1 . +.Pp +On NixOS, it is strongly recommended that you enable the mirakurun module +instead of invoking this command directly to launch Mirakurun. On other +platforms, run +.Pp +.Dl $ mirakurun start +.Pp +to start Mirakurun. +.Sh FILES +.Bl -tag -width Ds -compact +.It Pa /etc/mirakurun +.Nm +configuration directory. +.El +.Sh EXAMPLES +Start Mirakurun. +.Pp +.Dl $ mirakurun start +.Pp +Start Mirakurun in development mode. +.Pp +.Dl $ mirakurun run debug +.Pp +.Sh SEE ALSO +.Xr npm 1 diff --git a/nixpkgs/pkgs/applications/video/mirakurun/nix-filesystem.patch b/nixpkgs/pkgs/applications/video/mirakurun/nix-filesystem.patch new file mode 100644 index 000000000000..f7f06e2a6dba --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mirakurun/nix-filesystem.patch @@ -0,0 +1,46 @@ +diff --git a/processes.json b/processes.json +index b54d404..a40dfab 100644 +--- a/processes.json ++++ b/processes.json +@@ -4,10 +4,10 @@ + "name": "mirakurun-server", + "script": "lib/server.js", + "node_args" : "-r source-map-support/register", +- "error_file": "/usr/local/var/log/mirakurun.stderr.log", +- "out_file": "/usr/local/var/log/mirakurun.stdout.log", ++ "error_file": "/var/log/mirakurun.stderr.log", ++ "out_file": "/var/log/mirakurun.stdout.log", + "merge_logs": true, +- "pid_file": "/usr/local/var/run/mirakurun.pid", ++ "pid_file": "/var/run/mirakurun.pid", + "exec_mode": "fork", + "autorestart": true, + "env": { +diff --git a/src/Mirakurun/config.ts b/src/Mirakurun/config.ts +index 0b8a1a2..ff02fda 100644 +--- a/src/Mirakurun/config.ts ++++ b/src/Mirakurun/config.ts +@@ -146,6 +146,7 @@ export function loadServer(): Server { + fs.copyFileSync("config/server.win32.yml", path); + } else { + fs.copyFileSync("config/server.yml", path); ++ fs.chmodSync(path, 0o644); + } + } catch (e) { + log.fatal("failed to copy server config to `%s`", path); +@@ -300,6 +301,7 @@ export function loadTuners(): Tuner[] { + fs.copyFileSync("config/tuners.win32.yml", path); + } else { + fs.copyFileSync("config/tuners.yml", path); ++ fs.chmodSync(path, 0o644); + } + } catch (e) { + log.fatal("failed to copy tuners config to `%s`", path); +@@ -342,6 +344,7 @@ export function loadChannels(): Channel[] { + fs.copyFileSync("config/channels.win32.yml", path); + } else { + fs.copyFileSync("config/channels.yml", path); ++ fs.chmodSync(path, 0o644); + } + } catch (e) { + log.fatal("failed to copy channels config to `%s`", path); diff --git a/nixpkgs/pkgs/applications/video/mjpg-streamer/default.nix b/nixpkgs/pkgs/applications/video/mjpg-streamer/default.nix new file mode 100644 index 000000000000..f04025b37ddc --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mjpg-streamer/default.nix @@ -0,0 +1,33 @@ +{ lib, stdenv, fetchFromGitHub, cmake, libjpeg }: + +stdenv.mkDerivation { + pname = "mjpg-streamer"; + version = "unstable-2019-05-24"; + + src = fetchFromGitHub { + owner = "jacksonliam"; + repo = "mjpg-streamer"; + rev = "501f6362c5afddcfb41055f97ae484252c85c912"; + sha256 = "1cl159svfs1zzzrd3zgn4x7qy6751bvlnxfwf5hn5fmg4iszajw7"; + }; + + prePatch = '' + cd mjpg-streamer-experimental + ''; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ libjpeg ]; + + postFixup = '' + patchelf --set-rpath "$(patchelf --print-rpath $out/bin/mjpg_streamer):$out/lib/mjpg-streamer" $out/bin/mjpg_streamer + ''; + + meta = with lib; { + homepage = "https://github.com/jacksonliam/mjpg-streamer"; + description = "Takes JPGs from Linux-UVC compatible webcams, filesystem or other input plugins and streams them as M-JPEG via HTTP to webbrowsers, VLC and other software"; + platforms = platforms.linux; + license = licenses.gpl2; + maintainers = with maintainers; [ gebner ]; + mainProgram = "mjpg_streamer"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mkclean/default.nix b/nixpkgs/pkgs/applications/video/mkclean/default.nix new file mode 100644 index 000000000000..49c270c41069 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mkclean/default.nix @@ -0,0 +1,37 @@ +{ dos2unix, fetchurl, lib, stdenv }: + +stdenv.mkDerivation rec { + pname = "mkclean"; + version = "0.8.10"; + + hardeningDisable = [ "format" ]; + nativeBuildInputs = [ dos2unix ]; + + src = fetchurl { + url = "mirror://sourceforge/matroska/${pname}-${version}.tar.bz2"; + sha256 = "0zbpi4sm68zb20d53kbss93fv4aafhcmz7dsd0zdf01vj1r3wxwn"; + }; + + configurePhase = '' + dos2unix ./mkclean/configure.compiled + ./mkclean/configure.compiled + ''; + + buildPhase = '' + make -C mkclean + ''; + + installPhase = '' + mkdir -p $out/{bin,lib} + mv release/gcc_linux_*/*.* $out/lib + mv release/gcc_linux_*/* $out/bin + ''; + + meta = with lib; { + description = "Command line tool to clean and optimize Matroska (.mkv / .mka / .mks / .mk3d) and WebM (.webm / .weba) files that have already been muxed"; + homepage = "https://www.matroska.org"; + license = licenses.bsdOriginal; + maintainers = with maintainers; [ cawilliamson ]; + platforms = [ "i686-linux" "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mkvtoolnix/default.nix b/nixpkgs/pkgs/applications/video/mkvtoolnix/default.nix new file mode 100644 index 000000000000..b6d79695f5d3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mkvtoolnix/default.nix @@ -0,0 +1,140 @@ +{ lib +, stdenv +, fetchFromGitLab +, pkg-config +, autoreconfHook +, rake +, boost +, cmark +, docbook_xsl +, expat +, file +, flac +, fmt +, gettext +, gmp +, gtest +, libdvdread +, libebml +, libiconv +, libmatroska +, libogg +, libvorbis +, libxslt +, nlohmann_json +, pugixml +, qtbase +, qtmultimedia +, qtwayland +, utf8cpp +, xdg-utils +, zlib +, withGUI ? true +, wrapQtAppsHook +}: + +let + inherit (lib) + enableFeature getDev getLib optionals optionalString; + + phase = name: args: + '' + runHook pre${name} + + rake ${args} + + runHook post${name} + ''; + +in +stdenv.mkDerivation rec { + pname = "mkvtoolnix"; + version = "82.0"; + + src = fetchFromGitLab { + owner = "mbunkus"; + repo = "mkvtoolnix"; + rev = "release-${version}"; + hash = "sha256-3WULzEkjMH4PUETJeKmDKn9PdanWf581O2mI/IqN8YM="; + }; + + nativeBuildInputs = [ + autoreconfHook + docbook_xsl + gettext + gtest + libxslt + pkg-config + rake + ] + ++ optionals withGUI [ wrapQtAppsHook ]; + + # qtbase and qtmultimedia are needed without the GUI + buildInputs = [ + boost + expat + file + flac + fmt + gmp + libdvdread + libebml + libmatroska + libogg + libvorbis + nlohmann_json + pugixml + qtbase + qtmultimedia + utf8cpp + xdg-utils + zlib + ] + ++ optionals withGUI [ cmark ] + ++ optionals stdenv.isLinux [ qtwayland ] + ++ optionals stdenv.isDarwin [ libiconv ]; + + # autoupdate is not needed but it silences a ton of pointless warnings + postPatch = '' + patchShebangs . > /dev/null + autoupdate configure.ac ac/*.m4 + ''; + + configureFlags = [ + "--disable-debug" + "--disable-precompiled-headers" + "--disable-profiling" + "--disable-static-qt" + "--disable-update-check" + "--enable-optimization" + "--with-boost-libdir=${getLib boost}/lib" + "--with-docbook-xsl-root=${docbook_xsl}/share/xml/docbook-xsl" + "--with-gettext" + "--with-extra-includes=${getDev utf8cpp}/include/utf8cpp" + "--with-extra-libs=${getLib utf8cpp}/lib" + (enableFeature withGUI "gui") + ]; + + buildPhase = phase "Build" ""; + + installPhase = phase "Install" "install"; + + doCheck = true; + + checkPhase = phase "Check" "tests:run_unit"; + + dontWrapQtApps = true; + + postFixup = optionalString withGUI '' + wrapQtApp $out/bin/mkvtoolnix-gui + ''; + + meta = with lib; { + description = "Cross-platform tools for Matroska"; + homepage = "https://mkvtoolnix.download/"; + license = licenses.gpl2Only; + mainProgram = if withGUI then "mkvtoolnix-gui" else "mkvtoolnix"; + maintainers = with maintainers; [ codyopel rnhmjoj ]; + platforms = platforms.unix; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mlv-app/aarch64-flags.patch b/nixpkgs/pkgs/applications/video/mlv-app/aarch64-flags.patch new file mode 100644 index 000000000000..affd85d2b732 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mlv-app/aarch64-flags.patch @@ -0,0 +1,13 @@ +diff --git a/platform/qt/MLVApp.pro b/platform/qt/MLVApp.pro +index ebdc552..3e37573 100644 +--- a/platform/qt/MLVApp.pro ++++ b/platform/qt/MLVApp.pro +@@ -84,7 +84,7 @@ win32{ + + # Linux + linux-g++*{ +- QMAKE_CFLAGS += -O3 -fopenmp -msse4.1 -mssse3 -msse3 -msse2 -msse -std=c99 ++ QMAKE_CFLAGS += -O3 -fopenmp -std=c99 + QMAKE_CXXFLAGS += -fopenmp + LIBS += -lgomp + } diff --git a/nixpkgs/pkgs/applications/video/mlv-app/default.nix b/nixpkgs/pkgs/applications/video/mlv-app/default.nix new file mode 100644 index 000000000000..e3bd3cbf99a2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mlv-app/default.nix @@ -0,0 +1,63 @@ +{ fetchFromGitHub +, lib +, mkDerivation +, qmake +, qtbase +, qtmultimedia +, stdenv +}: + +mkDerivation rec { + pname = "mlv-app"; + version = "1.11"; + + src = fetchFromGitHub { + owner = "ilia3101"; + repo = "MLV-App"; + rev = "QTv${version}"; + sha256 = "0s5sjdxi8a17ddvih4ara7mlb2xrc9xqx52jmhfaca6ng341gi4x"; + }; + + patches = if stdenv.isAarch64 then ./aarch64-flags.patch else null; + + installPhase = '' + runHook preInstall + install -Dm555 -t $out/bin mlvapp + install -Dm444 -t $out/share/applications mlvapp.desktop + install -Dm444 -t $out/share/icons/hicolor/512x512/apps RetinaIMG/MLVAPP.png + runHook postInstall + ''; + + qmakeFlags = [ "MLVApp.pro" ]; + + preConfigure = '' + export HOME=$TMPDIR + cd platform/qt/ + ''; + + buildInputs = [ + qtmultimedia + qtbase + ]; + + dontWrapQtApps = true; + + preFixup = '' + wrapQtApp "$out/bin/mlvapp" + ''; + + nativeBuildInputs = [ + qmake + ]; + + meta = with lib; { + description = "All in one MLV processing app that is pretty great"; + homepage = "https://mlv.app"; + license = licenses.gpl3; + maintainers = with maintainers; [ + kiwi + ]; + platforms = platforms.linux; + mainProgram = "mlvapp"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/molotov/default.nix b/nixpkgs/pkgs/applications/video/molotov/default.nix new file mode 100644 index 000000000000..1930f06ffdb6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/molotov/default.nix @@ -0,0 +1,31 @@ +{ appimageTools, lib, fetchurl }: + +let + pname = "molotov"; + version = "4.4.0"; + src = fetchurl { + url = "http://desktop-auto-upgrade.molotov.tv/linux/${version}/molotov.AppImage"; + sha256 = "sha256-l4Il6i8uXSeJqH3ITC8ZUpKXPQb0qcW7SpKx1R46XDc="; + }; + appimageContents = appimageTools.extractType2 { inherit pname version src; }; +in +appimageTools.wrapType2 { + inherit pname version src; + extraInstallCommands = '' + mv $out/bin/${pname}-${version} $out/bin/${pname} + install -m 444 -D \ + ${appimageContents}/@molotovdesktop-wrapper.desktop \ + $out/share/applications/${pname}.desktop + substituteInPlace $out/share/applications/${pname}.desktop \ + --replace 'Exec=AppRun' 'Exec=${pname}' + cp -r ${appimageContents}/usr/share/icons $out/share + ''; + meta = with lib; { + description = "French TV service"; + homepage = "https://www.molotov.tv/"; + license = with licenses; [ unfree ]; + maintainers = with maintainers; [ apeyroux freezeboy ]; + platforms = [ "x86_64-linux" ]; + mainProgram = "molotov"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/motion/default.nix b/nixpkgs/pkgs/applications/video/motion/default.nix new file mode 100644 index 000000000000..95bc37819240 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/motion/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config +, ffmpeg, libjpeg, libmicrohttpd }: + +stdenv.mkDerivation rec { + pname = "motion"; + version = "4.6.0"; + + src = fetchFromGitHub { + owner = "Motion-Project"; + repo = "motion"; + rev = "release-${version}"; + sha256 = "sha256-f23glk91HWSEW/Glq/DdEikTQeg1eELEg4XG9zTsU78="; + }; + + nativeBuildInputs = [ autoreconfHook pkg-config ]; + + buildInputs = [ ffmpeg libjpeg libmicrohttpd ]; + + meta = with lib; { + description = "Monitors the video signal from cameras"; + homepage = "https://motion-project.github.io/"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ puffnfresh veprbl ]; + platforms = platforms.unix; + # never built on aarch64-darwin since first introduction in nixpkgs + broken = stdenv.isDarwin && stdenv.isAarch64; + mainProgram = "motion"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpc-qt/default.nix b/nixpkgs/pkgs/applications/video/mpc-qt/default.nix new file mode 100644 index 000000000000..9bb23b548e3f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpc-qt/default.nix @@ -0,0 +1,58 @@ +{ lib +, stdenv +, fetchFromGitHub +, pkg-config +, qmake +, qttools +, qtbase +, mpv +, wrapQtAppsHook +, gitUpdater +}: + +stdenv.mkDerivation rec { + pname = "mpc-qt"; + version = "23.12"; + + src = fetchFromGitHub { + owner = "mpc-qt"; + repo = "mpc-qt"; + rev = "v${version}"; + hash = "sha256-v22o5QtCY9Z8bPoIkwypG0oTBEPqPFeKZ8cWO+pKCD0="; + }; + + nativeBuildInputs = [ + pkg-config + qmake + qttools + wrapQtAppsHook + ]; + + buildInputs = [ + mpv + ]; + + postPatch = '' + substituteInPlace lconvert.pri --replace "qtPrepareTool(LCONVERT, lconvert)" "qtPrepareTool(LCONVERT, lconvert, , , ${qttools}/bin)" + ''; + + postConfigure = '' + substituteInPlace Makefile --replace ${qtbase}/bin/lrelease ${qttools.dev}/bin/lrelease + ''; + + qmakeFlags = [ + "MPCQT_VERSION=${version}" + ]; + + passthru.updateScript = gitUpdater { rev-prefix = "v"; }; + + meta = with lib; { + description = "Media Player Classic Qute Theater"; + homepage = "https://mpc-qt.github.io"; + license = licenses.gpl2; + platforms = platforms.unix; + broken = stdenv.isDarwin; + maintainers = with maintainers; [ romildo ]; + mainProgram = "mpc-qt"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mplayer/default.nix b/nixpkgs/pkgs/applications/video/mplayer/default.nix new file mode 100644 index 000000000000..880ea831f186 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mplayer/default.nix @@ -0,0 +1,208 @@ +{ config, lib, stdenv, fetchurl, fetchsvn, pkg-config, freetype, yasm, ffmpeg_4 +, aalibSupport ? true, aalib +, fontconfigSupport ? true, fontconfig, freefont_ttf +, fribidiSupport ? true, fribidi +, x11Support ? true, libX11, libXext, libGLU, libGL +, xineramaSupport ? true, libXinerama +, xvSupport ? true, libXv +, alsaSupport ? stdenv.isLinux, alsa-lib +, screenSaverSupport ? true, libXScrnSaver +, vdpauSupport ? false, libvdpau +, cddaSupport ? !stdenv.isDarwin, cdparanoia +, dvdnavSupport ? !stdenv.isDarwin, libdvdnav +, dvdreadSupport ? true, libdvdread +, bluraySupport ? true, libbluray +, amrSupport ? false, amrnb, amrwb +, cacaSupport ? true, libcaca +, lameSupport ? true, lame +, speexSupport ? true, speex +, theoraSupport ? true, libtheora +, x264Support ? false, x264 +, jackaudioSupport ? false, libjack2 +, pulseSupport ? config.pulseaudio or false, libpulseaudio +, bs2bSupport ? false, libbs2b +, v4lSupport ? false, libv4l +# For screenshots +, libpngSupport ? true, libpng +, libjpegSupport ? true, libjpeg +, useUnfreeCodecs ? false +, darwin +, buildPackages +}: + +assert xineramaSupport -> x11Support; +assert xvSupport -> x11Support; + +let + + codecs_src = + let + dir = "http://www.mplayerhq.hu/MPlayer/releases/codecs/"; + version = "20071007"; + in + if stdenv.hostPlatform.system == "i686-linux" then fetchurl { + url = "${dir}/essential-${version}.tar.bz2"; + sha256 = "18vls12n12rjw0mzw4pkp9vpcfmd1c21rzha19d7zil4hn7fs2ic"; + } else if stdenv.hostPlatform.system == "x86_64-linux" then fetchurl { + url = "${dir}/essential-amd64-${version}.tar.bz2"; + sha256 = "13xf5b92w1ra5hw00ck151lypbmnylrnznq9hhb0sj36z5wz290x"; + } else if stdenv.hostPlatform.system == "powerpc-linux" then fetchurl { + url = "${dir}/essential-ppc-${version}.tar.bz2"; + sha256 = "18mlj8dp4wnz42xbhdk1jlz2ygra6fbln9wyrcyvynxh96g1871z"; + } else null; + + codecs = if codecs_src != null then stdenv.mkDerivation { + pname = "MPlayer-codecs-essential"; + + src = codecs_src; + + installPhase = '' + mkdir $out + cp -prv * $out + ''; + + meta.license = lib.licenses.unfree; + } else null; + + crossBuild = stdenv.hostPlatform != stdenv.buildPlatform; + +in + +stdenv.mkDerivation rec { + pname = "mplayer"; + version = "unstable-2022-02-03"; + + src = fetchsvn { + url = "svn://svn.mplayerhq.hu/mplayer/trunk"; + rev = "38331"; + sha256 = "1vpic8i6zvg0zsy50vhm45ysqag561bpn9jycfbvvwl9ji7l55zi"; + }; + + prePatch = '' + sed -i /^_install_strip/d configure + + rm -rf ffmpeg + ''; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + nativeBuildInputs = [ pkg-config yasm ]; + buildInputs = with lib; + [ freetype ffmpeg_4 ] + ++ optional aalibSupport aalib + ++ optional fontconfigSupport fontconfig + ++ optional fribidiSupport fribidi + ++ optionals x11Support [ libX11 libXext libGLU libGL ] + ++ optional alsaSupport alsa-lib + ++ optional xvSupport libXv + ++ optional theoraSupport libtheora + ++ optional cacaSupport libcaca + ++ optional xineramaSupport libXinerama + ++ optional dvdnavSupport libdvdnav + ++ optional dvdreadSupport libdvdread + ++ optional bluraySupport libbluray + ++ optional cddaSupport cdparanoia + ++ optional jackaudioSupport libjack2 + ++ optionals amrSupport [ amrnb amrwb ] + ++ optional x264Support x264 + ++ optional pulseSupport libpulseaudio + ++ optional screenSaverSupport libXScrnSaver + ++ optional lameSupport lame + ++ optional vdpauSupport libvdpau + ++ optional speexSupport speex + ++ optional libpngSupport libpng + ++ optional libjpegSupport libjpeg + ++ optional bs2bSupport libbs2b + ++ optional v4lSupport libv4l + ++ (with darwin.apple_sdk.frameworks; optionals stdenv.isDarwin [ Cocoa OpenGL ]) + ; + + configurePlatforms = [ ]; + configureFlags = with lib; [ + "--enable-freetype" + (if fontconfigSupport then "--enable-fontconfig" else "--disable-fontconfig") + (if x11Support then "--enable-x11 --enable-gl" else "--disable-x11 --disable-gl") + (if xineramaSupport then "--enable-xinerama" else "--disable-xinerama") + (if xvSupport then "--enable-xv" else "--disable-xv") + (if alsaSupport then "--enable-alsa" else "--disable-alsa") + (if screenSaverSupport then "--enable-xss" else "--disable-xss") + (if vdpauSupport then "--enable-vdpau" else "--disable-vdpau") + (if cddaSupport then "--enable-cdparanoia" else "--disable-cdparanoia") + (if dvdnavSupport then "--enable-dvdnav" else "--disable-dvdnav") + (if bluraySupport then "--enable-bluray" else "--disable-bluray") + (if amrSupport then "--enable-libopencore_amrnb" else "--disable-libopencore_amrnb") + (if cacaSupport then "--enable-caca" else "--disable-caca") + (if lameSupport then "--enable-mp3lame --disable-mp3lame-lavc" else "--disable-mp3lame --enable-mp3lame-lavc") + (if speexSupport then "--enable-speex" else "--disable-speex") + (if theoraSupport then "--enable-theora" else "--disable-theora") + (if x264Support then "--enable-x264 --disable-x264-lavc" else "--disable-x264 --enable-x264-lavc") + (if jackaudioSupport then "" else "--disable-jack") + (if pulseSupport then "--enable-pulse" else "--disable-pulse") + (if v4lSupport then "--enable-v4l2 --enable-tv-v4l2" else "--disable-v4l2 --disable-tv-v4l2") + "--disable-xanim" + "--disable-xvid --disable-xvid-lavc" + "--disable-ossaudio" + "--disable-ffmpeg_a" + "--yasm=${buildPackages.yasm}/bin/yasm" + # Note, the `target` vs `host` confusion is intensional. + "--target=${stdenv.hostPlatform.config}" + ] ++ optional + (useUnfreeCodecs && codecs != null && !crossBuild) + "--codecsdir=${codecs}" + ++ optional + (stdenv.hostPlatform.isx86 && !crossBuild) + "--enable-runtime-cpudetection" + ++ optional fribidiSupport "--enable-fribidi" + ++ optional (stdenv.isLinux && !stdenv.isAarch64) "--enable-vidix" + ++ optional stdenv.isLinux "--enable-fbdev" + ++ optionals (crossBuild) [ + "--enable-cross-compile" + "--disable-vidix-pcidb" + "--with-vidix-drivers=no" + ]; + + preConfigure = '' + configureFlagsArray+=( + "--cc=$CC" + "--host-cc=$CC_FOR_BUILD" + "--as=$AS" + "--nm=$NM" + "--ar=$AR" + "--ranlib=$RANLIB" + "--windres=$WINDRES" + ) + ''; + + postConfigure = '' + echo CONFIG_MPEGAUDIODSP=yes >> config.mak + ''; + + NIX_LDFLAGS = with lib; toString ( + optional fontconfigSupport "-lfontconfig" + ++ optional fribidiSupport "-lfribidi" + ++ optionals x11Support [ "-lX11" "-lXext" ] + ++ optional x264Support "-lx264" + ++ [ "-lfreetype" ] + ); + + installTargets = [ "install" ] ++ lib.optional x11Support "install-gui"; + + enableParallelBuilding = true; + + # Provide a reasonable standard font when not using fontconfig. Maybe we should symlink here. + postInstall = lib.optionalString (!fontconfigSupport) + '' + mkdir -p $out/share/mplayer + cp ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mplayer/subfont.ttf + if test -f $out/share/applications/mplayer.desktop ; then + echo "NoDisplay=True" >> $out/share/applications/mplayer.desktop + fi + ''; + + meta = with lib; { + description = "A movie player that supports many video formats"; + homepage = "http://mplayerhq.hu"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ eelco ]; + platforms = [ "i686-linux" "x86_64-linux" "x86_64-darwin" "aarch64-darwin" "aarch64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv-shim-default-shaders/default.nix b/nixpkgs/pkgs/applications/video/mpv-shim-default-shaders/default.nix new file mode 100644 index 000000000000..eb6c81f6358b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv-shim-default-shaders/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, fetchFromGitHub }: + +stdenv.mkDerivation rec { + pname = "mpv-shim-default-shaders"; + version = "2.1.0"; + + src = fetchFromGitHub { + owner = "iwalton3"; + repo = "default-shader-pack"; + rev = "v${version}"; + sha256 = "sha256-BM2GvmUoWQUUMH464YIIqu5A1t1B+otbJxAGFbySuq8="; + }; + + installPhase = '' + mkdir -p $out/share/${pname} + cp -r shaders *.json $out/share/${pname} + ''; + + meta = with lib; { + homepage = "https://github.com/iwalton3/default-shader-pack"; + description = "Preconfigured set of MPV shaders and configurations for MPV Shim media clients."; + license = with licenses; [ + gpl3Plus + mit + unlicense + ]; + maintainers = with maintainers; [ devusb ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch b/nixpkgs/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch new file mode 100644 index 000000000000..74ab97db4e54 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/darwin-sigtool-no-deep.patch @@ -0,0 +1,13 @@ +diff --git a/TOOLS/osxbundle.py b/TOOLS/osxbundle.py +index 98699e478b..d02ecf610e 100755 +--- a/TOOLS/osxbundle.py ++++ b/TOOLS/osxbundle.py +@@ -39,7 +39,7 @@ def apply_plist_template(plist_file, version): + print(line.rstrip().replace('${VERSION}', version)) + + def sign_bundle(binary_name): +- sh('codesign --force --deep -s - ' + bundle_path(binary_name)) ++ sh('rcodesign sign ' + bundle_path(binary_name)) + + def bundle_version(): + if os.path.exists('VERSION'): diff --git a/nixpkgs/pkgs/applications/video/mpv/default.nix b/nixpkgs/pkgs/applications/video/mpv/default.nix new file mode 100644 index 000000000000..163729d879b9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/default.nix @@ -0,0 +1,279 @@ +{ lib +, config +, stdenv +, fetchFromGitHub +, fetchpatch +, addOpenGLRunpath +, bash +, docutils +, meson +, ninja +, pkg-config +, python3 +, ffmpeg +, freefont_ttf +, freetype +, libass +, libpthreadstubs +, nv-codec-headers-11 +, lua +, libuchardet +, libiconv +, xcbuild +, rcodesign + +, waylandSupport ? stdenv.isLinux + , wayland + , wayland-protocols + , wayland-scanner + , libxkbcommon + +, x11Support ? stdenv.isLinux + , libGLU, libGL + , libX11 + , libXext + , libXxf86vm + , libXrandr + , libXpresent + +, cddaSupport ? false + , libcdio + , libcdio-paranoia + +, vulkanSupport ? stdenv.isLinux + , libplacebo + , shaderc # instead of spirv-cross + , vulkan-headers + , vulkan-loader + +, drmSupport ? stdenv.isLinux + , libdrm + , mesa + +, alsaSupport ? stdenv.isLinux, alsa-lib +, archiveSupport ? true, libarchive +, bluraySupport ? true, libbluray +, bs2bSupport ? true, libbs2b +, cacaSupport ? true, libcaca +, cmsSupport ? true, lcms2 +, dvdnavSupport ? stdenv.isLinux, libdvdnav +, dvbinSupport ? stdenv.isLinux +, jackaudioSupport ? false, libjack2 +, javascriptSupport ? true, mujs +, libpngSupport ? true, libpng +, openalSupport ? true, openalSoft +, pulseSupport ? config.pulseaudio or stdenv.isLinux, libpulseaudio +, pipewireSupport ? stdenv.isLinux, pipewire +, rubberbandSupport ? true, rubberband +, screenSaverSupport ? true, libXScrnSaver +, sdl2Support ? true, SDL2 +, sixelSupport ? false, libsixel +, speexSupport ? true, speex +, swiftSupport ? stdenv.isDarwin, swift +, theoraSupport ? true, libtheora +, vaapiSupport ? x11Support || waylandSupport, libva +, vapoursynthSupport ? false, vapoursynth +, vdpauSupport ? true, libvdpau +, xineramaSupport ? stdenv.isLinux, libXinerama +, xvSupport ? stdenv.isLinux, libXv +, zimgSupport ? true, zimg +, darwin +}: + +let + inherit (darwin.apple_sdk_11_0.frameworks) + AVFoundation Accelerate Cocoa CoreAudio CoreFoundation CoreMedia + MediaPlayer VideoToolbox; + luaEnv = lua.withPackages (ps: with ps; [ luasocket ]); + + overrideSDK = platform: version: + platform // lib.optionalAttrs (platform ? darwinMinVersion) { + darwinMinVersion = version; + }; + + stdenv' = if swiftSupport && stdenv.isDarwin && stdenv.isx86_64 + then stdenv.override (old: { + buildPlatform = overrideSDK old.buildPlatform "10.15"; + hostPlatform = overrideSDK old.hostPlatform "10.15"; + targetPlatform = overrideSDK old.targetPlatform "10.15"; + }) + else stdenv; +in stdenv'.mkDerivation (finalAttrs: { + pname = "mpv"; + version = "0.37.0"; + + outputs = [ "out" "dev" "doc" "man" ]; + + src = fetchFromGitHub { + owner = "mpv-player"; + repo = "mpv"; + rev = "v${finalAttrs.version}"; + hash = "sha256-izAz9Iiam7tJAWIQkmn2cKOfoaog8oPKq4sOUtp1nvU="; + }; + + patches = [ ./darwin-sigtool-no-deep.patch ]; + + postPatch = lib.concatStringsSep "\n" [ + # Don't reference compile time dependencies or create a build outputs cycle + # between out and dev + '' + substituteInPlace meson.build \ + --replace-fail "conf_data.set_quoted('CONFIGURATION', configuration)" \ + "conf_data.set_quoted('CONFIGURATION', '<ommited>')" + '' + # A trick to patchShebang everything except mpv_identify.sh + '' + pushd TOOLS + mv mpv_identify.sh mpv_identify + patchShebangs *.py *.sh + mv mpv_identify mpv_identify.sh + popd + '' + ]; + + # Ensure we reference 'lib' (not 'out') of Swift. + preConfigure = lib.optionalString swiftSupport '' + export SWIFT_LIB_DYNAMIC="${lib.getLib swift.swift}/lib/swift/macosx" + ''; + + mesonFlags = [ + (lib.mesonOption "default_library" "shared") + (lib.mesonBool "libmpv" true) + (lib.mesonEnable "libarchive" archiveSupport) + (lib.mesonEnable "manpage-build" true) + (lib.mesonEnable "cdda" cddaSupport) + (lib.mesonEnable "dvbin" dvbinSupport) + (lib.mesonEnable "dvdnav" dvdnavSupport) + (lib.mesonEnable "openal" openalSupport) + (lib.mesonEnable "sdl2" sdl2Support) + # Disable whilst Swift isn't supported + (lib.mesonEnable "swift-build" swiftSupport) + (lib.mesonEnable "macos-cocoa-cb" swiftSupport) + ] ++ lib.optionals stdenv.isDarwin [ + # Toggle explicitly because it fails on darwin + (lib.mesonEnable "videotoolbox-pl" vulkanSupport) + ]; + + mesonAutoFeatures = "auto"; + + nativeBuildInputs = [ + addOpenGLRunpath + docutils # for rst2man + meson + ninja + pkg-config + ] + ++ lib.optionals stdenv.isDarwin [ xcbuild.xcrun rcodesign ] + ++ lib.optionals swiftSupport [ swift ] + ++ lib.optionals waylandSupport [ wayland-scanner ]; + + buildInputs = [ + bash + ffmpeg + freetype + libass + libplacebo + libpthreadstubs + libuchardet + luaEnv + python3 + ] ++ lib.optionals alsaSupport [ alsa-lib ] + ++ lib.optionals archiveSupport [ libarchive ] + ++ lib.optionals bluraySupport [ libbluray ] + ++ lib.optionals bs2bSupport [ libbs2b ] + ++ lib.optionals cacaSupport [ libcaca ] + ++ lib.optionals cddaSupport [ libcdio libcdio-paranoia ] + ++ lib.optionals cmsSupport [ lcms2 ] + ++ lib.optionals drmSupport [ libdrm mesa ] + ++ lib.optionals dvdnavSupport [ libdvdnav libdvdnav.libdvdread ] + ++ lib.optionals jackaudioSupport [ libjack2 ] + ++ lib.optionals javascriptSupport [ mujs ] + ++ lib.optionals libpngSupport [ libpng ] + ++ lib.optionals openalSupport [ openalSoft ] + ++ lib.optionals pipewireSupport [ pipewire ] + ++ lib.optionals pulseSupport [ libpulseaudio ] + ++ lib.optionals rubberbandSupport [ rubberband ] + ++ lib.optionals screenSaverSupport [ libXScrnSaver ] + ++ lib.optionals sdl2Support [ SDL2 ] + ++ lib.optionals sixelSupport [ libsixel ] + ++ lib.optionals speexSupport [ speex ] + ++ lib.optionals theoraSupport [ libtheora ] + ++ lib.optionals vaapiSupport [ libva ] + ++ lib.optionals vapoursynthSupport [ vapoursynth ] + ++ lib.optionals vdpauSupport [ libvdpau ] + ++ lib.optionals vulkanSupport [ shaderc vulkan-headers vulkan-loader ] + ++ lib.optionals waylandSupport [ wayland wayland-protocols libxkbcommon ] + ++ lib.optionals x11Support [ libX11 libXext libGLU libGL libXxf86vm libXrandr libXpresent ] + ++ lib.optionals xineramaSupport [ libXinerama ] + ++ lib.optionals xvSupport [ libXv ] + ++ lib.optionals zimgSupport [ zimg ] + ++ lib.optionals stdenv.isLinux [ nv-codec-headers-11 ] + ++ lib.optionals stdenv.isDarwin [ libiconv ] + ++ lib.optionals stdenv.isDarwin [ Accelerate CoreFoundation Cocoa CoreAudio MediaPlayer VideoToolbox ] + ++ lib.optionals (stdenv.isDarwin && swiftSupport) [ AVFoundation CoreMedia ]; + + postBuild = lib.optionalString stdenv.isDarwin '' + pushd .. # Must be run from the source dir because it uses relative paths + python3 TOOLS/osxbundle.py -s build/mpv + popd + ''; + + postInstall = '' + # Use a standard font + mkdir -p $out/share/mpv + ln -s ${freefont_ttf}/share/fonts/truetype/FreeSans.ttf $out/share/mpv/subfont.ttf + + pushd ../TOOLS + cp mpv_identify.sh umpv $out/bin/ + popd + pushd $out/share/applications + + # patch out smb protocol reference, since our ffmpeg can't handle it + substituteInPlace mpv.desktop --replace-fail "smb," "" + + sed -e '/Icon=/ ! s|mpv|umpv|g; s|^Exec=.*|Exec=umpv %U|' \ + mpv.desktop > umpv.desktop + printf "NoDisplay=true\n" >> umpv.desktop + popd + '' + lib.optionalString stdenv.isDarwin '' + mkdir -p $out/Applications + cp -r mpv.app $out/Applications + ''; + + # Set RUNPATH so that libcuda in /run/opengl-driver(-32)/lib can be found. + # See the explanation in addOpenGLRunpath. + postFixup = lib.optionalString stdenv.isLinux '' + addOpenGLRunpath $out/bin/mpv + patchShebangs --update --host $out/bin/umpv $out/bin/mpv_identify.sh + ''; + + passthru = { + inherit + # The wrapper consults luaEnv and lua.version + luaEnv + lua + # In the wrapper, we want to reference vapoursynth which has the `python3` + # passthru attribute (which has the `sitePrefix` attribute). This way we'll + # be sure that in the wrapper we'll use the same python3.sitePrefix used to + # build vapoursynth. + vapoursynthSupport + vapoursynth + ; + }; + + meta = { + homepage = "https://mpv.io"; + description = "General-purpose media player, fork of MPlayer and mplayer2"; + longDescription = '' + mpv is a free and open-source general-purpose video player, based on the + MPlayer and mplayer2 projects, with great improvements above both. + ''; + changelog = "https://github.com/mpv-player/mpv/releases/tag/v${finalAttrs.version}"; + license = lib.licenses.gpl2Plus; + mainProgram = "mpv"; + maintainers = with lib.maintainers; [ + AndersonTorres fpletz globin ma27 tadeokondrak + ]; + platforms = lib.platforms.unix; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/buildLua.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/buildLua.nix new file mode 100644 index 000000000000..e0afa7d932c6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/buildLua.nix @@ -0,0 +1,80 @@ +{ lib +, stdenvNoCC }: + +let + escapedList = with lib; concatMapStringsSep " " (s: "'${escape [ "'" ] s}'"); + fileName = pathStr: lib.last (lib.splitString "/" pathStr); + scriptsDir = "$out/share/mpv/scripts"; + + # similar to `lib.extends`, but with inverted precedence and recursive update + extendedBy = args: orig: self: + let super = args self; + in lib.recursiveUpdate (orig super) super + ; +in + +lib.makeOverridable (args: stdenvNoCC.mkDerivation (extendedBy + (if lib.isFunction args then args else (_: args)) ( + { pname + , extraScripts ? [] + , ... }@args: + let + strippedName = with builtins; + let groups = match "mpv[-_](.*)" pname; in + if groups != null + then head groups + else pname + ; + # either passthru.scriptName, inferred from scriptPath, or from pname + scriptName = (args.passthru or {}).scriptName or ( + if args ? scriptPath + then fileName args.scriptPath + else "${strippedName}.lua" + ); + scriptPath = args.scriptPath or "./${scriptName}"; + in { + dontBuild = true; + preferLocalBuild = true; + + # Prevent `patch` from emitting `.orig` files (that end up in the output) + patchFlags = [ "--no-backup-if-mismatch" "-p1" ]; + + outputHashMode = "recursive"; + installPhase = '' + runHook preInstall + + if [ -d "${scriptPath}" ]; then + [ -f "${scriptPath}/main.lua" ] || { + echo "Script directory '${scriptPath}' does not contain 'main.lua'" >&2 + exit 1 + } + [ ${with builtins; toString (length extraScripts)} -eq 0 ] || { + echo "mpvScripts.buildLua does not support 'extraScripts'" \ + "when 'scriptPath' is a directory" + exit 1 + } + mkdir -p "${scriptsDir}" + cp -a "${scriptPath}" "${scriptsDir}/${scriptName}" + else + install -m644 -Dt "${scriptsDir}" \ + ${escapedList ([ scriptPath ] ++ extraScripts)} + fi + + runHook postInstall + ''; + + passthru = { inherit scriptName; }; + meta = { + platforms = lib.platforms.all; + } // ( + let pos = + if (args.meta or {}) ? description then + builtins.unsafeGetAttrPos "description" args.meta + else + builtins.unsafeGetAttrPos "pname" args; + in lib.optionalAttrs + (pos != null) + { position = "${pos.file}:${toString pos.line}"; } + ); + }) +)) diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/chapterskip.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/chapterskip.nix new file mode 100644 index 000000000000..9d0c7dafc1db --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/chapterskip.nix @@ -0,0 +1,28 @@ +{ lib +, fetchFromGitHub +, unstableGitUpdater +, buildLua }: + +buildLua { + pname = "chapterskip"; + + version = "unstable-2022-09-08"; + src = fetchFromGitHub { + owner = "po5"; + repo = "chapterskip"; + rev = "b26825316e3329882206ae78dc903ebc4613f039"; + hash = "sha256-OTrLQE3rYvPQamEX23D6HttNjx3vafWdTMxTiWpDy90="; + }; + passthru.updateScript = unstableGitUpdater {}; + + meta = { + description = "Automatically skips chapters based on title"; + longDescription = '' + MPV script that skips chapters based on their title, categorized using regexes. + The set of skipped categories can be configured globally, or by an auto-profile. + ''; + homepage = "https://github.com/po5/chapterskip"; + license = lib.licenses.unfree; # https://github.com/po5/chapterskip/issues/10 + maintainers = with lib.maintainers; [ nicoo ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/convert.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/convert.nix new file mode 100644 index 000000000000..aaf9afcc0d52 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/convert.nix @@ -0,0 +1,48 @@ +{ lib +, fetchgit +, unstableGitUpdater + +, buildLua +, libnotify +, mkvtoolnix-cli +, yad +}: + +buildLua { + pname = "mpv-convert-script"; + version = "unstable-2015-07-02"; + src = fetchgit { + url = "https://gist.github.com/Zehkul/25ea7ae77b30af959be0"; + rev = "f95cee43e390e843a47e8ec9d1711a12a8cd343d"; + sha256 = "13m7l4sy2r8jv2sfrb3vvqvnim4a9ilnv28q5drlg09v298z3mck"; + }; + passthru.updateScript = unstableGitUpdater {}; + + patches = [ ./convert.patch ]; + + postPatch = '' + substituteInPlace convert_script.lua \ + --replace 'mkvpropedit_exe = "mkvpropedit"' \ + 'mkvpropedit_exe = "${mkvtoolnix-cli}/bin/mkvpropedit"' \ + --replace 'mkvmerge_exe = "mkvmerge"' \ + 'mkvmerge_exe = "${mkvtoolnix-cli}/bin/mkvmerge"' \ + --replace 'yad_exe = "yad"' \ + 'yad_exe = "${yad}/bin/yad"' \ + --replace 'notify_send_exe = "notify-send"' \ + 'notify_send_exe = "${libnotify}/bin/notify-send"' \ + ''; + + scriptPath = "convert_script.lua"; + + meta = with lib; { + description = "Convert parts of a video while you are watching it in mpv"; + homepage = "https://gist.github.com/Zehkul/25ea7ae77b30af959be0"; + maintainers = [ maintainers.Profpatsch ]; + longDescription = '' + When this script is loaded into mpv, you can hit Alt+W to mark the beginning + and Alt+W again to mark the end of the clip. Then a settings window opens. + ''; + # author was asked to add a license https://gist.github.com/Zehkul/25ea7ae77b30af959be0#gistcomment-3715700 + license = licenses.unfree; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/convert.patch b/nixpkgs/pkgs/applications/video/mpv/scripts/convert.patch new file mode 100644 index 000000000000..d3a891bb34cd --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/convert.patch @@ -0,0 +1,102 @@ +diff --git "a/Convert Script \342\200\223 README.md" "b/Convert Script \342\200\223 README.md" +index 8e062c1..6e0d798 100644 +--- "a/Convert Script \342\200\223 README.md" ++++ "b/Convert Script \342\200\223 README.md" +@@ -68,7 +68,7 @@ and set some options in ``mpv/lua-settings/convert_script.conf`` or with ``--scr + If you don’t want to upgrade your yad. Features like appending segments won’t be available. + + libvpx_fps +- Default: --oautofps ++ Default: "" + FPS settings (or any other settings really) for libvpx encoding. Set it to --ofps=24000/1001 for example. + +-Warning: Some of these options aren’t very robust and setting them to bogus values will break the script. +\ No newline at end of file ++Warning: Some of these options aren’t very robust and setting them to bogus values will break the script. +diff --git a/convert_script.lua b/convert_script.lua +index 17d3100..90f88ec 100644 +--- a/convert_script.lua ++++ b/convert_script.lua +@@ -3,6 +3,12 @@ local msg = require 'mp.msg' + local opt = require 'mp.options' + local utils = require 'mp.utils' + ++-- executables ++local mkvpropedit_exe = "mkvpropedit" ++local mkvmerge_exe = "mkvmerge" ++local yad_exe = "yad" ++local notify_send_exe = "notify-send" ++ + -- default options, convert_script.conf is read + local options = { + bitrate_multiplier = 0.975, -- to make sure the file won’t go over the target file size, set it to 1 if you don’t care +@@ -14,7 +20,7 @@ local options = { + libvpx_options = "--ovcopts-add=cpu-used=0,auto-alt-ref=1,lag-in-frames=25,quality=good", + libvpx_vp9_options = "", + legacy_yad = false, -- if you don’t want to upgrade to at least yad 0.18 +- libvpx_fps = "--oautofps", -- --ofps=24000/1001 for example ++ libvpx_fps = "", -- --ofps=24000/1001 for example + audio_bitrate = 112, -- mpv default, in kbps + } + +@@ -247,12 +253,12 @@ function encode(enc) + if string.len(vf) > 0 then + vf = vf .. "," + end +- local sub_file_table = mp.get_property_native("options/sub-file") ++ local sub_file_table = mp.get_property_native("options/sub-files") + local sub_file = "" + for index, param in pairs(sub_file_table) do + sub_file = sub_file .. " --sub-file='" .. string.gsub(tostring(param), "'", "'\\''") .. "'" + end +- local audio_file_table = mp.get_property_native("options/audio-file") ++ local audio_file_table = mp.get_property_native("options/audio-files") + local audio_file = "" + for index, param in pairs(audio_file_table) do + audio_file = audio_file .. " --audio-file='" .. string.gsub(tostring(param), "'", "'\\''") .. "'" +@@ -354,9 +360,9 @@ function encode(enc) + if ovc == "gif" then + full_command = full_command .. ' --vf-add=lavfi=graph=\\"framestep=' .. framestep .. '\\" && convert ' + .. tmpfolder .. '/*.png -set delay ' .. delay .. ' -loop 0 -fuzz ' .. fuzz .. '% ' .. dither .. ' -layers optimize ' +- .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && notify-send "Gif done") & disown' ++ .. full_output_path .. ' && rm -rf ' .. tmpfolder .. ' && ' .. notify_send_exe .. ' "Gif done") & disown' + else +- full_command = full_command .. ' && notify-send "Encoding done"; mkvpropedit ' ++ full_command = full_command .. ' && ' .. notify_send_exe .. ' "Encoding done"; ' .. mkvpropedit_exe .. ' ' + .. full_output_path .. ' -s title="' .. metadata_title .. '") & disown' + end + +@@ -409,7 +415,7 @@ function encode_copy(enc) + sep = ",+" + + if enc then +- local command = "mkvmerge '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path ++ local command = mkvmerge_exe .. " '" .. video .. "' " .. mkvmerge_parts .. " -o " .. full_output_path + msg.info(command) + os.execute(command) + clear() +@@ -508,7 +514,7 @@ function call_gui () + end + + +- local yad_command = [[LC_NUMERIC=C yad --title="Convert Script" --center --form --fixed --always-print-result \ ++ local yad_command = [[LC_NUMERIC=C ]] .. yad_exe .. [[ --title="Convert Script" --center --form --fixed --always-print-result \ + --name "convert script" --class "Convert Script" --field="Resize to height:NUM" "]] .. scale_sav --yad_table 1 + .. [[" --field="Resize to width instead:CHK" ]] .. resize_to_width_instead .. " " --yad_table 2 + if options.legacy_yad then +@@ -524,7 +530,7 @@ function call_gui () + yad_command = yad_command + .. [[--field="2pass:CHK" "false" ]] --yad_table 5 + .. [[--field="Encode options::CBE" '! --ovcopts=b=2000,cpu-used=0,auto-alt-ref=1,lag-in-frames=25,quality=good,threads=4' ]] --yad_table 6 +- .. [[--field="Output format::CBE" ' --ovc=libx264! --oautofps --of=webm --ovc=libvpx' ]] ++ .. [[--field="Output format::CBE" ' --ovc=libx264! --of=webm --ovc=libvpx' ]] + .. [[--field="Simple:FBTN" 'bash -c "echo \"simple\" && kill -s SIGUSR1 \"$YAD_PID\""' ]] + advanced = true + else +@@ -734,4 +740,4 @@ mp.set_key_bindings({ + + mp.add_key_binding("alt+w", "convert_script", convert_script_hotkey_call) + +-mp.register_event("tick", tick) +\ No newline at end of file ++mp.register_event("tick", tick) diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/cutter.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/cutter.nix new file mode 100644 index 000000000000..69eba782cc1d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/cutter.nix @@ -0,0 +1,43 @@ +{ lib, buildLua, fetchFromGitHub, makeWrapper, unstableGitUpdater }: + +buildLua { + pname = "video-cutter"; + version = "unstable-2023-11-09"; + + src = fetchFromGitHub { + owner = "rushmj"; + repo = "mpv-video-cutter"; + rev = "01a0396c075d5f8bbd1de5b571e6231f8899ab65"; + sha256 = "sha256-veoRFzUCRH8TrvR7x+WWoycpDyxqrJZ/bnp61dVc0pE="; + }; + passthru.updateScript = unstableGitUpdater {}; + + nativeBuildInputs = [ makeWrapper ]; + + postPatch = '' + substituteInPlace cutter.lua \ + --replace '~/.config/mpv/scripts/c_concat.sh' '${placeholder "out"}/share/mpv/scripts/c_concat.sh' + + # needs to be ran separately so that we can replace everything, and not every single mention explicitly + # original script places them in the scripts folder, just spawning unnecessary errors + # i know that hardcoding .config and especially the .mpv directory isn't best practice, but I didn't want to deviate too much from upstream + substituteInPlace cutter.lua \ + --replace '~/.config/mpv/scripts' "''${XDG_CONFIG_HOME:-~/.config}/mpv/cutter" + ''; + + passthru.scriptName = "cutter.lua"; + extraScripts = [ "c_concat.sh" ]; + + postInstall = '' + chmod 0755 $out/share/mpv/scripts/c_concat.sh + wrapProgram $out/share/mpv/scripts/c_concat.sh \ + --run "mkdir -p ~/.config/mpv/cutter/" + ''; + + meta = with lib; { + description = "Cut videos and concat them automatically"; + homepage = "https://github.com/rushmj/mpv-video-cutter"; + license = licenses.mit; + maintainers = with maintainers; [ lom ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/default.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/default.nix new file mode 100644 index 000000000000..68ccc3b139d1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/default.nix @@ -0,0 +1,101 @@ +{ lib +, config +, newScope +, runCommand +}: + +let + unionOfDisjoints = lib.fold lib.attrsets.unionOfDisjoint {}; + + addTests = name: drv: + if ! lib.isDerivation drv then + drv + else let + inherit (drv) scriptName; + scriptPath = "share/mpv/scripts/${scriptName}"; + fullScriptPath = "${drv}/${scriptPath}"; + in drv.overrideAttrs (old: { passthru = (old.passthru or {}) // { tests = unionOfDisjoints [ + (old.passthru.tests or {}) + + { + scriptName-is-valid = runCommand "mpvScripts.${name}.passthru.tests.scriptName-is-valid" { + meta.maintainers = with lib.maintainers; [ nicoo ]; + preferLocalBuild = true; + } '' + if [ -e "${fullScriptPath}" ]; then + touch $out + else + echo "mpvScripts.\"${name}\" does not contain a script named \"${scriptName}\"" >&2 + exit 1 + fi + ''; + } + + # can't check whether `fullScriptPath` is a directory, in pure-evaluation mode + (with lib; optionalAttrs (! any (s: hasSuffix s drv.passthru.scriptName) [ ".js" ".lua" ".so" ]) { + single-main-in-script-dir = runCommand "mpvScripts.${name}.passthru.tests.single-main-in-script-dir" { + meta.maintainers = with lib.maintainers; [ nicoo ]; + preferLocalBuild = true; + } '' + die() { + echo "$@" >&2 + exit 1 + } + + cd "${drv}/${scriptPath}" # so the glob expands to filenames only + mains=( main.* ) + if [ "''${#mains[*]}" -eq 1 ]; then + touch $out + elif [ "''${#mains[*]}" -eq 0 ]; then + die "'${scriptPath}' contains no 'main.*' file" + else + die "'${scriptPath}' contains multiple 'main.*' files:" "''${mains[*]}" + fi + ''; + }) + ]; }; }); + + scope = self: let + inherit (self) callPackage; + in lib.mapAttrs addTests { + inherit (callPackage ./mpv.nix { }) + acompressor autocrop autodeint autoload; + inherit (callPackage ./occivink.nix { }) + blacklistExtensions seekTo; + + buildLua = callPackage ./buildLua.nix { }; + chapterskip = callPackage ./chapterskip.nix { }; + convert = callPackage ./convert.nix { }; + cutter = callPackage ./cutter.nix { }; + inhibit-gnome = callPackage ./inhibit-gnome.nix { }; + mpris = callPackage ./mpris.nix { }; + mpv-cheatsheet = callPackage ./mpv-cheatsheet.nix { }; + mpv-playlistmanager = callPackage ./mpv-playlistmanager.nix { }; + mpv-webm = callPackage ./mpv-webm.nix { }; + mpvacious = callPackage ./mpvacious.nix { }; + quack = callPackage ./quack.nix { }; + quality-menu = callPackage ./quality-menu.nix { }; + reload = callPackage ./reload.nix { }; + simple-mpv-webui = callPackage ./simple-mpv-webui.nix { }; + sponsorblock = callPackage ./sponsorblock.nix { }; + sponsorblock-minimal = callPackage ./sponsorblock-minimal.nix { }; + thumbfast = callPackage ./thumbfast.nix { }; + thumbnail = callPackage ./thumbnail.nix { }; + uosc = callPackage ./uosc.nix { }; + visualizer = callPackage ./visualizer.nix { }; + vr-reversal = callPackage ./vr-reversal.nix { }; + webtorrent-mpv-hook = callPackage ./webtorrent-mpv-hook.nix { }; + }; + + aliases = { + youtube-quality = throw "'youtube-quality' is no longer maintained, use 'quality-menu' instead"; # added 2023-07-14 + }; +in + +with lib; pipe scope [ + (makeScope newScope) + (self: + assert builtins.intersectAttrs self aliases == {}; + self // optionalAttrs config.allowAliases aliases) + recurseIntoAttrs +] diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix new file mode 100644 index 000000000000..618c74adea93 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/inhibit-gnome.nix @@ -0,0 +1,34 @@ +{ lib, stdenv, fetchFromGitHub, gitUpdater, pkg-config, dbus, mpv-unwrapped }: + +stdenv.mkDerivation rec { + pname = "mpv-inhibit-gnome"; + version = "0.1.3"; + + src = fetchFromGitHub { + owner = "Guldoman"; + repo = "mpv_inhibit_gnome"; + rev = "v${version}"; + hash = "sha256-LSGg5gAQE2JpepBqhz6D6d3NlqYaU4bjvYf1F+oLphQ="; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ dbus mpv-unwrapped ]; + + passthru.scriptName = "mpv_inhibit_gnome.so"; + + installPhase = '' + install -D ./lib/mpv_inhibit_gnome.so $out/share/mpv/scripts/mpv_inhibit_gnome.so + ''; + + meta = with lib; { + description = "This mpv plugin prevents screen blanking in GNOME"; + homepage = "https://github.com/Guldoman/mpv_inhibit_gnome"; + license = licenses.mit; + platforms = platforms.linux; + maintainers = with maintainers; [ myaats ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpris.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpris.nix new file mode 100644 index 000000000000..338f0a8dd482 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpris.nix @@ -0,0 +1,38 @@ +{ lib, stdenv, fetchFromGitHub, gitUpdater, pkg-config, glib, mpv-unwrapped, ffmpeg }: + +stdenv.mkDerivation rec { + pname = "mpv-mpris"; + version = "1.1"; + + src = fetchFromGitHub { + owner = "hoyon"; + repo = "mpv-mpris"; + rev = version; + hash = "sha256-vZIO6ILatIWa9nJYOp4AMKwvaZLahqYWRLMDOizyBI0="; + }; + passthru.updateScript = gitUpdater {}; + + nativeBuildInputs = [ pkg-config ]; + + buildInputs = [ glib mpv-unwrapped ffmpeg ]; + + postPatch = '' + substituteInPlace Makefile --replace 'PKG_CONFIG =' 'PKG_CONFIG ?=' + ''; + + installFlags = [ "SCRIPTS_DIR=${placeholder "out"}/share/mpv/scripts" ]; + + # Otherwise, the shared object isn't `strip`ped. See: + # https://discourse.nixos.org/t/debug-why-a-derivation-has-a-reference-to-gcc/7009 + stripDebugList = [ "share/mpv/scripts" ]; + passthru.scriptName = "mpris.so"; + + meta = with lib; { + description = "MPRIS plugin for mpv"; + homepage = "https://github.com/hoyon/mpv-mpris"; + license = licenses.mit; + platforms = platforms.linux; + maintainers = with maintainers; [ ajs124 ]; + changelog = "https://github.com/hoyon/mpv-mpris/releases/tag/${version}"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix new file mode 100644 index 000000000000..56013b1fceeb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-cheatsheet.nix @@ -0,0 +1,42 @@ +{ lib, fetchFromGitHub, nodePackages, stdenvNoCC }: +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "mpv-cheatsheet"; + version = "0.30.0.2"; + + src = fetchFromGitHub { + owner = "ento"; + repo = "mpv-cheatsheet"; + rev = "v${finalAttrs.version}"; + hash = "sha256-MWK0CYto3zgn3fivmL43tvgZn6XrjPxKLp0lgTFdplM="; + }; + + nativeBuildInputs = [ + nodePackages.browserify + ]; + + buildPhase = '' + runHook preBuild + + make dist/${finalAttrs.passthru.scriptName} + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -D dist/${finalAttrs.passthru.scriptName} $out/share/mpv/scripts/${finalAttrs.passthru.scriptName} + + runHook postInstall + ''; + + + passthru.scriptName = "cheatsheet.js"; + + meta = with lib; { + description = "mpv script for looking up keyboard shortcuts"; + homepage = "https://github.com/ento/mpv-cheatsheet"; + license = licenses.mit; + maintainers = with maintainers; [ ambroisie ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix new file mode 100644 index 000000000000..5287c7f21108 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-playlistmanager.nix @@ -0,0 +1,27 @@ +{ lib, buildLua, fetchFromGitHub, unstableGitUpdater, yt-dlp }: + +buildLua rec { + pname = "mpv-playlistmanager"; + version = "unstable-2024-02-26"; + + src = fetchFromGitHub { + owner = "jonniek"; + repo = "mpv-playlistmanager"; + rev = "1911dc053951169c98cfcfd9f44ef87d9122ca80"; + hash = "sha256-pcdOMhkivLF5B86aNuHrqj77DuYLAFGlwFwY7jxkDkE="; + }; + passthru.updateScript = unstableGitUpdater {}; + + postPatch = '' + substituteInPlace playlistmanager.lua \ + --replace 'youtube_dl_executable = "youtube-dl",' \ + 'youtube_dl_executable = "${lib.getBin yt-dlp}/bin/yt-dlp"', + ''; + + meta = with lib; { + description = "Mpv lua script to create and manage playlists"; + homepage = "https://github.com/jonniek/mpv-playlistmanager"; + license = licenses.unlicense; + maintainers = with maintainers; [ lunik1 ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-webm.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-webm.nix new file mode 100644 index 000000000000..5645d6a65f6b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv-webm.nix @@ -0,0 +1,31 @@ +{ lib +, buildLua +, fetchFromGitHub +, luaPackages +, unstableGitUpdater +}: + +buildLua { + pname = "mpv-webm"; + version = "unstable-2023-11-18"; + + src = fetchFromGitHub { + owner = "ekisu"; + repo = "mpv-webm"; + rev = "6b5863f68275b3dc91c2507284c039ec8a4cbd97"; + hash = "sha256-rJamBm6FyxWcJO7VXXOUTO9piWCkPfEVdqGKGeJ/h0c="; + }; + passthru.updateScript = unstableGitUpdater {}; + + dontBuild = false; + nativeBuildInputs = [ luaPackages.moonscript ]; + scriptPath = "build/webm.lua"; + + meta = with lib; { + description = "Simple WebM maker for mpv, with no external dependencies"; + homepage = "https://github.com/ekisu/mpv-webm"; + license = licenses.mit; + platforms = platforms.all; + maintainers = with maintainers; [ pbsds ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpv.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv.nix new file mode 100644 index 000000000000..06e9ccb4d74a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpv.nix @@ -0,0 +1,35 @@ +{ lib +, buildLua +, mpv-unwrapped +}: + +let mkBuiltin = name: args: + let srcPath = "TOOLS/lua/${name}.lua"; + in buildLua (lib.attrsets.recursiveUpdate rec { + inherit (mpv-unwrapped) src version; + pname = "mpv-${name}"; + + dontUnpack = true; + scriptPath = "${src}/${srcPath}"; + + meta = with lib; { + inherit (mpv-unwrapped.meta) license; + homepage = "https://github.com/mpv-player/mpv/blob/v${version}/${srcPath}"; + }; + } args); + +in lib.mapAttrs (name: lib.makeOverridable (mkBuiltin name)) { + acompressor.meta = { + description = "Script to toggle and control ffmpeg's dynamic range compression filter."; + maintainers = with lib.maintainers; [ nicoo ]; + }; + + autocrop.meta.description = "This script uses the lavfi cropdetect filter to automatically insert a crop filter with appropriate parameters for the currently playing video."; + + autodeint.meta.description = "This script uses the lavfi idet filter to automatically insert the appropriate deinterlacing filter based on a short section of the currently playing video."; + + autoload.meta = { + description = "This script automatically loads playlist entries before and after the currently played file"; + maintainers = [ lib.maintainers.dawidsowa ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/mpvacious.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/mpvacious.nix new file mode 100644 index 000000000000..d6c5389b3277 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/mpvacious.nix @@ -0,0 +1,47 @@ +{ lib +, buildLua +, fetchFromGitHub +, gitUpdater +, curl +, wl-clipboard +, xclip +}: + +buildLua rec { + pname = "mpvacious"; + version = "0.26"; + + src = fetchFromGitHub { + owner = "Ajatt-Tools"; + repo = "mpvacious"; + rev = "v${version}"; + sha256 = "sha256-QPLJC6SxocvOPeY6qI8q+EyXNGVef3J/Z38W0/rzFCg="; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + postPatch = '' + substituteInPlace utils/forvo.lua \ + --replace "'curl" "'${curl}/bin/curl" + substituteInPlace platform/nix.lua \ + --replace "'curl" "'${curl}/bin/curl" \ + --replace "'wl-copy" "'${wl-clipboard}/bin/wl-copy" \ + --replace "'xclip" "'${xclip}/bin/xclip" + ''; + + installPhase = '' + runHook preInstall + make PREFIX=$out/share/mpv install + runHook postInstall + ''; + + passthru.scriptName = "mpvacious"; + + meta = with lib; { + description = "Adds mpv keybindings to create Anki cards from movies and TV shows"; + homepage = "https://github.com/Ajatt-Tools/mpvacious"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ kmicklas ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/occivink.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/occivink.nix new file mode 100644 index 000000000000..1f17a2717287 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/occivink.nix @@ -0,0 +1,45 @@ +{ lib +, fetchFromGitHub +, unstableGitUpdater +, buildLua +}: + +let + camelToKebab = let + inherit (lib.strings) match stringAsChars toLower; + isUpper = match "[A-Z]"; + in stringAsChars (c: if isUpper c != null then "-${toLower c}" else c); + + mkScript = name: args: + let self = rec { + pname = camelToKebab name; + version = "unstable-2024-01-11"; + src = fetchFromGitHub { + owner = "occivink"; + repo = "mpv-scripts"; + rev = "d0390c8e802c2e888ff4a2e1d5e4fb040f855b89"; + hash = "sha256-pc2aaO7lZaoYMEXv5M0WI7PtmqgkNbdtNiLZZwVzppM="; + }; + passthru.updateScript = unstableGitUpdater {}; + + scriptPath = "scripts/${pname}.lua"; + + meta = with lib; { + homepage = "https://github.com/occivink/mpv-scripts"; + license = licenses.unlicense; + maintainers = with maintainers; [ nicoo ]; + }; + + # Sadly needed to make `common-updaters` work here + pos = builtins.unsafeGetAttrPos "version" self; + }; + in buildLua (lib.attrsets.recursiveUpdate self args); + +in +lib.mapAttrs (name: lib.makeOverridable (mkScript name)) { + + # Usage: `pkgs.mpv.override { scripts = [ pkgs.mpvScripts.seekTo ]; }` + seekTo.meta.description = "Mpv script for seeking to a specific position"; + blacklistExtensions.meta.description = + "Automatically remove playlist entries based on their extension."; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/quack.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/quack.nix new file mode 100644 index 000000000000..e7138de92877 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/quack.nix @@ -0,0 +1,31 @@ +{ lib +, fetchFromGitHub +, unstableGitUpdater +, buildLua }: + +buildLua rec { + pname = "mpv-quack"; + + version = "unstable-2020-05-26"; + src = fetchFromGitHub { + owner = "CounterPillow"; + repo = pname; + rev = "1c87f36f9726d462dd112188c04be54d85692cf3"; + hash = "sha256-dEnJbS8RJoAxpKINdoMHN4l7vpEdf7+C5JVWpK0VXMw="; + }; + passthru.updateScript = unstableGitUpdater {}; + + meta = { + description = "Reduce audio volume after seeking"; + longDescription = '' + quack is an mpv script to temporarily reduce the volume after a seek, + in order to avoid loud noises when scrubbing through a movie. + + The volume is linearly increased back up to its original level. + Repeated seeks before the transition is done work as well. + ''; + homepage = "https://github.com/CounterPillow/quack"; + license = lib.licenses.gpl3; + maintainers = with lib.maintainers; [ nicoo ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/quality-menu.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/quality-menu.nix new file mode 100644 index 000000000000..c75e81068713 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/quality-menu.nix @@ -0,0 +1,30 @@ +{ lib +, buildLua +, fetchFromGitHub +, gitUpdater +, oscSupport ? false +}: + +buildLua rec { + pname = "mpv-quality-menu"; + version = "4.1.1"; + + src = fetchFromGitHub { + owner = "christoph-heinrich"; + repo = "mpv-quality-menu"; + rev = "v${version}"; + hash = "sha256-yrcTxqpLnOI1Tq3khhflO3wzhyeTPuvKifyH5/P57Ns="; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + extraScripts = lib.optional oscSupport "quality-menu-osc.lua"; + + meta = with lib; { + description = "A userscript for MPV that allows you to change youtube video quality (ytdl-format) on the fly"; + homepage = "https://github.com/christoph-heinrich/mpv-quality-menu"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ lunik1 ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/reload.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/reload.nix new file mode 100644 index 000000000000..6f316e2f5d42 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/reload.nix @@ -0,0 +1,29 @@ +{ lib +, fetchFromGitHub +, unstableGitUpdater +, buildLua }: + +buildLua rec { + pname = "mpv-reload"; + + version = "unstable-2023-12-19"; + src = fetchFromGitHub { + owner = "4e6"; + repo = pname; + rev = "133d596f6d369f320b4595bbed1f4a157b7b9ee5"; + hash = "sha256-B+4TCmf1T7MuwtbL+hGZoN1ktI31hnO5yayMG1zW8Ng="; + }; + passthru.updateScript = unstableGitUpdater {}; + + meta = { + description = "Manual & automatic reloading of videos"; + longDescription = '' + This script adds reloading of videos, automatically on timers (when stuck + buffering etc.) or manually on keybinds, to help with cases where a stream + is not loading further due to a network or remote issue. + ''; + homepage = "https://github.com/4e6/mpv-reload"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ nicoo ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix new file mode 100644 index 000000000000..bf973c9206c7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/simple-mpv-webui.nix @@ -0,0 +1,34 @@ +{ lib, buildLua +, fetchFromGitHub +, gitUpdater +}: +buildLua rec { + pname = "simple-mpv-ui"; + version = "3.0.0"; + + src = fetchFromGitHub { + owner = "open-dynaMIX"; + repo = "simple-mpv-webui"; + rev = "v${version}"; + hash = "sha256-I8lwpo3Hfpy3UnPMmHEJCdArVQnNL245NkxsYVmnMF0="; + sparseCheckout = [ "main.lua" "webui-page" ]; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + scriptPath = "."; + passthru.scriptName = "webui"; + + meta = with lib; { + description = "A web based user interface with controls for the mpv mediaplayer"; + homepage = "https://github.com/open-dynaMIX/simple-mpv-webui"; + maintainers = with maintainers; [ cript0nauta zopieux ]; + longDescription = '' + You can access the webui when accessing http://127.0.0.1:8080 or + http://[::1]:8080 in your webbrowser. By default it listens on + 0.0.0.0:8080 and [::0]:8080 + ''; + license = licenses.mit; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix new file mode 100644 index 000000000000..841fc8eb9b4f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock-minimal.nix @@ -0,0 +1,34 @@ +{ lib +, buildLua +, fetchFromGitea +, unstableGitUpdater +, curl +}: + +buildLua { + pname = "mpv_sponsorblock_minimal"; + version = "unstable-2023-08-20"; + scriptPath = "sponsorblock_minimal.lua"; + + src = fetchFromGitea { + domain = "codeberg.org"; + owner = "jouni"; + repo = "mpv_sponsorblock_minimal"; + rev = "ca2844b8cf7674bfccd282d389a50427742251d3"; + hash = "sha256-28HWZ6nOhKiE+5Ya1N3Vscd8aeH9OKS0t72e/xPfFQQ="; + }; + passthru.updateScript = unstableGitUpdater {}; + + preInstall = '' + substituteInPlace sponsorblock_minimal.lua \ + --replace "curl" "${lib.getExe curl}" + ''; + + meta = with lib; { + description = "A minimal script to skip sponsored segments of YouTube videos"; + homepage = "https://codeberg.org/jouni/mpv_sponsorblock_minimal"; + license = licenses.gpl3Only; + platforms = platforms.all; + maintainers = with maintainers; [ arthsmn ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock.nix new file mode 100644 index 000000000000..077b8f0590b2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/sponsorblock.nix @@ -0,0 +1,47 @@ +{ lib, buildLua, fetchFromGitHub, fetchpatch, python3, nix-update-script }: + +# Usage: `pkgs.mpv.override { scripts = [ pkgs.mpvScripts.sponsorblock ]; }` +buildLua { + pname = "mpv_sponsorblock"; + version = "unstable-2023-01-30"; + + src = fetchFromGitHub { + owner = "po5"; + repo = "mpv_sponsorblock"; + rev = "7785c1477103f2fafabfd65fdcf28ef26e6d7f0d"; + sha256 = "sha256-iUXaTWWFEdxhxClu2NYbQcThlvYty3A2dEYGooeAVAQ="; + }; + + patches = [ + # Use XDG_DATA_HOME and XDG_CACHE_HOME if defined for UID and DB + # Necessary to avoid sponsorblock to write in the nix store at runtime. + # https://github.com/po5/mpv_sponsorblock/pull/17 + (fetchpatch { + url = "https://github.com/po5/mpv_sponsorblock/pull/17/commits/e65b360a7d03a3430b4829e457a6670b2f617b09.patch"; + sha256 = "00wv0pvbz0dz2ibka66zhl2jk0pil4pyv6ipjfz37i81q6szyhs5"; + }) + (fetchpatch { + url = "https://github.com/po5/mpv_sponsorblock/pull/17/commits/3832304d959205e99120a14c0560ed3c37104b08.patch"; + sha256 = "149ffvn714n2m3mqs8mgrbs24bcr74kqfkx7wyql36ndhm88xd2z"; + }) + ]; + + postPatch = '' + substituteInPlace sponsorblock.lua \ + --replace "python3" "${python3}/bin/python3" \ + --replace 'mp.find_config_file("scripts")' "\"$out/share/mpv/scripts\"" + ''; + + postInstall = "cp -a sponsorblock_shared $out/share/mpv/scripts/"; + + passthru.updateScript = nix-update-script { + extraArgs = [ "--version=branch" ]; + }; + + meta = with lib; { + description = "Script for mpv to skip sponsored segments of YouTube videos"; + homepage = "https://github.com/po5/mpv_sponsorblock"; + license = licenses.gpl3; + maintainers = with maintainers; [ pacien ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/thumbfast.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/thumbfast.nix new file mode 100644 index 000000000000..7336fbe35dad --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/thumbfast.nix @@ -0,0 +1,25 @@ +{ lib, fetchFromGitHub, unstableGitUpdater, buildLua, mpv-unwrapped }: + +buildLua { + pname = "mpv-thumbfast"; + version = "unstable-2023-12-08"; + + src = fetchFromGitHub { + owner = "po5"; + repo = "thumbfast"; + rev = "03e93feee5a85bf7c65db953ada41b4826e9f905"; + hash = "sha256-5u5WBvWOEydJrnr/vilEgW4+fxkxM6wNjb9Fyyxx/1c="; + }; + passthru.updateScript = unstableGitUpdater {}; + + passthru.extraWrapperArgs = [ + "--prefix" "PATH" ":" "${lib.getBin mpv-unwrapped}/bin" + ]; + + meta = { + description = "High-performance on-the-fly thumbnailer for mpv"; + homepage = "https://github.com/po5/thumbfast"; + license = lib.licenses.mpl20; + maintainers = with lib.maintainers; [ apfelkuchen6 ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/thumbnail.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/thumbnail.nix new file mode 100644 index 000000000000..40c4fa8776d8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/thumbnail.nix @@ -0,0 +1,31 @@ +{ lib, buildLua, fetchFromGitHub, gitUpdater, python3 }: + +buildLua rec { + pname = "mpv-thumbnail-script"; + version = "0.5.3"; + + src = fetchFromGitHub { + owner = "marzzzello"; + repo = "mpv_thumbnail_script"; + rev = version; + sha256 = "sha256-J24Rou7BTE7zoiPlBkWuO9dtYJiuzkuwB4FROuzXzag="; + }; + passthru.updateScript = gitUpdater {}; + + nativeBuildInputs = [ python3 ]; + postPatch = "patchShebangs concat_files.py"; + dontBuild = false; + + scriptPath = "mpv_thumbnail_script_client_osc.lua"; + extraScripts = [ "mpv_thumbnail_script_server.lua" ]; + passthru.scriptName = "mpv_thumbnail_script_{client_osc,server}.lua"; + + meta = with lib; { + description = "A lua script to show preview thumbnails in mpv's OSC seekbar"; + homepage = "https://github.com/marzzzello/mpv_thumbnail_script"; + changelog = "https://github.com/marzzzello/mpv_thumbnail_script/releases/tag/${version}"; + license = licenses.gpl3Plus; + platforms = platforms.all; + maintainers = with maintainers; [ figsoda ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/uosc.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/uosc.nix new file mode 100644 index 000000000000..e5bb972a2418 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/uosc.nix @@ -0,0 +1,58 @@ +{ lib +, fetchFromGitHub +, fetchpatch +, gitUpdater +, makeFontsConf +, buildLua +, buildGoModule +}: + +buildLua (finalAttrs: { + pname = "uosc"; + version = "5.1.1"; + scriptPath = "src/uosc"; + + src = fetchFromGitHub { + owner = "tomasklaen"; + repo = "uosc"; + rev = finalAttrs.version; + hash = "sha256-+4k8T1yX3IRXK3XkUShsuJSH9w1Zla7CaRENcIqX4iM="; + }; + passthru.updateScript = gitUpdater {}; + + tools = buildGoModule { + pname = "uosc-bin"; + inherit (finalAttrs) version src; + vendorHash = "sha256-nkY0z2GiDxfNs98dpe+wZNI3dAXcuHaD/nHiZ2XnZ1Y="; + }; + + # Patch lua script to get the path to its `ziggy` binary form the environment + patches = [ + # uosc#814: Support overriding `ziggy_path` via environment variable + (fetchpatch { + url = "https://github.com/tomasklaen/uosc/commit/4fdf68a1bcb510824d66f35ecc7672a6452a44b2.patch"; + hash = "sha256-igUqFf8e7LVIIjGxACdIWAeZxjF/yqaCL4QRXrzNQXk="; + }) + ]; + + # the script uses custom "texture" fonts as the background for ui elements. + # In order for mpv to find them, we need to adjust the fontconfig search path. + postInstall = "cp -r src/fonts $out/share"; + passthru.extraWrapperArgs = [ + "--set" + "FONTCONFIG_FILE" + (toString (makeFontsConf { + fontDirectories = [ "${finalAttrs.finalPackage}/share/fonts" ]; + })) + "--set" + "MPV_UOSC_ZIGGY" + (lib.getExe' finalAttrs.tools "ziggy") + ]; + + meta = with lib; { + description = "Feature-rich minimalist proximity-based UI for MPV player"; + homepage = "https://github.com/tomasklaen/uosc"; + license = licenses.gpl3Only; + maintainers = with lib.maintainers; [ apfelkuchen6 ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/visualizer.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/visualizer.nix new file mode 100644 index 000000000000..bf412bdbf28f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/visualizer.nix @@ -0,0 +1,24 @@ +{ + lib, + buildLua, + fetchFromGitHub, + unstableGitUpdater, +}: +buildLua { + pname = "visualizer"; + version = "unstable-2023-08-13"; + + src = fetchFromGitHub { + owner = "mfcc64"; + repo = "mpv-scripts"; + rev = "7dbbfb283508714b73ead2a57b6939da1d139bd3"; + sha256 = "zzB4uBc1M2Gdr/JKY2uk8MY0hmQl1XeomkfTzuM45oE="; + }; + passthru.updateScript = unstableGitUpdater {}; + + meta = with lib; { + description = "various audio visualization"; + homepage = "https://github.com/mfcc64/mpv-scripts"; + maintainers = with maintainers; [kmein]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/vr-reversal.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/vr-reversal.nix new file mode 100644 index 000000000000..9a7b335a6591 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/vr-reversal.nix @@ -0,0 +1,38 @@ +{ lib, stdenvNoCC, fetchFromGitHub, gitUpdater, ffmpeg }: + +stdenvNoCC.mkDerivation rec { + pname = "vr-reversal"; + version = "1.1"; + + src = fetchFromGitHub { + owner = "dfaker"; + repo = pname; + rev = "v${version}"; + sha256 = "1wn2ngcvn7wcsl3kmj782x5q9130qw951lj6ilrkafp6q6zscpqr"; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + dontBuild = true; + + # reset_rot is only available in ffmpeg 5.0, see 5bcc61ce87922ecccaaa0bd303a7e195929859a8 + postPatch = lib.optionalString (lib.versionOlder ffmpeg.version "5.0") '' + substituteInPlace 360plugin.lua --replace ":reset_rot=1:" ":" + ''; + + installPhase = '' + mkdir -p $out/share/mpv/scripts + cp -r 360plugin.lua $out/share/mpv/scripts/ + ''; + + passthru.scriptName = "360plugin.lua"; + + meta = with lib; { + description = "Script for mpv to play VR video with optional saving of head tracking data."; + homepage = "https://github.com/dfaker/VR-reversal"; + license = licenses.unlicense; + platforms = platforms.all; + maintainers = with maintainers; [ schnusch ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix b/nixpkgs/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix new file mode 100644 index 000000000000..10fe3d0cdce0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/scripts/webtorrent-mpv-hook.nix @@ -0,0 +1,43 @@ +{ lib, buildNpmPackage, fetchFromGitHub, gitUpdater, nodejs, python3 }: + +buildNpmPackage rec { + pname = "webtorrent-mpv-hook"; + version = "1.4.1"; + + src = fetchFromGitHub { + owner = "mrxdst"; + repo = pname; + rev = "v${version}"; + hash = "sha256-/dMtXcIyfAs++Zgz2CxRW0tkzn5QjS+WVGChlCyrU0U="; + }; + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + postPatch = '' + substituteInPlace src/webtorrent.ts --replace "node_path: 'node'" "node_path: '${nodejs}/bin/node'" + # This executable is just for telling non-Nix users how to install + substituteInPlace package.json --replace '"bin": "build/bin.mjs",' "" + rm -rf src/bin.ts + ''; + + npmDepsHash = "sha256-EqHPBoYyBuW9elxQH/XVTZoPkKHC6+7aksYo60t7WA4="; + makeCacheWritable = true; + + nativeBuildInputs = [ + python3 # Fixes node-gyp on aarch64-linux + ]; + + postInstall = '' + mkdir -p $out/share/mpv/scripts/ + ln -s $out/lib/node_modules/webtorrent-mpv-hook/build/webtorrent.js $out/share/mpv/scripts/ + ''; + passthru.scriptName = "webtorrent.js"; + + meta = { + description = "Adds a hook that allows mpv to stream torrents"; + homepage = "https://github.com/mrxdst/webtorrent-mpv-hook"; + maintainers = [ lib.maintainers.chuangzhu ]; + license = lib.licenses.isc; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mpv/wrapper.nix b/nixpkgs/pkgs/applications/video/mpv/wrapper.nix new file mode 100644 index 000000000000..b427318121ef --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mpv/wrapper.nix @@ -0,0 +1,109 @@ +# Arguments that this derivation gets when it is created with `callPackage` +{ stdenv +, buildEnv +, lib +, makeWrapper +, mpvScripts +, symlinkJoin +, writeTextDir +, yt-dlp +}: + +# the unwrapped mpv derivation - 1st argument to `wrapMpv` +mpv: + +let + # arguments to the function (exposed as `wrapMpv` in all-packages.nix) + wrapper = { + extraMakeWrapperArgs ? [], + youtubeSupport ? true, + # a set of derivations (probably from `mpvScripts`) where each is + # expected to have a `scriptName` passthru attribute that points to the + # name of the script that would reside in the script's derivation's + # `$out/share/mpv/scripts/`. + # A script can optionally also provide an `extraWrapperArgs` passthru attribute. + scripts ? [], + extraUmpvWrapperArgs ? [] + }: + let + binPath = lib.makeBinPath ([ + mpv.luaEnv + ] ++ lib.optionals youtubeSupport [ + yt-dlp + ] ++ lib.optionals mpv.vapoursynthSupport [ + mpv.vapoursynth.python3 + ]); + # All arguments besides the input and output binaries (${mpv}/bin/mpv and + # $out/bin/mpv). These are used by the darwin specific makeWrapper call + # used to wrap $out/Applications/mpv.app/Contents/MacOS/mpv as well. + mostMakeWrapperArgs = lib.strings.escapeShellArgs ([ "--inherit-argv0" + # These are always needed (TODO: Explain why) + "--prefix" "LUA_CPATH" ";" "${mpv.luaEnv}/lib/lua/${mpv.lua.luaversion}/?.so" + "--prefix" "LUA_PATH" ";" "${mpv.luaEnv}/share/lua/${mpv.lua.luaversion}/?.lua" + ] ++ lib.optionals mpv.vapoursynthSupport [ + "--prefix" "PYTHONPATH" ":" "${mpv.vapoursynth}/${mpv.vapoursynth.python3.sitePackages}" + ] ++ lib.optionals (binPath != "") [ + "--prefix" "PATH" ":" binPath + ] ++ (lib.lists.flatten (map + # For every script in the `scripts` argument, add the necessary flags to the wrapper + (script: + [ + "--add-flags" + # Here we rely on the existence of the `scriptName` passthru + # attribute of the script derivation from the `scripts` + "--script=${script}/share/mpv/scripts/${script.scriptName}" + ] + # scripts can also set the `extraWrapperArgs` passthru + ++ (script.extraWrapperArgs or []) + ) scripts + )) ++ extraMakeWrapperArgs) + ; + umpvWrapperArgs = lib.strings.escapeShellArgs ([ + "--inherit-argv0" + "--set" "MPV" "${placeholder "out"}/bin/mpv" + ] ++ extraUmpvWrapperArgs) + ; + in + symlinkJoin { + name = "mpv-with-scripts-${mpv.version}"; + + # TODO: don't link all mpv outputs and convert package to mpv-unwrapped? + paths = [ mpv.all ]; + + nativeBuildInputs = [ makeWrapper ]; + + passthru.unwrapped = mpv; + + passthru.tests.mpv-scripts-should-not-collide = buildEnv { + name = "mpv-scripts-env"; + paths = lib.pipe mpvScripts [ + # filters "override" "overrideDerivation" "recurseForDerivations" + (lib.filterAttrs (key: script: lib.isDerivation script)) + # replaces unfree and meta.broken scripts with decent placeholders + (lib.mapAttrsToList (key: script: + if (builtins.tryEval script.outPath).success + then script + else writeTextDir "share/mpv/scripts/${script.scriptName}" "placeholder of ${script.name}" + )) + ]; + }; + + postBuild = '' + # wrapProgram can't operate on symlinks + rm "$out/bin/mpv" + makeWrapper "${mpv}/bin/mpv" "$out/bin/mpv" ${mostMakeWrapperArgs} + rm "$out/bin/umpv" + makeWrapper "${mpv}/bin/umpv" "$out/bin/umpv" ${umpvWrapperArgs} + '' + lib.optionalString stdenv.isDarwin '' + # wrapProgram can't operate on symlinks + rm "$out/Applications/mpv.app/Contents/MacOS/mpv" + makeWrapper "${mpv}/Applications/mpv.app/Contents/MacOS/mpv" "$out/Applications/mpv.app/Contents/MacOS/mpv" ${mostMakeWrapperArgs} + ''; + + meta = { + inherit (mpv.meta) homepage description longDescription maintainers; + mainProgram = "mpv"; + }; + }; +in + lib.makeOverridable wrapper diff --git a/nixpkgs/pkgs/applications/video/multiviewer-for-f1/default.nix b/nixpkgs/pkgs/applications/video/multiviewer-for-f1/default.nix new file mode 100644 index 000000000000..46e425992c15 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/multiviewer-for-f1/default.nix @@ -0,0 +1,103 @@ +{ stdenvNoCC +, fetchurl +, lib +, makeWrapper +, autoPatchelfHook +, dpkg +, alsa-lib +, at-spi2-atk +, cairo +, cups +, dbus +, expat +, ffmpeg +, glib +, gtk3 +, libdrm +, libudev0-shim +, libxkbcommon +, mesa +, nspr +, nss +, pango +, xorg +}: +let + id = "154421934"; +in +stdenvNoCC.mkDerivation rec { + pname = "multiviewer-for-f1"; + version = "1.31.3"; + + src = fetchurl { + url = "https://releases.multiviewer.dev/download/${id}/multiviewer-for-f1_${version}_amd64.deb"; + sha256 = "sha256-lFES+ukkI/GqKQdZwtaB+ov0hqAyFZ2N533LBKJ9oXg="; + }; + + nativeBuildInputs = [ + dpkg + makeWrapper + autoPatchelfHook + ]; + + buildInputs = [ + alsa-lib + at-spi2-atk + cairo + cups + dbus + expat + ffmpeg + glib + gtk3 + libdrm + libxkbcommon + mesa + nspr + nss + pango + xorg.libX11 + xorg.libXcomposite + xorg.libxcb + xorg.libXdamage + xorg.libXext + xorg.libXfixes + xorg.libXrandr + ]; + + dontBuild = true; + dontConfigure = true; + + unpackPhase = '' + runHook preUnpack + + # The deb file contains a setuid binary, so 'dpkg -x' doesn't work here + dpkg --fsys-tarfile $src | tar --extract + + runHook postUnpack + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out/share + mv -t $out/share usr/share/* usr/lib/multiviewer-for-f1 + + makeWrapper "$out/share/multiviewer-for-f1/MultiViewer for F1" $out/bin/multiviewer-for-f1 \ + --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform=wayland --enable-features=WaylandWindowDecorations}}" \ + --prefix LD_LIBRARY_PATH : "${lib.makeLibraryPath [ libudev0-shim ]}:\"$out/share/Multiviewer for F1\"" + + runHook postInstall + ''; + + meta = with lib; { + description = "Unofficial desktop client for F1 TV®"; + homepage = "https://multiviewer.app"; + downloadPage = "https://multiviewer.app/download"; + license = licenses.unfree; + maintainers = with maintainers; [ babeuh ]; + platforms = [ "x86_64-linux" ]; + mainProgram = "multiviewer-for-f1"; + }; +} + diff --git a/nixpkgs/pkgs/applications/video/mythtv/default.nix b/nixpkgs/pkgs/applications/video/mythtv/default.nix new file mode 100644 index 000000000000..deea5c1cb493 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mythtv/default.nix @@ -0,0 +1,63 @@ +{ lib, mkDerivation, fetchFromGitHub, fetchpatch, which, qtbase, qtwebkit, qtscript +, libpulseaudio, fftwSinglePrec , lame, zlib, libGLU, libGL, alsa-lib, freetype +, perl, pkg-config , libsamplerate, libbluray, lzo, libX11, libXv, libXrandr, libXvMC, libXinerama, libXxf86vm +, libXmu , yasm, libuuid, taglib, libtool, autoconf, automake, file, exiv2, linuxHeaders +, soundtouch, libzip, libhdhomerun +, withWebKit ? false +}: + +mkDerivation rec { + pname = "mythtv"; + version = "32.0"; + + src = fetchFromGitHub { + owner = "MythTV"; + repo = "mythtv"; + rev = "v${version}"; + sha256 = "0i4fs3rbk1jggh62wflpa2l03na9i1ihpz2vsdic9vfahqqjxff1"; + }; + + patches = [ + # Disable sourcing /etc/os-release + ./dont-source-os-release.patch + + # Fix QMake variable substitution syntax - MythTV/mythtv#550 + (fetchpatch { + name = "fix-qmake-var-syntax.patch"; + url = "https://github.com/MythTV/mythtv/commit/a8da7f7e7ec069164adbef65a8104adc9bb52e36.patch"; + stripLen = 1; + hash = "sha256-JfRME00YNNjl6SKs1HBa0wBa/lR/Rt3zbQtWhsC36JM="; + }) + + # Bachport the build against binutils-2.41 + (fetchpatch { + name = "binutils-2.41.patch"; + url = "https://github.com/MythTV/mythtv/commit/f9f9bba62ee2743c816cb2b9634b6b4397e5e2e3.patch"; + stripLen = 1; + hash = "sha256-IcXgBtfqPZ42inYFe7l8mWvKUV13S/YEQAHcOFaDivI="; + }) + ]; + + setSourceRoot = "sourceRoot=$(echo */mythtv)"; + + buildInputs = [ + freetype qtbase qtscript lame zlib libGLU libGL + perl libsamplerate libbluray lzo alsa-lib libpulseaudio fftwSinglePrec libX11 libXv libXrandr libXvMC + libXmu libXinerama libXxf86vm libXmu libuuid taglib exiv2 soundtouch libzip + libhdhomerun + ] ++ lib.optional withWebKit qtwebkit; + nativeBuildInputs = [ pkg-config which yasm libtool autoconf automake file ]; + + configureFlags = + [ "--dvb-path=${linuxHeaders}/include" ]; + + enableParallelBuilding = true; + + meta = with lib; { + homepage = "https://www.mythtv.org/"; + description = "Open Source DVR"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = [ maintainers.titanous ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/mythtv/dont-source-os-release.patch b/nixpkgs/pkgs/applications/video/mythtv/dont-source-os-release.patch new file mode 100644 index 000000000000..fb4dc686af6a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/mythtv/dont-source-os-release.patch @@ -0,0 +1,15 @@ +--- a/configure ++++ b/configure +@@ -5894,9 +5894,9 @@ else + die "ERROR: cannot find soundtouch 1.8.0 or later." + fi + +-if [ $target_os = "linux" ] ; then +- . /etc/os-release +-fi ++# if [ $target_os = "linux" ] ; then ++# . /etc/os-release ++# fi + + # libudfread + if enabled system_libudfread ; then diff --git a/nixpkgs/pkgs/applications/video/natron/default.nix b/nixpkgs/pkgs/applications/video/natron/default.nix new file mode 100644 index 000000000000..5ca88c666ee8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/natron/default.nix @@ -0,0 +1,103 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchpatch +, cmake +, pkg-config +, wrapQtAppsHook +, boost +, cairo +, ceres-solver +, expat +, extra-cmake-modules +, glog +, libXdmcp +, python3 +, wayland +}: + +let + minorVersion = "2.5"; + version = "${minorVersion}.0"; + OpenColorIO-Configs = fetchFromGitHub { + owner = "NatronGitHub"; + repo = "OpenColorIO-Configs"; + rev = "Natron-v${minorVersion}"; + hash = "sha256-TD7Uge9kKbFxOmOCn+TSQovnKTmFS3uERTu5lmZFHbc="; + }; +in +stdenv.mkDerivation { + inherit version; + pname = "natron"; + + src = fetchFromGitHub { + owner = "NatronGitHub"; + repo = "Natron"; + rev = "v${version}"; + fetchSubmodules = true; + hash = "sha256-dgScbfyulZPlrngqSw7xwipldoRd8uFO8VP9mlJyhQ8="; + }; + + patches = [ + # Fix gcc-13 build: + # https://github.com/NatronGitHub/Natron/pull/929 + (fetchpatch { + name = "gcc-13.patch"; + url = "https://github.com/NatronGitHub/Natron/commit/4b44fb18293035873b35c3a2d2aa29da78cb8740.patch"; + includes = ["Global/GlobalDefines.h"]; + hash = "sha256-9E1tJCvO7zA1iQAhrlL3GaBFIGpkjxNOr31behQXdhQ="; + }) + (fetchpatch { + name = "gcc-13.patch"; + url = "https://github.com/NatronGitHub/Natron/commit/f21f58622e32c1684567c82e2ab361f33030bda7.patch"; + includes = ["Engine/Noise.cpp"]; + hash = "sha256-t2mzTsRuXVs8d1BB/5uAY1OPxWRa3JTK1iAWLAMsrgs="; + }) + ]; + + cmakeFlags = [ "-DNATRON_SYSTEM_LIBS=ON" ]; + + nativeBuildInputs = [ + cmake + pkg-config + wrapQtAppsHook + ]; + + buildInputs = [ + boost + expat + cairo + python3 + python3.pkgs.pyside2 + python3.pkgs.shiboken2 + extra-cmake-modules + wayland + glog + ceres-solver + libXdmcp + ]; + + postInstall = '' + mkdir -p $out/share + cp -r ${OpenColorIO-Configs} $out/share/OpenColorIO-Configs + ''; + + postFixup = '' + wrapProgram $out/bin/Natron \ + --prefix PYTHONPATH : "${python3.pkgs.makePythonPath [ python3.pkgs.qtpy python3.pkgs.pyside2 ]}" \ + --set-default OCIO "$out/share/OpenColorIO-Configs/blender/config.ocio" + ''; + + meta = with lib; { + description = "Node-graph based, open-source compositing software"; + longDescription = '' + Node-graph based, open-source compositing software. Similar in + functionalities to Adobe After Effects and Nuke by The Foundry. + ''; + homepage = "https://natron.fr/"; + license = lib.licenses.gpl2; + maintainers = [ maintainers.puffnfresh ]; + platforms = platforms.linux; + broken = stdenv.isLinux && stdenv.isAarch64; + }; +} diff --git a/nixpkgs/pkgs/applications/video/netflix/default.nix b/nixpkgs/pkgs/applications/video/netflix/default.nix new file mode 100644 index 000000000000..8c50e027c0e2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/netflix/default.nix @@ -0,0 +1,62 @@ +{ fetchurl +, google-chrome +, lib +, makeDesktopItem +, runtimeShell +, symlinkJoin +, writeScriptBin + + # command line arguments which are always set e.g "--disable-gpu" +, commandLineArgs ? [ ] +}: + +let + name = "netflix-via-google-chrome"; + + meta = { + description = "Open Netflix in Google Chrome app mode"; + longDescription = '' + Netflix is a video streaming service providing films, TV series and exclusive content. See https://www.netflix.com. + + This package installs an application launcher item that opens Netflix in a dedicated Google Chrome window. If your preferred browser doesn't support Netflix's DRM, this package provides a quick and easy way to launch Netflix on a supported browser, without polluting your application list with a redundant, single-purpose browser. + ''; + homepage = google-chrome.meta.homepage or null; + license = lib.licenses.unfree; + maintainers = [ lib.maintainers.roberth ]; + platforms = google-chrome.meta.platforms or lib.platforms.all; + }; + + desktopItem = makeDesktopItem { + inherit name; + # Executing by name as opposed to store path is conventional and prevents + # copies of the desktop file from bitrotting too much. + # (e.g. a copy in ~/.config/autostart, you lazy lazy bastard ;) ) + exec = name; + icon = fetchurl { + name = "netflix-icon-2016.png"; + url = "https://assets.nflxext.com/us/ffe/siteui/common/icons/nficon2016.png"; + sha256 = "sha256-c0H3uLCuPA2krqVZ78MfC1PZ253SkWZP3PfWGP2V7Yo="; + meta.license = lib.licenses.unfree; + }; + desktopName = "Netflix via Google Chrome"; + genericName = "A video streaming service providing films and exclusive TV series"; + categories = [ "TV" "AudioVideo" "Network" ]; + startupNotify = true; + }; + + script = writeScriptBin name '' + #!${runtimeShell} + exec ${google-chrome}/bin/${google-chrome.meta.mainProgram} ${lib.escapeShellArgs commandLineArgs} \ + --app=https://netflix.com \ + --no-first-run \ + --no-default-browser-check \ + --no-crash-upload \ + "$@" + ''; + +in + +symlinkJoin { + inherit name meta; + paths = [ script desktopItem ]; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/Enable-file-access-and-universal-access-for-file-URL.patch b/nixpkgs/pkgs/applications/video/obs-studio/Enable-file-access-and-universal-access-for-file-URL.patch new file mode 100644 index 000000000000..49d01bacbd10 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/Enable-file-access-and-universal-access-for-file-URL.patch @@ -0,0 +1,36 @@ +From 0de0a90f8fe5e1e48fa4ec7aa7c825ef88770f9d Mon Sep 17 00:00:00 2001 +From: Ryan Foster <RytoEX@gmail.com> +Date: Mon, 9 Sep 2019 23:55:02 -0400 +Subject: [PATCH] Enable file access and universal access for file URLs + +When loading a local file, instead of disabling CEF's web security, +enable file access and universal access for file URLs. This should allow +local files to make CORS requests without completely disabling CEF's +security model. +--- + obs-browser-source.cpp | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/obs-browser-source.cpp b/obs-browser-source.cpp +index ab1181e..c775283 100644 +--- a/plugins/obs-browser/obs-browser-source.cpp ++++ b/plugins/obs-browser/obs-browser-source.cpp +@@ -179,9 +179,12 @@ bool BrowserSource::CreateBrowser() + + #if ENABLE_LOCAL_FILE_URL_SCHEME + if (is_local) { +- /* Disable web security for file:// URLs to allow +- * local content access to remote APIs */ +- cefBrowserSettings.web_security = STATE_DISABLED; ++ /* Enable file access and universal access from file:// ++ * URLs to allow local content access to remote APIs */ ++ cefBrowserSettings.file_access_from_file_urls = ++ STATE_ENABLED; ++ cefBrowserSettings.universal_access_from_file_urls = ++ STATE_ENABLED; + } + #endif + +-- +2.31.1 + diff --git a/nixpkgs/pkgs/applications/video/obs-studio/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/default.nix new file mode 100644 index 000000000000..29bb90a9dd8d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/default.nix @@ -0,0 +1,218 @@ +{ config +, lib +, stdenv +, fetchFromGitHub +, fetchpatch +, addOpenGLRunpath +, cmake +, fdk_aac +, ffmpeg +, jansson +, libjack2 +, libxkbcommon +, libpthreadstubs +, libXdmcp +, qtbase +, qtsvg +, speex +, libv4l +, x264 +, curl +, wayland +, xorg +, pkg-config +, libvlc +, libGL +, mbedtls +, wrapGAppsHook +, scriptingSupport ? true +, luajit +, swig4 +, python3 +, alsaSupport ? stdenv.isLinux +, alsa-lib +, pulseaudioSupport ? config.pulseaudio or stdenv.isLinux +, libpulseaudio +, libcef +, pciutils +, pipewireSupport ? stdenv.isLinux +, withFdk ? true +, pipewire +, libdrm +, libajantv2 +, librist +, libva +, srt +, qtwayland +, wrapQtAppsHook +, nlohmann_json +, websocketpp +, asio +, decklinkSupport ? false +, blackmagic-desktop-video +, libdatachannel +, libvpl +, qrcodegencpp +}: + +let + inherit (lib) optional optionals; +in + +stdenv.mkDerivation (finalAttrs: { + pname = "obs-studio"; + version = "30.0.2"; + + src = fetchFromGitHub { + owner = "obsproject"; + repo = finalAttrs.pname; + rev = finalAttrs.version; + sha256 = "sha256-8pX1kqibrtDIaE1+/Pey1A5bu6MwFTXLrBOah4rsF+4="; + fetchSubmodules = true; + }; + + patches = [ + # Lets obs-browser build against CEF 90.1.0+ + ./Enable-file-access-and-universal-access-for-file-URL.patch + ./fix-nix-plugin-path.patch + + # Backport ffmpeg 6.1 / GCC 13 build fixes + # FIXME: remove in next release + (fetchpatch { + url = "https://github.com/obsproject/obs-studio/commit/cd784644f5e82b9988043f229c19603289c6d32c.patch"; + hash = "sha256-S4JE5kgr4x3uMHY2GRh0GBJpb7o/wYZb/v0CDITFNnQ="; + }) + (fetchpatch { + url = "https://github.com/obsproject/obs-studio/commit/758b47d4ed9a25b8d64ad481d8d039990b9e57c9.patch"; + hash = "sha256-jYpjwhx6e+dhN3kzbd6FcdjQ+WhIX0/BOu9PSkt+2yI="; + }) + (fetchpatch { + url = "https://github.com/obsproject/obs-studio/commit/4b5be75c7e4b8cee908ed4a02fe0078285b4e8c9.patch"; + hash = "sha256-tuOevhyxchwG42ilrplbiWoiDAKaY4HgzShlvp4VSQI="; + }) + (fetchpatch { + url = "https://github.com/obsproject/obs-studio/commit/6e080a68067b27fe5463f0f4eee7df690451f3d7.patch"; + hash = "sha256-nbn/q3uszoHaDvaW8Et1MS1sgQzMsJRmjGSMHzUxV70="; + }) + + # Fix libobs.pc for plugins on non-x86 systems + (fetchpatch { + name = "fix-arm64-cmake.patch"; + url = "https://git.alpinelinux.org/aports/plain/community/obs-studio/broken-config.patch?id=a92887564dcc65e07b6be8a6224fda730259ae2b"; + hash = "sha256-yRSw4VWDwMwysDB3Hw/tsmTjEQUhipvrVRQcZkbtuoI="; + includes = [ "*/CompilerConfig.cmake" ]; + }) + ]; + + nativeBuildInputs = [ + addOpenGLRunpath + cmake + pkg-config + wrapGAppsHook + wrapQtAppsHook + ] + ++ optional scriptingSupport swig4; + + buildInputs = [ + curl + ffmpeg + jansson + libcef + libjack2 + libv4l + libxkbcommon + libpthreadstubs + libXdmcp + qtbase + qtsvg + speex + wayland + x264 + libvlc + mbedtls + pciutils + libajantv2 + librist + libva + srt + qtwayland + nlohmann_json + websocketpp + asio + libdatachannel + libvpl + qrcodegencpp + ] + ++ optionals scriptingSupport [ luajit python3 ] + ++ optional alsaSupport alsa-lib + ++ optional pulseaudioSupport libpulseaudio + ++ optionals pipewireSupport [ pipewire libdrm ] + ++ optional withFdk fdk_aac; + + # Copied from the obs-linuxbrowser + postUnpack = '' + mkdir -p cef/Release cef/Resources cef/libcef_dll_wrapper/ + for i in ${libcef}/share/cef/*; do + ln -s $i cef/Release/ + ln -s $i cef/Resources/ + done + ln -s ${libcef}/lib/libcef.so cef/Release/ + ln -s ${libcef}/lib/libcef_dll_wrapper.a cef/libcef_dll_wrapper/ + ln -s ${libcef}/include cef/ + ''; + + cmakeFlags = [ + "-DOBS_VERSION_OVERRIDE=${finalAttrs.version}" + "-Wno-dev" # kill dev warnings that are useless for packaging + # Add support for browser source + "-DBUILD_BROWSER=ON" + "-DCEF_ROOT_DIR=../../cef" + "-DENABLE_JACK=ON" + (lib.cmakeBool "ENABLE_QSV11" stdenv.hostPlatform.isx86_64) + (lib.cmakeBool "ENABLE_LIBFDK" withFdk) + (lib.cmakeBool "ENABLE_ALSA" alsaSupport) + (lib.cmakeBool "ENABLE_PULSEAUDIO" pulseaudioSupport) + (lib.cmakeBool "ENABLE_PIPEWIRE" pipewireSupport) + ]; + + dontWrapGApps = true; + preFixup = let + wrapperLibraries = [ + xorg.libX11 + libvlc + libGL + ] ++ optionals decklinkSupport [ + blackmagic-desktop-video + ]; + in '' + # Remove libcef before patchelf, otherwise it will fail + rm $out/lib/obs-plugins/libcef.so + + qtWrapperArgs+=( + --prefix LD_LIBRARY_PATH : "$out/lib:${lib.makeLibraryPath wrapperLibraries}" + ''${gappsWrapperArgs[@]} + ) + ''; + + postFixup = lib.optionalString stdenv.isLinux '' + addOpenGLRunpath $out/lib/lib*.so + addOpenGLRunpath $out/lib/obs-plugins/*.so + + # Link libcef again after patchelfing other libs + ln -s ${libcef}/lib/* $out/lib/obs-plugins/ + ''; + + meta = with lib; { + description = "Free and open source software for video recording and live streaming"; + longDescription = '' + This project is a rewrite of what was formerly known as "Open Broadcaster + Software", software originally designed for recording and streaming live + video content, efficiently + ''; + homepage = "https://obsproject.com"; + maintainers = with maintainers; [ eclairevoyant jb55 MP2E materus fpletz ]; + license = with licenses; [ gpl2Plus ] ++ optional withFdk fraunhofer-fdk; + platforms = [ "x86_64-linux" "i686-linux" "aarch64-linux" ]; + mainProgram = "obs"; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/obs-studio/fix-nix-plugin-path.patch b/nixpkgs/pkgs/applications/video/obs-studio/fix-nix-plugin-path.patch new file mode 100644 index 000000000000..baf45104e6a8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/fix-nix-plugin-path.patch @@ -0,0 +1,26 @@ +diff --git a/cmake/Modules/ObsDefaults_Linux.cmake b/cmake/Modules/ObsDefaults_Linux.cmake +index d1e58a083..a03c6b98e 100644 +--- a/cmake/Modules/ObsDefaults_Linux.cmake ++++ b/cmake/Modules/ObsDefaults_Linux.cmake +@@ -76,7 +76,7 @@ macro(setup_obs_project) + set(OBS_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/") + set(OBS_DATA_PATH "${OBS_DATA_DESTINATION}") + +- set(OBS_SCRIPT_PLUGIN_PATH "${CMAKE_INSTALL_PREFIX}/${OBS_SCRIPT_PLUGIN_DESTINATION}") ++ set(OBS_SCRIPT_PLUGIN_PATH "${OBS_SCRIPT_PLUGIN_DESTINATION}") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${OBS_LIBRARY_DESTINATION}") + else() + set(OBS_EXECUTABLE_DESTINATION "bin/${_ARCH_SUFFIX}bit") +diff --git a/libobs/obs-nix.c b/libobs/obs-nix.c +index b006a5598..531655eb3 100644 +--- a/libobs/obs-nix.c ++++ b/libobs/obs-nix.c +@@ -56,7 +56,7 @@ const char *get_module_extension(void) + #define FLATPAK_PLUGIN_PATH "/app/plugins" + + static const char *module_bin[] = { +- OBS_INSTALL_PREFIX "/" OBS_PLUGIN_DESTINATION, ++ OBS_PLUGIN_DESTINATION, + "../../obs-plugins/" BIT_STRING, + FLATPAK_PLUGIN_PATH "/" OBS_PLUGIN_DESTINATION, + }; diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix new file mode 100644 index 000000000000..b776981522d0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/advanced-scene-switcher/default.nix @@ -0,0 +1,77 @@ +{ lib +, fetchFromGitHub + +, cmake +, ninja + +, alsa-lib +, asio +, curl +, nlohmann_json +, obs-studio +, opencv +, procps +, qtbase +, stdenv +, tesseract +, websocketpp +, xorg + +, httplib +, libremidi +}: + +stdenv.mkDerivation rec { + pname = "advanced-scene-switcher"; + version = "1.24.2"; + + src = fetchFromGitHub { + owner = "WarmUpTill"; + repo = "SceneSwitcher"; + rev = version; + hash = "sha256-J5Qcs2eoKMeO1O/MCsR5wfmfbtndRaZmHrbleEZqqOo="; + }; + + nativeBuildInputs = [ + cmake + ninja + ]; + + buildInputs = [ + alsa-lib + asio + curl + libremidi + nlohmann_json + obs-studio + opencv + procps + qtbase + tesseract + websocketpp + xorg.libXScrnSaver + ]; + + dontWrapQtApps = true; + + postUnpack = '' + cp -r ${httplib.src}/* $sourceRoot/deps/cpp-httplib + cp -r ${libremidi.src}/* $sourceRoot/deps/libremidi + chmod -R +w $sourceRoot/deps/cpp-httplib + chmod -R +w $sourceRoot/deps/libremidi + ''; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "An automated scene switcher for OBS Studio"; + homepage = "https://github.com/WarmUpTill/SceneSwitcher"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/default.nix new file mode 100644 index 000000000000..1ae2ddc9724f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/default.nix @@ -0,0 +1,86 @@ +{ callPackage, qt6Packages, pkgsi686Linux }: + +# When adding new plugins: +# - Respect alphabetical order. On diversion, file a PR. +# - Plugin name should reflect upstream's name. Including or excluding "obs" prefix/suffix. +# - Add plugin to it's own directory (because of future patches). + +{ + advanced-scene-switcher = qt6Packages.callPackage ./advanced-scene-switcher { }; + + droidcam-obs = callPackage ./droidcam-obs { }; + + input-overlay = qt6Packages.callPackage ./input-overlay.nix { }; + + looking-glass-obs = callPackage ./looking-glass-obs.nix { }; + + obs-3d-effect = callPackage ./obs-3d-effect.nix { }; + + obs-backgroundremoval = callPackage ./obs-backgroundremoval { }; + + obs-command-source = callPackage ./obs-command-source.nix { }; + + obs-composite-blur = callPackage ./obs-composite-blur.nix { }; + + obs-freeze-filter = qt6Packages.callPackage ./obs-freeze-filter.nix { }; + + obs-gradient-source = callPackage ./obs-gradient-source.nix { }; + + obs-gstreamer = callPackage ./obs-gstreamer.nix { }; + + obs-hyperion = qt6Packages.callPackage ./obs-hyperion/default.nix { }; + + obs-livesplit-one = callPackage ./obs-livesplit-one { }; + + obs-move-transition = callPackage ./obs-move-transition.nix { }; + + obs-multi-rtmp = qt6Packages.callPackage ./obs-multi-rtmp { }; + + obs-mute-filter = callPackage ./obs-mute-filter.nix { }; + + obs-ndi = qt6Packages.callPackage ./obs-ndi { }; + + obs-nvfbc = callPackage ./obs-nvfbc.nix { }; + + obs-pipewire-audio-capture = callPackage ./obs-pipewire-audio-capture.nix { }; + + obs-replay-source = qt6Packages.callPackage ./obs-replay-source.nix { }; + + obs-rgb-levels-filter = callPackage ./obs-rgb-levels-filter.nix { }; + + obs-scale-to-sound = callPackage ./obs-scale-to-sound.nix { }; + + obs-shaderfilter = qt6Packages.callPackage ./obs-shaderfilter.nix { }; + + obs-source-clone = callPackage ./obs-source-clone.nix { }; + + obs-source-record = callPackage ./obs-source-record.nix { }; + + obs-source-switcher = callPackage ./obs-source-switcher.nix { }; + + obs-teleport = callPackage ./obs-teleport { }; + + obs-text-pthread = callPackage ./obs-text-pthread.nix { }; + + obs-transition-table = qt6Packages.callPackage ./obs-transition-table.nix { }; + + obs-tuna = qt6Packages.callPackage ./obs-tuna { }; + + obs-vaapi = callPackage ./obs-vaapi { }; + + obs-vertical-canvas = qt6Packages.callPackage ./obs-vertical-canvas.nix { }; + + obs-vintage-filter = callPackage ./obs-vintage-filter.nix { }; + + obs-vkcapture = callPackage ./obs-vkcapture.nix { + obs-vkcapture32 = pkgsi686Linux.obs-studio-plugins.obs-vkcapture; + }; + + obs-websocket = qt6Packages.callPackage ./obs-websocket.nix { }; # Websocket 4.x compatibility for OBS Studio 28+ + + obs-webkitgtk = callPackage ./obs-webkitgtk.nix { }; + + wlrobs = callPackage ./wlrobs.nix { }; + + waveform = callPackage ./waveform { }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix new file mode 100644 index 000000000000..a1cf5f2e7eef --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/droidcam-obs/default.nix @@ -0,0 +1,70 @@ +{ lib +, stdenv +, fetchFromGitHub +, obs-studio +, ffmpeg +, libjpeg +, libimobiledevice +, libusbmuxd +, libplist +}: + +stdenv.mkDerivation rec { + pname = "droidcam-obs"; + version = "2.0.2"; + + src = fetchFromGitHub { + owner = "dev47apps"; + repo = "droidcam-obs-plugin"; + rev = version; + sha256 = "sha256-YtfWwgBhyQYx6QfrKld7p6qUf8BEV/kkQX4QcdHuaYU="; + }; + + postPatch = '' + substituteInPlace ./linux/linux.mk \ + --replace "-limobiledevice" "-limobiledevice-1.0" \ + --replace "-I/usr/include/obs" "-I${obs-studio}/include/obs" \ + --replace "-I/usr/include/ffmpeg" "-I${ffmpeg}/include" + ''; + + preBuild = '' + mkdir ./build + ''; + + buildInputs = [ + libjpeg + libimobiledevice + libusbmuxd + libplist + obs-studio + ffmpeg + ]; + + makeFlags = [ + "ALLOW_STATIC=no" + "JPEG_DIR=${lib.getDev libjpeg}" + "JPEG_LIB=${lib.getLib libjpeg}/lib" + "IMOBILEDEV_DIR=${libimobiledevice}" + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/share/obs/obs-plugins/droidcam-obs + mkdir -p $out/lib/obs-plugins + cp build/droidcam-obs.so $out/lib/obs-plugins + cp -R ./data/locale $out/share/obs/obs-plugins/droidcam-obs/locale + + runHook postInstall + ''; + + doCheck = false; + + meta = with lib; { + description = "DroidCam OBS"; + homepage = "https://github.com/dev47apps/droidcam-obs-plugin"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ ulrikstrid ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/input-overlay.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/input-overlay.nix new file mode 100644 index 000000000000..419f470fccb1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/input-overlay.nix @@ -0,0 +1,49 @@ +{ stdenv, lib +, fetchFromGitHub +, cmake +, pkg-config +, obs-studio +, libuiohook +, qtbase +, xorg +, libxkbcommon +, libxkbfile +}: + +stdenv.mkDerivation rec { + pname = "obs-input-overlay"; + version = "5.0.0"; + src = fetchFromGitHub { + owner = "univrsal"; + repo = "input-overlay"; + rev = "v${version}"; + sha256 = "sha256-kpVAvQpBU8TxHAFcx/ok67++4MHh5saoRHJc5XpY4YQ="; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ cmake pkg-config ]; + buildInputs = [ + obs-studio libuiohook qtbase + xorg.libX11 xorg.libXau xorg.libXdmcp xorg.libXtst xorg.libXext + xorg.libXi xorg.libXt xorg.libXinerama libxkbcommon libxkbfile + ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + dontWrapQtApps = true; + + meta = with lib; { + description = "Show keyboard, gamepad and mouse input on stream "; + homepage = "https://github.com/univrsal/input-overlay"; + maintainers = with maintainers; [ glittershark ]; + license = licenses.gpl2; + platforms = platforms.linux; + # never built on aarch64-linux since first introduction in nixpkgs + broken = stdenv.isLinux && stdenv.isAarch64; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/looking-glass-obs.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/looking-glass-obs.nix new file mode 100644 index 000000000000..b581dc440222 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/looking-glass-obs.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, cmake, libbfd, SDL2, obs-studio +, looking-glass-client }: + +stdenv.mkDerivation { + pname = "looking-glass-obs"; + version = looking-glass-client.version; + + src = looking-glass-client.src; + + sourceRoot = "${looking-glass-client.src.name}/obs"; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio libbfd SDL2 ]; + + env.NIX_CFLAGS_COMPILE = "-mavx"; + + installPhase = '' + mkdir -p $out/lib/obs-plugins/ + mv liblooking-glass-obs.so $out/lib/obs-plugins/ + ''; + + meta = with lib; { + description = "Plugin for OBS Studio for efficient capturing of looking-glass"; + homepage = "https://looking-glass.io/docs/stable/obs/"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ babbaj ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-3d-effect.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-3d-effect.nix new file mode 100644 index 000000000000..d897af9a8b8c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-3d-effect.nix @@ -0,0 +1,37 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-3d-effect"; + version = "0.1.0"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-3d-effect"; + rev = version; + sha256 = "sha256-CAWx1wgk6G+9O7PkplrTg7uCmb8Yt6U3Z6YMVsq7IrQ="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for OBS Studio adding 3D effect filter"; + homepage = "https://github.com/exeldro/obs-3d-effect"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-backgroundremoval/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-backgroundremoval/default.nix new file mode 100644 index 000000000000..766fca414cd8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-backgroundremoval/default.nix @@ -0,0 +1,45 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +, onnxruntime +, opencv +}: + +stdenv.mkDerivation rec { + pname = "obs-backgroundremoval"; + version = "0.5.16"; + + src = fetchFromGitHub { + owner = "royshil"; + repo = "obs-backgroundremoval"; + rev = "v${version}"; + hash = "sha256-E+pm/Ma6dZTYlX3DpB49ynTETsRS2TBqgHSCijl/Txc="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio onnxruntime opencv ]; + + dontWrapQtApps = true; + + cmakeFlags = [ + "-DUSE_SYSTEM_ONNXRUNTIME=ON" + "-DUSE_SYSTEM_OPENCV=ON" + ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "OBS plugin to replace the background in portrait images and video"; + homepage = "https://github.com/royshil/obs-backgroundremoval"; + maintainers = with maintainers; [ zahrun ]; + license = licenses.mit; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix new file mode 100644 index 000000000000..f38d53a14101 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-command-source.nix @@ -0,0 +1,36 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-command-source"; + version = "0.4.0"; + + src = fetchFromGitHub { + owner = "norihiro"; + repo = "obs-command-source"; + rev = version; + sha256 = "sha256-rBGMQb7iGtxF54bBOK5lHI6VFYCSEyeSq2Arz0T0DPo="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "OBS Studio plugin that provides a dummy source to execute arbitrary commands when a scene is switched."; + homepage = "https://github.com/norihiro/command-source"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix new file mode 100644 index 000000000000..c1f2073ae6e1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-composite-blur.nix @@ -0,0 +1,42 @@ +{ lib +, stdenv +, fetchFromGitHub +, obs-studio +, cmake +}: + +stdenv.mkDerivation rec { + pname = "obs-composite-blur"; + version = "1.1.0"; + + src = fetchFromGitHub { + owner = "FiniteSingularity"; + repo = "obs-composite-blur"; + rev = "refs/tags/v${version}"; + hash = "sha256-icn0X+c7Uf0nTFaVDVTPi26sfWTSeoAj7+guEn9gi9Y="; + }; + + buildInputs = [ + obs-studio + ]; + + nativeBuildInputs = [ + cmake + ]; + + postInstall = '' + rm -rf "$out/share" + mkdir -p "$out/share/obs" + mv "$out/data/obs-plugins" "$out/share/obs" + rm -rf "$out/obs-plugins" "$out/data" + ''; + + meta = with lib; { + description = "A comprehensive blur plugin for OBS that provides several different blur algorithms, and proper compositing"; + homepage = "https://github.com/FiniteSingularity/obs-composite-blur"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ GaetanLepage ]; + mainProgram = "obs-composite-blur"; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-freeze-filter.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-freeze-filter.nix new file mode 100644 index 000000000000..1460e77fbf86 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-freeze-filter.nix @@ -0,0 +1,40 @@ +{ stdenv +, lib +, fetchFromGitHub +, cmake +, obs-studio +, qtbase +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "obs-freeze-filter"; + version = "0.3.3"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-freeze-filter"; + rev = finalAttrs.version; + sha256 = "sha256-CaHBTfdk8VFjmiclG61elj35glQafgz5B4ENo+7J35o="; + fetchSubmodules = true; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio qtbase ]; + + postInstall = '' + rm -rf "$out/share" + mkdir -p "$out/share/obs" + mv "$out/data/obs-plugins" "$out/share/obs" + rm -rf "$out/obs-plugins" "$out/data" + ''; + + dontWrapQtApps = true; + + meta = with lib; { + description = "Plugin for OBS Studio to freeze a source using a filter"; + homepage = "https://github.com/exeldro/obs-freeze-filter"; + license = licenses.gpl2Only; + platforms = platforms.linux; + maintainers = with maintainers; [ pschmitt ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gradient-source.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gradient-source.nix new file mode 100644 index 000000000000..13255c2898c2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gradient-source.nix @@ -0,0 +1,37 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-gradient-source"; + version = "0.3.2"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-gradient-source"; + rev = version; + sha256 = "sha256-5pll84UZYOTESrid2UuC1aWlaLrWf1LpXqlV09XKLug="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for adding a gradient Source to OBS Studio"; + homepage = "https://github.com/exeldro/obs-gradient-source"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix new file mode 100644 index 000000000000..e58220bce7e8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-gstreamer.nix @@ -0,0 +1,54 @@ +{ lib +, stdenv +, fetchFromGitHub +, gst_all_1 +, pkg-config +, meson +, ninja +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-gstreamer"; + version = "0.4.0"; + + src = fetchFromGitHub { + owner = "fzwoch"; + repo = pname; + rev = "v${version}"; + hash = "sha256-C4yee7hzkSOjIeaacLaTGPzZ1qYdYtHK5a3m9gz2pPI="; + }; + + nativeBuildInputs = [ pkg-config meson ninja ]; + buildInputs = with gst_all_1; [ gstreamer gst-plugins-base obs-studio ]; + + # - We need "getLib" instead of default derivation, otherwise it brings gstreamer-bin; + # - without gst-plugins-base it won't even show proper errors in logs; + # - Without gst-plugins-bad it won't find element "h264parse"; + # - gst-plugins-ugly adds "x264" to "Encoder type"; + # Tip: "could not link appsrc to videoconvert1" can mean a lot of things, enable GST_DEBUG=2 for help. + passthru.obsWrapperArguments = + let + gstreamerHook = package: "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${lib.getLib package}/lib/gstreamer-1.0"; + in + with gst_all_1; builtins.map gstreamerHook [ + gstreamer + gst-plugins-base + gst-plugins-bad + gst-plugins-ugly + ]; + + # Fix output directory + postInstall = '' + mkdir $out/lib/obs-plugins + mv $out/lib/obs-gstreamer.so $out/lib/obs-plugins/ + ''; + + meta = with lib; { + description = "An OBS Studio source, encoder and video filter plugin to use GStreamer elements/pipelines in OBS Studio"; + homepage = "https://github.com/fzwoch/obs-gstreamer"; + maintainers = with maintainers; [ ahuzik pedrohlc ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix new file mode 100644 index 000000000000..85606e05f0c1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-hyperion/default.nix @@ -0,0 +1,37 @@ +{ stdenv, lib, fetchFromGitHub, cmake, pkg-config, obs-studio, libGL +, qtbase, flatbuffers }: + +stdenv.mkDerivation rec { + pname = "obs-hyperion"; + version = "1.0.2"; + + src = fetchFromGitHub { + owner = "hyperion-project"; + repo = "hyperion-obs-plugin"; + rev = version; + sha256 = "sha256-UAfjafoZhhhHRSo+eUBLhHaCmn2GYFcYyRb9wHIp/9I="; + }; + + nativeBuildInputs = [ cmake flatbuffers pkg-config ]; + buildInputs = [ obs-studio flatbuffers libGL qtbase ]; + + dontWrapQtApps = true; + + cmakeFlags = [ + "-DOBS_SOURCE=${obs-studio.src}" + "-DGLOBAL_INSTALLATION=ON" + "-DUSE_SYSTEM_FLATBUFFERS_LIBS=ON" + ]; + + preConfigure = '' + rm -rf external/flatbuffers + ''; + + meta = with lib; { + description = "OBS Studio plugin to connect to a Hyperion.ng server"; + homepage = "https://github.com/hyperion-project/hyperion-obs-plugin"; + license = licenses.mit; + maintainers = with maintainers; [ algram ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/Cargo.lock b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/Cargo.lock new file mode 100644 index 000000000000..6e3c1816979c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/Cargo.lock @@ -0,0 +1,3284 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4fa78e18c64fce05e902adecd7a5eed15a5e0a3439f7b0e169f0252214865e3" +dependencies = [ + "gimli 0.27.3", +] + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli 0.28.0", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c378d78423fdad8089616f827526ee33c19f2fddbd5de1629152c9593ba4783" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "ambient-authority" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9d4ee0d472d1cd2e28c97dfa124b3d8d992e10eb0a035f33f5d12e3a177ba3b" + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "arbitrary" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "async-trait" +version = "0.1.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc00ceb34980c03614e35a3a4e218276a0a824e911d07651cd0d858a51e8c0f0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line 0.21.0", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object 0.32.1", + "rustc-demangle", +] + +[[package]] +name = "base64" +version = "0.21.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ba43ea6f343b788c8764558649e08df62f86c6ef251fdaeb1ffd010a9ae50a2" + +[[package]] +name = "base64-simd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" +dependencies = [ + "outref", + "vsimd", +] + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bindgen" +version = "0.59.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bd2a9a458e8f4304c52c43ebb0cfbd520289f8379a52e329a38afda99bf8eb8" +dependencies = [ + "bitflags 1.3.2", + "cexpr", + "clang-sys", + "lazy_static", + "lazycell", + "peeking_take_while", + "proc-macro2", + "quote", + "regex", + "rustc-hash", + "shlex", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4682ae6287fcf752ecaabbfcc7b6f9b72aa33933dc23a554d853aea8eea8635" + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" + +[[package]] +name = "bytemuck" +version = "1.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6" + +[[package]] +name = "bytemuck_derive" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965ab7eb5f8f97d2a083c799f3a1b994fc397b2fe2da5d1da1626ce15a39f2b1" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "bytes" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" + +[[package]] +name = "cap-fs-ext" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b779b2d0a001c125b4584ad586268fb4b92d957bff8d26d7fe0dd78283faa814" +dependencies = [ + "cap-primitives", + "cap-std", + "io-lifetimes 2.0.2", + "windows-sys", +] + +[[package]] +name = "cap-primitives" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf30c373a3bee22c292b1b6a7a26736a38376840f1af3d2d806455edf8c3899" +dependencies = [ + "ambient-authority", + "fs-set-times", + "io-extras", + "io-lifetimes 2.0.2", + "ipnet", + "maybe-owned", + "rustix 0.38.12", + "windows-sys", + "winx", +] + +[[package]] +name = "cap-rand" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "577de6cff7c2a47d6b13efe5dd28bf116bd7f8f7db164ea95b7cc2640711f522" +dependencies = [ + "ambient-authority", + "rand", +] + +[[package]] +name = "cap-std" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84bade423fa6403efeebeafe568fdb230e8c590a275fba2ba978dd112efcf6e9" +dependencies = [ + "cap-primitives", + "io-extras", + "io-lifetimes 2.0.2", + "rustix 0.38.12", +] + +[[package]] +name = "cap-time-ext" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f52b3c8f4abfe3252fd0a071f3004aaa3b18936ec97bdbd8763ce03aff6247" +dependencies = [ + "cap-primitives", + "once_cell", + "rustix 0.38.12", + "winx", +] + +[[package]] +name = "cc" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +dependencies = [ + "libc", +] + +[[package]] +name = "cexpr" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" +dependencies = [ + "nom", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clang-sys" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +dependencies = [ + "glob", + "libc", + "libloading", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "cosmic-text" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0b68966c2543609f8d92f9d33ac3b719b2a67529b0c6c0b3e025637b477eef9" +dependencies = [ + "aliasable", + "fontdb", + "libm", + "log", + "rangemap", + "rustybuzz", + "sys-locale", + "unicode-bidi", + "unicode-linebreak", + "unicode-script", + "unicode-segmentation", +] + +[[package]] +name = "cpp_demangle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eeaa953eaad386a53111e47172c2fedba671e5684c8dd601a5f474f4f118710f" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cranelift-bforest" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7348010242a23d0285e5f852f13b07f9540a50f13ab6e92fd047b88490bf5ee" +dependencies = [ + "cranelift-entity", +] + +[[package]] +name = "cranelift-codegen" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38849e3b19bc9a6dbf8bc188876b76e6ba288089a5567be573de50f44801375c" +dependencies = [ + "bumpalo", + "cranelift-bforest", + "cranelift-codegen-meta", + "cranelift-codegen-shared", + "cranelift-control", + "cranelift-entity", + "cranelift-isle", + "gimli 0.27.3", + "hashbrown 0.13.2", + "log", + "regalloc2", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-codegen-meta" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3de51da572e65cb712a47b7413c50208cac61a4201560038de929d9a7f4fadf" +dependencies = [ + "cranelift-codegen-shared", +] + +[[package]] +name = "cranelift-codegen-shared" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75f869ae826055a5064d4a400abde7806eb86d89765dbae51d42846df23121a" + +[[package]] +name = "cranelift-control" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf6631316ad6ccfd60055740ad25326330d31407a983a454e45c5a62f64d101" +dependencies = [ + "arbitrary", +] + +[[package]] +name = "cranelift-entity" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d1d6a38935ee64551a7c8da4cc759fdcaba1d951ec56336737c0459ed5a05d2" +dependencies = [ + "serde", +] + +[[package]] +name = "cranelift-frontend" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73c410c2d52e28fc4b49aab955a1c2f58580ff37a3b0641e23bccd6049e4b5" +dependencies = [ + "cranelift-codegen", + "log", + "smallvec", + "target-lexicon", +] + +[[package]] +name = "cranelift-isle" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61acaa7646020e0444bb3a22d212a5bae0e3b3969b18e1276a037ccd6493a8fd" + +[[package]] +name = "cranelift-native" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543f52ef487498253ebe5df321373c5c314da74ada0e92f13451b6f887194f87" +dependencies = [ + "cranelift-codegen", + "libc", + "target-lexicon", +] + +[[package]] +name = "cranelift-wasm" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "788c27f41f31a50a9a3546b91253ad9495cd54df0d6533b3f3dcb4fb7a988f69" +dependencies = [ + "cranelift-codegen", + "cranelift-entity", + "cranelift-frontend", + "itertools", + "log", + "smallvec", + "wasmparser 0.110.0", + "wasmtime-types", +] + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset 0.9.0", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "uuid", +] + +[[package]] +name = "deranged" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2696e8a945f658fd14dc3b87242e6b80cd0f36ff04ea560fa39082368847946" + +[[package]] +name = "dirs" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +dependencies = [ + "dirs-sys", +] + +[[package]] +name = "dirs-sys" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "either" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" + +[[package]] +name = "encoding_rs" +version = "0.8.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136526188508e25c6fef639d7927dfb3e0e3084488bf202267829cf7fc23dbdd" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "evdev" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bed59fcc8cfd6b190814a509018388462d3b203cf6dd10db5c00087e72a83f3" +dependencies = [ + "bitvec", + "cfg-if", + "libc", + "nix 0.23.2", + "thiserror", +] + +[[package]] +name = "fallible-iterator" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" + +[[package]] +name = "fd-lock" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b0377f1edc77dbd1118507bc7a66e4ab64d2b90c66f90726dc801e73a8c68f9" +dependencies = [ + "cfg-if", + "rustix 0.38.12", + "windows-sys", +] + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6c98ee8095e9d1dcbf2fcc6d95acccb90d1c81db1e44725c6a984b1dbdfb010" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fontdb" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af8d8cbea8f21307d7e84bca254772981296f058a1d36b461bf4d83a7499fc9e" +dependencies = [ + "log", + "memmap2", + "slotmap", + "tinyvec", + "ttf-parser", +] + +[[package]] +name = "form_urlencoded" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-set-times" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd738b84894214045e8414eaded76359b4a5773f0a0a56b16575110739cdcf39" +dependencies = [ + "io-lifetimes 2.0.2", + "rustix 0.38.12", + "windows-sys", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-io" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" + +[[package]] +name = "futures-macro" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "futures-task" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" + +[[package]] +name = "futures-util" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +dependencies = [ + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "fxhash" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c" +dependencies = [ + "byteorder", +] + +[[package]] +name = "fxprof-processed-profile" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27d12c0aed7f1e24276a241aadc4cb8ea9f83000f34bc062b7cc2d51e3b0fabd" +dependencies = [ + "bitflags 2.4.0", + "debugid", + "fxhash", + "serde", + "serde_json", +] + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "gimli" +version = "0.27.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" +dependencies = [ + "fallible-iterator", + "indexmap 1.9.3", + "stable_deref_trait", +] + +[[package]] +name = "gimli" +version = "0.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "h2" +version = "0.3.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91fc23aa11be92976ef4729127f1a74adf36d8436f7816b185d18df956790833" +dependencies = [ + "bytes", + "fnv", + "futures-core", + "futures-sink", + "futures-util", + "http", + "indexmap 1.9.3", + "slab", + "tokio", + "tokio-util", + "tracing", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" +dependencies = [ + "ahash", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "http" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +dependencies = [ + "bytes", + "http", + "pin-project-lite", +] + +[[package]] +name = "httparse" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "hyper" +version = "0.14.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +dependencies = [ + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.4.9", + "tokio", + "tower-service", + "tracing", + "want", +] + +[[package]] +name = "hyper-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d78e1e73ec14cf7375674f74d7dde185c8206fd9dea6fb6295e8a98098aaa97" +dependencies = [ + "futures-util", + "http", + "hyper", + "rustls", + "tokio", + "tokio-rustls", +] + +[[package]] +name = "id-arena" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" + +[[package]] +name = "idna" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "image" +version = "0.24.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f3dfdbdd72063086ff443e297b61695500514b1e41095b6fb9a5ab48a70a711" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "tiff", +] + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown 0.14.0", + "serde", +] + +[[package]] +name = "io-extras" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d3c230ee517ee76b1cc593b52939ff68deda3fae9e41eca426c6b4993df51c4" +dependencies = [ + "io-lifetimes 2.0.2", + "windows-sys", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys", +] + +[[package]] +name = "io-lifetimes" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bffb4def18c48926ccac55c1223e02865ce1a821751a95920448662696e7472c" + +[[package]] +name = "ipnet" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28b29a3cd74f0f4598934efe3aeba42bae0eb4680554128851ebbecb02af14e6" + +[[package]] +name = "is-docker" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "928bae27f42bc99b60d9ac7334e3a21d10ad8f1835a4e12ec3ec0464765ed1b3" +dependencies = [ + "once_cell", +] + +[[package]] +name = "is-terminal" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b" +dependencies = [ + "hermit-abi", + "rustix 0.38.12", + "windows-sys", +] + +[[package]] +name = "is-wsl" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "173609498df190136aa7dea1a91db051746d339e18476eed5ca40521f02d7aa5" +dependencies = [ + "is-docker", + "once_cell", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "leb128" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libloading" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b67380fd3b2fbe7527a606e18729d21c6f3951633d0500574c4dc22d2d638b9f" +dependencies = [ + "cfg-if", + "winapi", +] + +[[package]] +name = "libm" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7012b1bbb0719e1097c47611d3898568c546d597c2e74d66f6087edd5233ff4" + +[[package]] +name = "libproc" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b799ad155d75ce914c467ee5627b62247c20d4aedbd446f821484cebf3cded7" +dependencies = [ + "bindgen", + "errno 0.2.8", + "libc", +] + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "linux-raw-sys" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a9bad9f94746442c783ca431b22403b519cd7fbeed0533fdd6328b2f2212128" + +[[package]] +name = "livesplit-auto-splitting" +version = "0.1.0" +source = "git+https://github.com/LiveSplit/livesplit-core#c487b50359835dbd35aead866c12e91e96ecc303" +dependencies = [ + "anyhow", + "async-trait", + "proc-maps", + "read-process-memory", + "slotmap", + "snafu", + "sysinfo", + "time", + "wasi-common", + "wasmtime", + "wasmtime-wasi", + "windows-sys", +] + +[[package]] +name = "livesplit-core" +version = "0.13.0" +source = "git+https://github.com/LiveSplit/livesplit-core#c487b50359835dbd35aead866c12e91e96ecc303" +dependencies = [ + "base64-simd", + "bytemuck", + "bytemuck_derive", + "cfg-if", + "cosmic-text", + "hashbrown 0.14.0", + "image", + "itoa", + "libc", + "libm", + "livesplit-auto-splitting", + "livesplit-hotkey", + "livesplit-title-abbreviations", + "log", + "memchr", + "serde", + "serde_derive", + "serde_json", + "simdutf8", + "smallstr", + "snafu", + "time", + "tiny-skia", + "tiny-skia-path", + "tokio", + "unicase", + "windows-sys", +] + +[[package]] +name = "livesplit-hotkey" +version = "0.7.0" +source = "git+https://github.com/LiveSplit/livesplit-core#c487b50359835dbd35aead866c12e91e96ecc303" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "crossbeam-channel", + "evdev", + "mio", + "nix 0.27.1", + "promising-future", + "serde", + "windows-sys", + "x11-dl", +] + +[[package]] +name = "livesplit-title-abbreviations" +version = "0.3.0" +source = "git+https://github.com/LiveSplit/livesplit-core#c487b50359835dbd35aead866c12e91e96ecc303" +dependencies = [ + "unicase", +] + +[[package]] +name = "log" +version = "0.4.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" +dependencies = [ + "serde", +] + +[[package]] +name = "mach" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa" +dependencies = [ + "libc", +] + +[[package]] +name = "mach2" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0d1830bcd151a6fc4aea1369af235b36c1528fe976b8ff678683c9995eade8" +dependencies = [ + "libc", +] + +[[package]] +name = "maybe-owned" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4facc753ae494aeb6e3c22f839b158aebd4f9270f55cd3c79906c45476c47ab4" + +[[package]] +name = "memchr" +version = "2.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f232d6ef707e1956a43342693d2a31e72989554d58299d7a88738cc95b0d35c" + +[[package]] +name = "memfd" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +dependencies = [ + "rustix 0.37.23", +] + +[[package]] +name = "memmap2" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d28bba84adfe6646737845bc5ebbfa2c08424eb1c37e94a1fd2a82adb56a872" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce" +dependencies = [ + "autocfg", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "wasi", + "windows-sys", +] + +[[package]] +name = "nix" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c" +dependencies = [ + "bitflags 1.3.2", + "cc", + "cfg-if", + "libc", + "memoffset 0.6.5", +] + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.4.0", + "cfg-if", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "ntapi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8a3895c6391c39d7fe7ebc444a87eb2991b2a0bc718fdabd071eec617fc68e4" +dependencies = [ + "winapi", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_threads" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2819ce041d2ee131036f4fc9d6ae7ae125a3a40e97ba64d04fe799ad9dabbb44" +dependencies = [ + "libc", +] + +[[package]] +name = "object" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bda667d9f2b5051b8833f59f3bf748b28ef54f850f4fcb389a252aa383866d1" +dependencies = [ + "crc32fast", + "hashbrown 0.13.2", + "indexmap 1.9.3", + "memchr", +] + +[[package]] +name = "object" +version = "0.32.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +dependencies = [ + "memchr", +] + +[[package]] +name = "obs" +version = "0.1.0" + +[[package]] +name = "obs-livesplit-one" +version = "0.1.0" +dependencies = [ + "anyhow", + "livesplit-core", + "log", + "obs", + "open", + "percent-encoding", + "quick-xml", + "reqwest", + "serde", + "serde_derive", + "serde_json", + "shlex", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "open" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfabf1927dce4d6fdf563d63328a0a506101ced3ec780ca2135747336c98cef8" +dependencies = [ + "is-wsl", + "libc", + "pathdiff", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "outref" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "peeking_take_while" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" + +[[package]] +name = "percent-encoding" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94" + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd75bf2d8dd3702b9707cdbc56a5b9ef42cec752eb8b3bafc01234558442aa64" +dependencies = [ + "bitflags 1.3.2", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-maps" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d17946c951c8e8c4233375fdbfc212b215bd14ea1b18388eae8c95bb03a0174" +dependencies = [ + "anyhow", + "libc", + "libproc", + "mach2", + "winapi", +] + +[[package]] +name = "promising-future" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44ba461c1b8785e502867026d893fa52801faccfbfe59efdae7da4b9094b4ce2" +dependencies = [ + "threadpool", +] + +[[package]] +name = "psm" +version = "0.1.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5787f7cda34e3033a72192c018bc5883100330f362ef279a8cbccfce8bb4e874" +dependencies = [ + "cc", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a1a2f1f0a7ecff9c31abbe177637be0e97a0aef46cf8738ece09327985d998" +dependencies = [ + "bitflags 1.3.2", + "memchr", + "unicase", +] + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quote" +version = "1.0.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rangemap" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9283c6b06096b47afc7109834fdedab891175bb5241ee5d4f7d2546549f263" + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "read-process-memory" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8497683b2f0b6887786f1928c118f26ecc6bb3d78bbb6ed23e8e7ba110af3bb0" +dependencies = [ + "libc", + "log", + "mach", + "winapi", +] + +[[package]] +name = "redox_syscall" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_users" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" +dependencies = [ + "getrandom", + "redox_syscall", + "thiserror", +] + +[[package]] +name = "regalloc2" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b4dcbd3a2ae7fb94b5813fa0e957c6ab51bf5d0a8ee1b69e0c2d0f1e6eb8485" +dependencies = [ + "hashbrown 0.13.2", + "log", + "rustc-hash", + "slice-group-by", + "smallvec", +] + +[[package]] +name = "regex" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "697061221ea1b4a94a624f67d0ae2bfe4e22b8a17b6a192afb11046542cc8c47" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2f401f4955220693b56f8ec66ee9c78abffd8d1c4f23dc41a23839eb88f0795" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "reqwest" +version = "0.11.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e9ad3fe7488d7e34558a2033d45a0c90b72d97b4f80705666fea71472e2e6a1" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2", + "http", + "http-body", + "hyper", + "hyper-rustls", + "ipnet", + "js-sys", + "log", + "mime", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls", + "rustls-native-certs", + "rustls-pemfile", + "serde", + "serde_json", + "serde_urlencoded", + "tokio", + "tokio-rustls", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", + "winreg", +] + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin", + "untrusted", + "web-sys", + "winapi", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustix" +version = "0.37.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +dependencies = [ + "bitflags 1.3.2", + "errno 0.3.3", + "io-lifetimes 1.0.11", + "libc", + "linux-raw-sys 0.3.8", + "windows-sys", +] + +[[package]] +name = "rustix" +version = "0.38.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdf14a7a466ce88b5eac3da815b53aefc208ce7e74d1c263aabb04d88c4abeb1" +dependencies = [ + "bitflags 2.4.0", + "errno 0.3.3", + "itoa", + "libc", + "linux-raw-sys 0.4.7", + "once_cell", + "windows-sys", +] + +[[package]] +name = "rustls" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd8d6c9f025a446bc4d18ad9632e69aec8f287aa84499ee335599fabd20c3fd8" +dependencies = [ + "log", + "ring", + "rustls-webpki", + "sct", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3987094b1d07b653b7dfdc3f70ce9a1da9c51ac18c1b06b662e4f9a0e9f4b2" +dependencies = [ + "base64", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d93931baf2d282fff8d3a532bbfd7653f734643161b87e3e01e59a04439bf0d" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "rustybuzz" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82eea22c8f56965eeaf3a209b3d24508256c7b920fb3b6211b8ba0f7c0583250" +dependencies = [ + "bitflags 1.3.2", + "bytemuck", + "libm", + "smallvec", + "ttf-parser", + "unicode-bidi-mirroring", + "unicode-ccc", + "unicode-general-category", + "unicode-script", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" +dependencies = [ + "ring", + "untrusted", +] + +[[package]] +name = "security-framework" +version = "2.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918" + +[[package]] +name = "serde" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf9e0fcba69a370eed61bcf2b728575f726b50b55cba78064753d708ddc7549e" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.188" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4eca7ac642d82aa35b60049a6eccb4be6be75e599bd2e9adb5f875a737654af2" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "serde_json" +version = "1.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cc66a619ed80bf7a0f6b17dd063a84b88f6dea1813737cf469aef1d081142c2" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "shellexpand" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ccc8076840c4da029af4f87e4e8daeb0fca6b87bbb02e10cb60b791450e11e4" +dependencies = [ + "dirs", +] + +[[package]] +name = "shlex" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7cee0529a6d40f580e7a5e6c495c8fbfe21b7b52795ed4bb5e62cdf92bc6380" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slice-group-by" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" + +[[package]] +name = "slotmap" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1e08e261d0e8f5c43123b7adf3e4ca1690d655377ac93a03b2c9d3e98de1342" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallstr" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63b1aefdf380735ff8ded0b15f31aab05daf1f70216c01c02a12926badd1df9d" +dependencies = [ + "smallvec", +] + +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "socket2" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2538b18701741680e0322a2302176d3253a35388e2e62f172f64f4f16605f877" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "sptr" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9b39299b249ad65f3b7e96443bad61c02ca5cd3589f46cb6d610a0fd6c0d6a" + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "strict-num" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "718fa2415bcb8d8bd775917a1bf12a7931b6dfa890753378538118181e0cb398" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sys-locale" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e801cf239ecd6ccd71f03d270d67dd53d13e90aab208bf4b8fe4ad957ea949b0" +dependencies = [ + "libc", +] + +[[package]] +name = "sysinfo" +version = "0.29.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a18d114d420ada3a891e6bc8e96a2023402203296a47cdd65083377dad18ba5" +dependencies = [ + "cfg-if", + "core-foundation-sys", + "libc", + "ntapi", + "once_cell", + "rayon", + "winapi", +] + +[[package]] +name = "system-interface" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "27ce32341b2c0b70c144bbf35627fdc1ef18c76ced5e5e7b3ee8b5ba6b2ab6a0" +dependencies = [ + "bitflags 2.4.0", + "cap-fs-ext", + "cap-std", + "fd-lock", + "io-lifetimes 2.0.2", + "rustix 0.38.12", + "windows-sys", + "winx", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "target-lexicon" +version = "0.12.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0e916b1148c8e263850e1ebcbd046f333e0683c724876bb0da63ea4373dc8a" + +[[package]] +name = "thiserror" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6d7a740b8a666a7e828dd00da9c0dc290dff53154ea77ac109281de90589b7" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.48" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49922ecae66cc8a249b77e68d1d0623c1b2c514f0060c27cdc68bd62a1219d35" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "threadpool" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d050e60b33d41c19108b32cea32164033a9013fe3b46cbd4457559bfbf77afaa" +dependencies = [ + "num_cpus", +] + +[[package]] +name = "tiff" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d172b0f4d3fba17ba89811858b9d3d97f928aece846475bbda076ca46736211" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "time" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17f6bb557fd245c28e6411aa56b6403c689ad95061f50e4be16c274e70a17e48" +dependencies = [ + "deranged", + "libc", + "num_threads", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb" + +[[package]] +name = "tiny-skia" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4e37fdc219ee3d551882d24dc5e4df5f72fd9723cbca1ffaa57f7348bf7a47d" +dependencies = [ + "arrayref", + "arrayvec", + "bytemuck", + "cfg-if", + "log", + "tiny-skia-path", +] + +[[package]] +name = "tiny-skia-path" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93a323d1de20dad9bc8b32daf57702c585ce76e80792d8151de1fc9dfc8d1ca7" +dependencies = [ + "arrayref", + "bytemuck", + "libm", + "strict-num", +] + +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ed6077ed6cd6c74735e21f37eb16dc3935f96878b1fe961074089cc80893f9" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "num_cpus", + "pin-project-lite", + "socket2 0.5.3", + "windows-sys", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", + "tracing", +] + +[[package]] +name = "tower-service" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" + +[[package]] +name = "tracing" +version = "0.1.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +dependencies = [ + "cfg-if", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f4f31f56159e98206da9efd823404b79b6ef3143b4a7ab76e67b1751b25a4ab" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "tracing-core" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" + +[[package]] +name = "ttf-parser" +version = "0.19.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a464a4b34948a5f67fddd2b823c62d9d92e44be75058b99939eae6c5b6960b33" + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" + +[[package]] +name = "unicode-bidi-mirroring" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56d12260fb92d52f9008be7e4bca09f584780eb2266dc8fecc6a192bec561694" + +[[package]] +name = "unicode-ccc" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2520efa644f8268dce4dcd3050eaa7fc044fca03961e9998ac7e2e92b77cf1" + +[[package]] +name = "unicode-general-category" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2281c8c1d221438e373249e065ca4989c4c36952c211ff21a0ee91c44a3869e7" + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + +[[package]] +name = "unicode-linebreak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-script" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d817255e1bed6dfd4ca47258685d14d2bdcfbc64fdc9e3819bd5848057b8ecc" + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "url" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", +] + +[[package]] +name = "uuid" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79daa5ed5740825c40b389c5e50312b9c86df53fccd33f281df655642b43869d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasi-cap-std-sync" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cef338a20bd9e5e469a37b192b2a954c4dde83ea896c8eaf45df8c84cdf7be5" +dependencies = [ + "anyhow", + "async-trait", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "io-extras", + "io-lifetimes 2.0.2", + "is-terminal", + "once_cell", + "rustix 0.38.12", + "system-interface", + "tracing", + "wasi-common", + "windows-sys", +] + +[[package]] +name = "wasi-common" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb9c753bdf98fdc592fc729bda2248996f5dd1be71f4e01bf8c08225acb7b6bb" +dependencies = [ + "anyhow", + "bitflags 2.4.0", + "cap-rand", + "cap-std", + "io-extras", + "log", + "rustix 0.38.12", + "thiserror", + "tracing", + "wasmtime", + "wiggle", + "windows-sys", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.31", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c02dbc21516f9f1f04f187958890d7e6026df8d16540b7ad9492bc34a67cea03" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "wasm-encoder" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41763f20eafed1399fff1afb466496d3a959f58241436cfdc17e3f5ca954de16" +dependencies = [ + "leb128", +] + +[[package]] +name = "wasmparser" +version = "0.110.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dfcdb72d96f01e6c85b6bf20102e7423bdbaad5c337301bab2bbf253d26413c" +dependencies = [ + "indexmap 2.0.0", + "semver", +] + +[[package]] +name = "wasmparser" +version = "0.112.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e986b010f47fcce49cf8ea5d5f9e5d2737832f12b53ae8ae785bbe895d0877bf" +dependencies = [ + "indexmap 2.0.0", + "semver", +] + +[[package]] +name = "wasmprinter" +version = "0.2.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34ddf5892036cd4b780d505eff1194a0cbc10ed896097656fdcea3744b5e7c2f" +dependencies = [ + "anyhow", + "wasmparser 0.112.0", +] + +[[package]] +name = "wasmtime" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e38ee12eaafb34198cce001e2ea0a83d3884db5cf8e3af08864f108a2fb57c85" +dependencies = [ + "anyhow", + "async-trait", + "bincode", + "bumpalo", + "cfg-if", + "encoding_rs", + "fxprof-processed-profile", + "indexmap 2.0.0", + "libc", + "log", + "object 0.31.1", + "once_cell", + "paste", + "psm", + "rayon", + "serde", + "serde_json", + "target-lexicon", + "wasm-encoder", + "wasmparser 0.110.0", + "wasmtime-component-macro", + "wasmtime-component-util", + "wasmtime-cranelift", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit", + "wasmtime-runtime", + "wasmtime-winch", + "windows-sys", +] + +[[package]] +name = "wasmtime-asm-macros" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82313f9dce6f64dd08a7b51bef57411741b7eaef6b4611f77b91b6213a99808b" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "wasmtime-component-macro" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2b6da03d55c656066ebc93d27ce54de11fcd2d3157e7490c6196a65aa1e9bc0" +dependencies = [ + "anyhow", + "proc-macro2", + "quote", + "syn 2.0.31", + "wasmtime-component-util", + "wasmtime-wit-bindgen", + "wit-parser", +] + +[[package]] +name = "wasmtime-component-util" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b54327f9ce6a46c6841c43d93c4fa366cd0beb0f075743b120d31a3d6afe34fd" + +[[package]] +name = "wasmtime-cranelift" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76d52e14e5453e82708816e992140c59e511bbf7c0868ee654100e2792483f56" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-control", + "cranelift-entity", + "cranelift-frontend", + "cranelift-native", + "cranelift-wasm", + "gimli 0.27.3", + "log", + "object 0.31.1", + "target-lexicon", + "thiserror", + "wasmparser 0.110.0", + "wasmtime-cranelift-shared", + "wasmtime-environ", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-cranelift-shared" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ddb7f34fff5b4a01aa2e55373fceb1b59d5f981abca44afdd63d7dd39689047" +dependencies = [ + "anyhow", + "cranelift-codegen", + "cranelift-control", + "cranelift-native", + "gimli 0.27.3", + "object 0.31.1", + "target-lexicon", + "wasmtime-environ", +] + +[[package]] +name = "wasmtime-environ" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad336809866b743410ac86ec0bdc34899d6f1af5d3deed97188e90503ff527d7" +dependencies = [ + "anyhow", + "cranelift-entity", + "gimli 0.27.3", + "indexmap 2.0.0", + "log", + "object 0.31.1", + "serde", + "target-lexicon", + "thiserror", + "wasm-encoder", + "wasmparser 0.110.0", + "wasmprinter", + "wasmtime-component-util", + "wasmtime-types", +] + +[[package]] +name = "wasmtime-fiber" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcc69f0a316db37482ebc83669236ea7c943d0b49a1a23f763061c9fc9d07d0b" +dependencies = [ + "cc", + "cfg-if", + "rustix 0.38.12", + "wasmtime-asm-macros", + "wasmtime-versioned-export-macros", + "windows-sys", +] + +[[package]] +name = "wasmtime-jit" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2004b30ea1ad9fd288bce54af19ef08281250e1087f0b5ffc6ca06bacd821edb" +dependencies = [ + "addr2line 0.20.0", + "anyhow", + "bincode", + "cfg-if", + "cpp_demangle", + "gimli 0.27.3", + "log", + "object 0.31.1", + "rustc-demangle", + "rustix 0.38.12", + "serde", + "target-lexicon", + "wasmtime-environ", + "wasmtime-jit-icache-coherence", + "wasmtime-runtime", + "windows-sys", +] + +[[package]] +name = "wasmtime-jit-debug" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54aa8081162b13a96f47ab40f9aa03fc02dad38ee10b1418243ac8517c5af6d3" +dependencies = [ + "once_cell", + "wasmtime-versioned-export-macros", +] + +[[package]] +name = "wasmtime-jit-icache-coherence" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2922462d01f5c112bbc4e6eb95ee68447a6031c0b90cc2ad69b890060b3842d9" +dependencies = [ + "cfg-if", + "libc", + "windows-sys", +] + +[[package]] +name = "wasmtime-runtime" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "536c34c4abbe22c40f631067b57ca14d719faf3f63ae0d504014a4d15a4b980b" +dependencies = [ + "anyhow", + "cc", + "cfg-if", + "encoding_rs", + "indexmap 2.0.0", + "libc", + "log", + "mach", + "memfd", + "memoffset 0.9.0", + "paste", + "rand", + "rustix 0.38.12", + "sptr", + "wasm-encoder", + "wasmtime-asm-macros", + "wasmtime-environ", + "wasmtime-fiber", + "wasmtime-jit-debug", + "wasmtime-versioned-export-macros", + "windows-sys", +] + +[[package]] +name = "wasmtime-types" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec6f1e74eb5ef817043b243eae37cc0e424c256c4069ab2c5afd9f3fe91a12ee" +dependencies = [ + "cranelift-entity", + "serde", + "thiserror", + "wasmparser 0.110.0", +] + +[[package]] +name = "wasmtime-versioned-export-macros" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ca36fa6cad8ef885bc27d7d50c8b1cb7da0534251188a824f4953b07875703" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", +] + +[[package]] +name = "wasmtime-wasi" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "269f4f2192b18037729b617eadb512e95510f1b0cd8fb4990aef286c9bb3dfb9" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.4.0", + "bytes", + "cap-fs-ext", + "cap-rand", + "cap-std", + "cap-time-ext", + "fs-set-times", + "futures", + "io-extras", + "libc", + "once_cell", + "rustix 0.38.12", + "system-interface", + "thiserror", + "tokio", + "tracing", + "wasi-cap-std-sync", + "wasi-common", + "wasmtime", + "wiggle", + "windows-sys", +] + +[[package]] +name = "wasmtime-winch" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9d016c3f1d0c8ac905bfda51936cb6dae040e0d8edc75b7a1ef9f21773a19f6" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.27.3", + "object 0.31.1", + "target-lexicon", + "wasmparser 0.110.0", + "wasmtime-cranelift-shared", + "wasmtime-environ", + "winch-codegen", +] + +[[package]] +name = "wasmtime-wit-bindgen" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd55caadebae32cf18541e5077b3f042a171bb9988ea0040d0569f26a63227d" +dependencies = [ + "anyhow", + "heck", + "indexmap 2.0.0", + "wit-parser", +] + +[[package]] +name = "wast" +version = "35.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ef140f1b49946586078353a453a1d28ba90adfc54dde75710bc1931de204d68" +dependencies = [ + "leb128", +] + +[[package]] +name = "web-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "wiggle" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "166189cd49163adc9a1e2a33b33625eb934d06e518c318905c3a5140d9bc1d45" +dependencies = [ + "anyhow", + "async-trait", + "bitflags 2.4.0", + "thiserror", + "tracing", + "wasmtime", + "wiggle-macro", +] + +[[package]] +name = "wiggle-generate" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a67571bd77bff962190744adb29e72a1157d30e8d34fbb2c1c7b0ad7627be020" +dependencies = [ + "anyhow", + "heck", + "proc-macro2", + "quote", + "shellexpand", + "syn 2.0.31", + "witx", +] + +[[package]] +name = "wiggle-macro" +version = "12.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5677f7d740bc41f9f6af4a6a719a07fbe1aa8ec66e0ec1ca4d3617f2b27d5361" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.31", + "wiggle-generate", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "winch-codegen" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38e6f2f344ec89998f047d0aa3aec77088eb8e33c91f5efdd191b140fda6fa40" +dependencies = [ + "anyhow", + "cranelift-codegen", + "gimli 0.27.3", + "regalloc2", + "smallvec", + "target-lexicon", + "wasmparser 0.110.0", + "wasmtime-environ", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "winreg" +version = "0.50.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" +dependencies = [ + "cfg-if", + "windows-sys", +] + +[[package]] +name = "winx" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "357bb8e2932df531f83b052264b050b81ba0df90ee5a59b2d1d3949f344f81e5" +dependencies = [ + "bitflags 2.4.0", + "windows-sys", +] + +[[package]] +name = "wit-parser" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "541efa2046e544de53a9da1e2f6299e63079840360c9e106f1f8275a97771318" +dependencies = [ + "anyhow", + "id-arena", + "indexmap 2.0.0", + "log", + "pulldown-cmark", + "semver", + "unicode-xid", + "url", +] + +[[package]] +name = "witx" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e366f27a5cabcddb2706a78296a40b8fcc451e1a6aba2fc1d94b4a01bdaaef4b" +dependencies = [ + "anyhow", + "log", + "thiserror", + "wast", +] + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "x11-dl" +version = "2.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38735924fedd5314a6e548792904ed8c6de6636285cb9fec04d5b1db85c1516f" +dependencies = [ + "libc", + "once_cell", + "pkg-config", +] diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/default.nix new file mode 100644 index 000000000000..33f953c4e2a6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-livesplit-one/default.nix @@ -0,0 +1,43 @@ +{ lib +, fetchFromGitHub +, rustPlatform +, cmake +, fontconfig +, obs-studio +, pkg-config +}: + +rustPlatform.buildRustPackage rec { + pname = "obs-livesplit-one"; + version = "0.3.4"; + + src = fetchFromGitHub { + owner = "LiveSplit"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-3B3P1PlzIlpVqHJMKWpEnWXGgD/IaiWM1FVKn0BtRj0="; + }; + + cargoLock = { + lockFile = ./Cargo.lock; + outputHashes = { + "livesplit-auto-splitting-0.1.0" = "sha256-/xQEVJH6m6nH5Z1kuOPEElOcOqJmiG9Q8cOx0e6p3Wc="; + }; + }; + + nativeBuildInputs = [ cmake pkg-config ]; + buildInputs = [ fontconfig obs-studio ]; + + postInstall = '' + mkdir $out/lib/obs-plugins/ + mv $out/lib/libobs_livesplit_one.so $out/lib/obs-plugins/obs-livesplit-one.so + ''; + + meta = with lib; { + description = "OBS Studio plugin for adding LiveSplit One as a source"; + homepage = "https://github.com/LiveSplit/obs-livesplit-one"; + license = with licenses; [ asl20 mit ]; + maintainers = [ maintainers.Bauke ]; + platforms = obs-studio.meta.platforms; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix new file mode 100644 index 000000000000..3068718b08f0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-move-transition.nix @@ -0,0 +1,33 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-move-transition"; + version = "2.10.0"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-move-transition"; + rev = version; + sha256 = "sha256-HMhIGOslAtk5npunRZkOcFQZDSIB7c8qcFW3l9kgkzo="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for OBS Studio to move source to a new position during scene transition"; + homepage = "https://github.com/exeldro/obs-move-transition"; + maintainers = with maintainers; [ starcraft66 ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/default.nix new file mode 100644 index 000000000000..e7c0d144b41d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/default.nix @@ -0,0 +1,32 @@ +{ lib, stdenv, fetchFromGitHub, obs-studio, cmake, qtbase }: + +stdenv.mkDerivation rec { + pname = "obs-multi-rtmp"; + version = "0.2.8.1-OBS28"; + + src = fetchFromGitHub { + owner = "sorayuki"; + repo = "obs-multi-rtmp"; + rev = version; + sha256 = "sha256-1W+c8Y0AmtKQmCIg8IDAaYYStQzDpZRuqw3vZEY5ncU="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio qtbase ]; + + patches = [ + # Patch cmake file to link against the obs build output, instead of its sources + ./fix-build.patch + ]; + + dontWrapQtApps = true; + + meta = with lib; { + homepage = "https://github.com/sorayuki/obs-multi-rtmp/"; + changelog = "https://github.com/sorayuki/obs-multi-rtmp/releases/tag/${version}"; + description = "Multi-site simultaneous broadcast plugin for OBS Studio"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ jk ]; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/fix-build.patch b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/fix-build.patch new file mode 100644 index 000000000000..dd40fc7e9595 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-multi-rtmp/fix-build.patch @@ -0,0 +1,54 @@ +From 72aeddb52c2b656bfec918097ad07a0ff092008b Mon Sep 17 00:00:00 2001 +From: Raphael Robatsch <raphael-git@tapesoftware.net> +Date: Thu, 13 Oct 2022 21:34:21 +0200 +Subject: [PATCH] Link against OBS public interface instead of sources + +--- + CMakeLists.txt | 22 ++++------------------ + 1 file changed, 4 insertions(+), 18 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 27e20f8..8725c5b 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -65,15 +65,9 @@ if (WIN32) + "/def:${CMAKE_CURRENT_BINARY_DIR}/obs-frontend-api.def" + "/out:${CMAKE_CURRENT_BINARY_DIR}/obs-frontend-api.lib" + ) +-elseif (APPLE) +- # macOS +- find_library(_LIB_OBS "${LIB_OBS}.0.dylib" PATHS ${OBS_BIN_DIR} REQUIRED) +- set(LIB_OBS "${_LIB_OBS}") +-elseif (UNIX) +- # Linux +- find_package(LibObs REQUIRED) + else () +- message(FATAL_ERROR "Unsupported OS!") ++ find_package(libobs REQUIRED) ++ find_package(obs-frontend-api REQUIRED) + endif () + + +@@ -96,18 +90,10 @@ if (WIN32) + "${CMAKE_CURRENT_BINARY_DIR}/version.rc" + ) + endif () +-target_include_directories(obs-multi-rtmp PRIVATE +- "${OBS_SRC_DIR}/libobs" +- "${OBS_SRC_DIR}/UI/obs-frontend-api" +-) +-target_link_directories(obs-multi-rtmp PRIVATE +- "${CMAKE_CURRENT_BINARY_DIR}" +- ${OBS_BIN_DIR} +-) + target_link_libraries(obs-multi-rtmp PRIVATE + Qt6::Widgets +- ${LIB_OBS} +- obs-frontend-api ++ OBS::libobs ++ OBS::obs-frontend-api + ) + + if (WIN32) +-- +2.37.3 diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix new file mode 100644 index 000000000000..0a98afde99f0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-mute-filter.nix @@ -0,0 +1,36 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-mute-filter"; + version = "0.2.2"; + + src = fetchFromGitHub { + owner = "norihiro"; + repo = "obs-mute-filter"; + rev = version; + sha256 = "sha256-SiutSmp+DnzMU62kxtBUL0xgMXTe0k+nKwSU3wQe4+g="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "OBS Studio plugin to mute audio of a source"; + homepage = "https://github.com/norihiro/obs-mute-filter"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix new file mode 100644 index 000000000000..037eda100611 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/default.nix @@ -0,0 +1,43 @@ +{ lib, stdenv, fetchFromGitHub, obs-studio, cmake, qtbase, ndi }: + +stdenv.mkDerivation rec { + pname = "obs-ndi"; + version = "4.13.0"; + + nativeBuildInputs = [ cmake qtbase ]; + buildInputs = [ obs-studio qtbase ndi ]; + + src = fetchFromGitHub { + owner = "Palakis"; + repo = "obs-ndi"; + rev = version; + sha256 = "sha256-ugAMSTXbbIZ61oWvoggVJ5kZEgp/waEcWt89AISrSdE="; + }; + + patches = [ + ./hardcode-ndi-path.patch + ]; + + postPatch = '' + # Add path (variable added in hardcode-ndi-path.patch + sed -i -e s,@NDI@,${ndi},g src/plugin-main.cpp + + # Replace bundled NDI SDK with the upstream version + # (This fixes soname issues) + rm -rf lib/ndi + ln -s ${ndi}/include lib/ndi + ''; + + cmakeFlags = [ "-DENABLE_QT=ON" ]; + + dontWrapQtApps = true; + + meta = with lib; { + description = "Network A/V plugin for OBS Studio"; + homepage = "https://github.com/Palakis/obs-ndi"; + license = licenses.gpl2; + maintainers = with maintainers; [ jshcmpbll ]; + platforms = platforms.linux; + hydraPlatforms = ndi.meta.hydraPlatforms; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/hardcode-ndi-path.patch b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/hardcode-ndi-path.patch new file mode 100644 index 000000000000..b675c10a0346 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-ndi/hardcode-ndi-path.patch @@ -0,0 +1,16 @@ +diff --git a/src/plugin-main.cpp b/src/plugin-main.cpp +index 0d94add..617af73 100644 +--- a/src/plugin-main.cpp ++++ b/src/plugin-main.cpp +@@ -244,10 +244,7 @@ const NDIlib_v4 *load_ndilib() + if (!path.isEmpty()) { + locations << path; + } +-#if defined(__linux__) || defined(__APPLE__) +- locations << "/usr/lib"; +- locations << "/usr/local/lib"; +-#endif ++ locations << "@NDI@/lib"; + for (QString location : locations) { + path = QDir::cleanPath( + QDir(location).absoluteFilePath(NDILIB_LIBRARY_NAME)); diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-nvfbc.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-nvfbc.nix new file mode 100644 index 000000000000..ab113065629d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-nvfbc.nix @@ -0,0 +1,26 @@ +{ stdenv, lib, fetchFromGitLab, meson, ninja, pkg-config +, obs-studio, libGL, libX11 +}: + +stdenv.mkDerivation rec { + pname = "obs-nvfbc"; + version = "0.0.7"; + + src = fetchFromGitLab { + owner = "fzwoch"; + repo = "obs-nvfbc"; + rev = "v${version}"; + sha256 = "sha256-AJ3K0O1vrixskn+/Tpg7LsgRO8N4sgDo1Y6gg3CwGVo="; + }; + + nativeBuildInputs = [ meson pkg-config ninja ]; + buildInputs = [ obs-studio libGL libX11 ]; + + meta = with lib; { + description = "OBS Studio source plugin for NVIDIA FBC API"; + homepage = "https://gitlab.com/fzwoch/obs-nvfbc"; + license = licenses.gpl2Only; + maintainers = with maintainers; [ babbaj ]; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-pipewire-audio-capture.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-pipewire-audio-capture.nix new file mode 100644 index 000000000000..e73b54aac18f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-pipewire-audio-capture.nix @@ -0,0 +1,37 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, ninja +, obs-studio +, pipewire +, pkg-config +}: + +stdenv.mkDerivation rec { + pname = "obs-pipewire-audio-capture"; + version = "1.1.3"; + + src = fetchFromGitHub { + owner = "dimtpap"; + repo = pname; + rev = version; + sha256 = "sha256-dL/+Y1uaD+7EY0UNWbxvh1TTLYfgk07qCqLLGvfzWZk="; + }; + + nativeBuildInputs = [ cmake ninja pkg-config ]; + buildInputs = [ obs-studio pipewire ]; + + cmakeFlags = [ + "-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs" + "-Wno-dev" + ]; + + meta = with lib; { + description = "Audio device and application capture for OBS Studio using PipeWire"; + homepage = "https://github.com/dimtpap/obs-pipewire-audio-capture"; + maintainers = with maintainers; [ Elinvention ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-replay-source.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-replay-source.nix new file mode 100644 index 000000000000..c3987ab33ff0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-replay-source.nix @@ -0,0 +1,40 @@ +{ stdenv +, lib +, fetchFromGitHub +, cmake +, libcaption +, obs-studio +, qtbase +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "obs-replay-source"; + version = "1.6.13"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-replay-source"; + rev = finalAttrs.version; + sha256 = "sha256-i64rpIVnUplA9AKZtR3xeByeawca7B00kGmEcKi7DWQ="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ libcaption obs-studio qtbase ]; + + postInstall = '' + mkdir -p "$out/lib" "$out/share" + mv "$out/obs-plugins/64bit" "$out/lib/obs-plugins" + rm -rf "$out/obs-plugins" + mv "$out/data" "$out/share/obs" + ''; + + dontWrapQtApps = true; + + meta = with lib; { + description = "Replay source for OBS studio"; + homepage = "https://github.com/exeldro/obs-replay-source"; + license = licenses.gpl2Only; + platforms = platforms.linux; + maintainers = with maintainers; [ pschmitt ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix new file mode 100644 index 000000000000..7e2bd12581df --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-rgb-levels-filter.nix @@ -0,0 +1,33 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-rgb-levels-filter"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "wimpysworld"; + repo = "obs-rgb-levels-filter"; + rev = version; + sha256 = "sha256-QREwK9nBhjCBFslXUj9bGUGPgfEns8QqlgP5e2O/0oU="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DOBS_SRC_DIR=${obs-studio.src}" + ]; + + meta = with lib; { + description = "A simple OBS Studio filter to adjust RGB levels."; + homepage = "https://github.com/wimpysworld/obs-rgb-levels-filter"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-scale-to-sound.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-scale-to-sound.nix new file mode 100644 index 000000000000..5716439655d4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-scale-to-sound.nix @@ -0,0 +1,40 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-scale-to-sound"; + version = "1.2.3"; + + src = fetchFromGitHub { + owner = "dimtpap"; + repo = "obs-scale-to-sound"; + rev = version; + sha256 = "sha256-q/zNHPazNwmd7GHXrxNgajtOhcW+oTgH9rkIBzJpdpA="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "OBS filter plugin that scales a source reactively to sound levels"; + homepage = "https://github.com/dimtpap/obs-scale-to-sound"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix new file mode 100644 index 000000000000..3f037d916aa2 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-shaderfilter.nix @@ -0,0 +1,41 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +, qtbase +}: + +stdenv.mkDerivation rec { + pname = "obs-shaderfilter"; + version = "2.3.0"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-shaderfilter"; + rev = version; + sha256 = "sha256-3xMCMsjnEF5aNKBNMhSMAgKuaDnNP+3+uN1u76+Te+8="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio qtbase ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + dontWrapQtApps = true; + + postInstall = '' + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "OBS Studio filter for applying an arbitrary shader to a source."; + homepage = "https://github.com/exeldro/obs-shaderfilter"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-clone.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-clone.nix new file mode 100644 index 000000000000..7850d0229f24 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-clone.nix @@ -0,0 +1,37 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-source-clone"; + version = "0.1.4"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-source-clone"; + rev = version; + sha256 = "sha256-E2pHJO3cdOXmSlTVGsz4tncm9fMaa8Rhsq9YZDNidjs="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for OBS Studio to clone sources"; + homepage = "https://github.com/exeldro/obs-source-clone"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix new file mode 100644 index 000000000000..9f1a52bd8bd0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-record.nix @@ -0,0 +1,44 @@ +{ lib, stdenv, fetchFromGitHub, fetchpatch, cmake, obs-studio }: + +stdenv.mkDerivation rec { + pname = "obs-source-record"; + version = "0.3.2"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-source-record"; + rev = version; + sha256 = "sha256-H65uQ9HnKmHs52v3spG92ayeYH/TvmwcMoePMmBMqN8="; + }; + + patches = [ + # fix obs 29.1 compatibility + (fetchpatch { + url = "https://patch-diff.githubusercontent.com/raw/exeldro/obs-source-record/pull/83.diff"; + hash = "sha256-eWOjHHfoXZeoPtqvVyexSi/UQqHm8nu4FEEjma64Ly4="; + }) + ]; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ + obs-studio + ]; + + NIX_CFLAGS_COMPILE = [ "-Wno-error=deprecated-declarations" ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + rm -rf $out/{data,obs-plugins} + ''; + + meta = with lib; { + description = "OBS Studio plugin to make sources available to record via a filter"; + homepage = "https://github.com/exeldro/obs-source-record"; + maintainers = with maintainers; [ robbins ]; + license = licenses.gpl2Only; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-switcher.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-switcher.nix new file mode 100644 index 000000000000..b336ddf91203 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-source-switcher.nix @@ -0,0 +1,37 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-source-switcher"; + version = "0.4.1"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-source-switcher"; + rev = "8babf207d140e52114b6db63d98749d7a0a2758b"; + sha256 = "sha256-J/NdIGsSXCtSOGF72pJZqqN5Y73eJfrA72LgZcTlP5o="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for OBS Studio to switch between a list of sources"; + homepage = "https://github.com/exeldro/obs-source-switcher"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix new file mode 100644 index 000000000000..7cf0bc33c867 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-teleport/default.nix @@ -0,0 +1,54 @@ +{ buildGoModule +, fetchFromGitHub +, lib +, libjpeg +, nix-update-script +, obs-studio +}: + +buildGoModule rec { + pname = "obs-teleport"; + version = "0.7.0"; + + src = fetchFromGitHub { + owner = "fzwoch"; + repo = "obs-teleport"; + rev = version; + sha256 = "sha256-r9j9hePA7MFIECCwHJYLHJMUKmYQrHkJ7FM3LhXGFOY="; + }; + + vendorHash = "sha256-d7Wtc4nrVEf2TA8BI96Vj9BPOgTtfY+1dQVcEsED1ww="; + + buildInputs = [ + libjpeg + obs-studio + ]; + + ldflags = [ "-s" "-w" ]; + + CGO_CFLAGS = "-I${obs-studio}/include/obs"; + CGO_LDFLAGS = "-L${obs-studio}/lib -lobs -lobs-frontend-api"; + + buildPhase = '' + runHook preBuild + + go build -buildmode=c-shared -o obs-teleport.so . + + runHook postBuild + ''; + + postInstall = '' + mkdir -p $out/lib/obs-plugins + mv obs-teleport.so $out/lib/obs-plugins + ''; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "An OBS Studio plugin for an open NDI-like replacement"; + homepage = "https://github.com/fzwoch/obs-teleport"; + maintainers = [ ]; + license = lib.licenses.gpl2Plus; + platforms = obs-studio.meta.platforms; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix new file mode 100644 index 000000000000..3fcc893b0d34 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-text-pthread.nix @@ -0,0 +1,39 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, cairo +, obs-studio +, pango +, pkg-config +}: + +stdenv.mkDerivation rec { + pname = "obs-text-pthread"; + version = "2.0.3"; + + src = fetchFromGitHub { + owner = "norihiro"; + repo = "obs-text-pthread"; + rev = version; + sha256 = "sha256-iwPoFbXkWzwE3smWJ+//ZUayD5OO/3iMSoYUTR3LVks="; + }; + + nativeBuildInputs = [ cmake pkg-config ]; + buildInputs = [ cairo obs-studio pango ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "Rich text source plugin for OBS Studio"; + homepage = "https://github.com/norihiro/obs-text-pthread"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix new file mode 100644 index 000000000000..61165bbf6cbb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-transition-table.nix @@ -0,0 +1,40 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +, qtbase +}: + +stdenv.mkDerivation rec { + pname = "obs-transition-table"; + version = "0.2.7"; + + src = fetchFromGitHub { + owner = "exeldro"; + repo = "obs-transition-table"; + rev = version; + sha256 = "sha256-rGF7hugC5ybpZBAIIXDiy3YDooMawf/yYX2YucQm2/U="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio qtbase ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + dontWrapQtApps = true; + + postInstall = '' + rm -rf $out/obs-plugins $out/data + ''; + + meta = with lib; { + description = "Plugin for OBS Studio to add a Transition Table to the tools menu."; + homepage = "https://github.com/exeldro/obs-transition-table"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-tuna/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-tuna/default.nix new file mode 100644 index 000000000000..798b23b2c8d7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-tuna/default.nix @@ -0,0 +1,65 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchpatch2 +, obs-studio +, cmake +, zlib +, curl +, taglib +, dbus +, pkg-config +, qtbase +, wrapQtAppsHook +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "obs-tuna"; + version = "1.9.7"; + + nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook ]; + buildInputs = [ obs-studio qtbase zlib curl taglib dbus ]; + + src = fetchFromGitHub { + owner = "univrsal"; + repo = "tuna"; + rev = "v${finalAttrs.version}"; + hash = "sha256-NpfQ3zi+1kQNt2Lj4+1kX2bW9A/E2/MhUV1BA1UX4y0="; + fetchSubmodules = true; + }; + + # obs_frontend_add_dock() deprecated in obs 30 + env.NIX_CFLAGS_COMPILE = "-Wno-error=deprecated-declarations"; + + patches = [ + # fix build with qt 6.6.0 + # treewide: replace deprecated qAsConst with std::as_const() + # https://github.com/univrsal/tuna/pull/176 + (fetchpatch2 { + url = "https://github.com/univrsal/tuna/commit/0d570e771f8d8e6ae7c85bd2b86bbf59c264789e.patch"; + hash = "sha256-A5idhMiM9funqhTm5XMIBqwy+FO1SaNPtgZjo+Vws6k="; + }) + # fix build with obs 30 + (fetchpatch2 { + url = "https://github.com/univrsal/tuna/commit/723bd3c7b4e257cf0997611426e555068de77ae7.patch"; + hash = "sha256-MF5vghGYknL6q+A8BJ1yrQcEKIu9I+PWk+RZNYg3fRU="; + }) + ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + dontWrapQtApps = true; + + meta = { + description = "Song information plugin for obs-studio"; + homepage = "https://github.com/univrsal/tuna"; + license = lib.licenses.gpl2Only; + maintainers = with lib.maintainers; [ shortcord ]; + platforms = lib.platforms.linux; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix new file mode 100644 index 000000000000..9b7ec4090dd5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vaapi/default.nix @@ -0,0 +1,56 @@ +{ lib +, stdenv +, fetchFromGitHub +, gst_all_1 +, pciutils +, pkg-config +, meson +, ninja +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-vaapi"; + version = "0.4.1"; + + src = fetchFromGitHub { + owner = "fzwoch"; + repo = pname; + rev = version; + hash = "sha256-PpGNLIOz+fCpcP/nvjcJ+1fkduxjcbZjb7yx8TUO25s="; + }; + + nativeBuildInputs = [ pkg-config meson ninja ]; + buildInputs = with gst_all_1; [ gstreamer gst-plugins-base obs-studio pciutils ]; + + # - We need "getLib" instead of default derivation, otherwise it brings gstreamer-bin; + # - without gst-plugins-base it won't even show proper errors in logs; + # - Without gst-plugins-bad it won't find element "vapostproc"; + # - gst-vaapi adds "VA-API" to "Encoder type"; + # Tip: "could not link appsrc to videoconvert1" can mean a lot of things, enable GST_DEBUG=2 for help. + passthru.obsWrapperArguments = + let + gstreamerHook = package: "--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : ${lib.getLib package}/lib/gstreamer-1.0"; + in + with gst_all_1; builtins.map gstreamerHook [ + gstreamer + gst-plugins-base + gst-plugins-bad + gst-vaapi + ]; + + # Fix output directory + postInstall = '' + mkdir $out/lib/obs-plugins + mv $out/lib/obs-vaapi.so $out/lib/obs-plugins/ + ''; + + meta = with lib; { + description = "OBS Studio VAAPI support via GStreamer"; + homepage = "https://github.com/fzwoch/obs-vaapi"; + changelog = "https://github.com/fzwoch/obs-vaapi/releases/tag/${version}"; + maintainers = with maintainers; [ ahuzik pedrohlc ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix new file mode 100644 index 000000000000..c6e9f450b990 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vertical-canvas.nix @@ -0,0 +1,42 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, curl +, obs-studio +, qtbase +}: + +stdenv.mkDerivation rec { + pname = "obs-vertical-canvas"; + version = "1.4.1"; + + src = fetchFromGitHub { + owner = "Aitum"; + repo = "obs-vertical-canvas"; + rev = version; + sha256 = "sha256-baEF8vcAmac4bwpzJnGE2WczTa6vojjRQ/oEKgYeXgk="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ curl obs-studio qtbase ]; + + cmakeFlags = [ + "-DBUILD_OUT_OF_TREE=On" + ]; + + dontWrapQtApps = true; + + postInstall = '' + rm -rf $out/data + rm -rf $out/obs-plugins + ''; + + meta = with lib; { + description = "Plugin for OBS Studio to add vertical canvas"; + homepage = "https://github.com/Aitum/obs-vertical-canvas"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix new file mode 100644 index 000000000000..6c5e97cc1588 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vintage-filter.nix @@ -0,0 +1,36 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, obs-studio +}: + +stdenv.mkDerivation rec { + pname = "obs-vintage-filter"; + version = "1.0.0"; + + src = fetchFromGitHub { + owner = "cg2121"; + repo = "obs-vintage-filter"; + rev = version; + sha256 = "sha256-K7AxvwVLe4G+75aY430lygSRB7rMtsGi17pGzdygEac="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ obs-studio ]; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "An OBS Studio filter where the source can be set to be black & white or sepia."; + homepage = "https://github.com/cg2121/obs-vintage-filter"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix new file mode 100644 index 000000000000..08109434a0b7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-vkcapture.nix @@ -0,0 +1,68 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, extra-cmake-modules +, ninja +, wayland +, wayland-scanner +, obs-studio +, libffi +, libX11 +, libXau +, libXdmcp +, libxcb +, vulkan-headers +, vulkan-loader +, libGL +, obs-vkcapture32 +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "obs-vkcapture"; + version = "1.4.7"; + + src = fetchFromGitHub { + owner = "nowrep"; + repo = finalAttrs.pname; + rev = "v${finalAttrs.version}"; + hash = "sha256-/EbavDDeFQys9zu3FAgsAeVVbs1Rrv8YR4949XCHc6s="; + }; + + cmakeFlags = lib.optionals stdenv.isi686 [ + # We don't want to build the plugin for 32bit. The library integrates with + # the 64bit plugin but it's necessary to be loaded into 32bit games. + "-DBUILD_PLUGIN=OFF" + ]; + + nativeBuildInputs = [ cmake extra-cmake-modules ninja wayland-scanner ]; + buildInputs = [ + libGL + libffi + libX11 + libXau + libXdmcp + libxcb + vulkan-headers + vulkan-loader + wayland + ] + ++ lib.optionals (!stdenv.isi686) [ + obs-studio + ]; + + # Support 32bit Vulkan applications by linking in the 32bit Vulkan layer + postInstall = lib.optionalString (stdenv.hostPlatform.system == "x86_64-linux") '' + ln -s ${obs-vkcapture32}/share/vulkan/implicit_layer.d/obs_vkcapture_32.json \ + "$out/share/vulkan/implicit_layer.d/" + ''; + + meta = with lib; { + description = "OBS Linux Vulkan/OpenGL game capture"; + homepage = "https://github.com/nowrep/obs-vkcapture"; + changelog = "https://github.com/nowrep/obs-vkcapture/releases/tag/v${finalAttrs.version}"; + maintainers = with maintainers; [ atila pedrohlc ]; + license = licenses.gpl2Only; + platforms = platforms.linux; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix new file mode 100644 index 000000000000..fcf426bde635 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-webkitgtk.nix @@ -0,0 +1,51 @@ +{ lib +, stdenv +, fetchFromGitHub +, obs-studio +, webkitgtk +, glib-networking +, meson +, cmake +, pkg-config +, ninja +, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "obs-webkitgtk"; + version = "unstable-2023-11-10"; + + src = fetchFromGitHub { + owner = "fzwoch"; + repo = "obs-webkitgtk"; + rev = "ddf230852c3c338e69b248bdf453a0630f1298a7"; + hash = "sha256-DU2w9dRgqWniTE76KTAtFdxIN82VKa/CS6ZdfNcTMto="; + }; + + buildInputs = [ + obs-studio + webkitgtk + glib-networking + ]; + + nativeBuildInputs = [ + meson + cmake + pkg-config + ninja + wrapGAppsHook + ]; + + postPatch = '' + substituteInPlace ./obs-webkitgtk.c \ + --replace 'g_file_read_link("/proc/self/exe", NULL)' "g_strdup(\"$out/lib/obs-plugins\")" + ''; + + meta = with lib; { + description = "Yet another OBS Studio browser source"; + homepage = "https://github.com/fzwoch/obs-webkitgtk"; + maintainers = with maintainers; [ j-hui ]; + license = licenses.gpl2Only; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-websocket.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-websocket.nix new file mode 100644 index 000000000000..a9bdff2e30c7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/obs-websocket.nix @@ -0,0 +1,41 @@ +{ lib +, stdenv +, fetchFromGitHub +, cmake +, asio +, obs-studio +, qtbase +, websocketpp +}: + +stdenv.mkDerivation rec { + pname = "obs-websocket"; + version = "4.9.1-compat"; + + src = fetchFromGitHub { + owner = "obsproject"; + repo = "obs-websocket"; + rev = version; + sha256 = "sha256-cHsJxoQjwbWLxiHgIa3Es0mu62vyLCAd1wULeZqZsJM="; + }; + + nativeBuildInputs = [ cmake ]; + buildInputs = [ asio obs-studio qtbase websocketpp ]; + + dontWrapQtApps = true; + + postInstall = '' + mkdir $out/lib $out/share + mv $out/obs-plugins/64bit $out/lib/obs-plugins + rm -rf $out/obs-plugins + mv $out/data $out/share/obs + ''; + + meta = with lib; { + description = "Legacy websocket 4.9.1 protocol support for OBS Studio 28 or above"; + homepage = "https://github.com/obsproject/obs-websocket"; + maintainers = with maintainers; [ flexiondotorg ]; + license = licenses.gpl2Plus; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/waveform/default.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/waveform/default.nix new file mode 100644 index 000000000000..4bbcc6555536 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/waveform/default.nix @@ -0,0 +1,43 @@ +{ stdenv +, lib +, fetchFromGitHub +, cmake +, obs-studio +, pkg-config +, fftwFloat +}: + +stdenv.mkDerivation rec { + pname = "waveform"; + version = "1.8.0"; + + src = fetchFromGitHub { + fetchSubmodules = true; + owner = "phandasm"; + repo = "waveform"; + rev = "v${version}"; + sha256 = "sha256-NcBtj+5X9tPH853a6oXzQCBH26hx8Yt17WjP9ryvgmc="; + }; + + nativeBuildInputs = [ cmake pkg-config ]; + + postFixup = '' + mkdir $out/lib $out/share + mv $out/${pname}/bin/64bit $out/lib/obs-plugins + mv $out/${pname}/data $out/share/obs + rm -rf $out/${pname} + ''; + + buildInputs = [ + obs-studio + fftwFloat + ]; + + meta = { + description = "Audio spectral analysis plugin for OBS"; + homepage = "https://github.com/phandasm/waveform"; + maintainers = with lib.maintainers; [ matthewcroughan ]; + license = lib.licenses.gpl3; + platforms = ["x86_64-linux"]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/plugins/wlrobs.nix b/nixpkgs/pkgs/applications/video/obs-studio/plugins/wlrobs.nix new file mode 100644 index 000000000000..360b3fb349f6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/plugins/wlrobs.nix @@ -0,0 +1,28 @@ +{ lib, stdenv, fetchFromSourcehut +, meson, pkg-config, ninja +, wayland, obs-studio, libX11 +}: + +stdenv.mkDerivation { + pname = "wlrobs"; + version = "unstable-2023-08-23"; + + src = fetchFromSourcehut { + vc = "hg"; + owner = "~scoopta"; + repo = "wlrobs"; + rev = "f72d5cb3cbbd3983ae6cfd86cb1940be7372681c"; + hash = "sha256-hiM0d38SSUqbyisP3fAtKRLBDjVKZdU2U1xyXci7yNk="; + }; + + nativeBuildInputs = [ meson pkg-config ninja ]; + buildInputs = [ wayland obs-studio libX11 ]; + + meta = with lib; { + description = "An obs-studio plugin that allows you to screen capture on wlroots based wayland compositors"; + homepage = "https://hg.sr.ht/~scoopta/wlrobs"; + maintainers = with maintainers; [ grahamc ]; + license = licenses.gpl3Plus; + platforms = [ "x86_64-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/obs-studio/wrapper.nix b/nixpkgs/pkgs/applications/video/obs-studio/wrapper.nix new file mode 100644 index 000000000000..62bc80d26df3 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/obs-studio/wrapper.nix @@ -0,0 +1,41 @@ +{ lib, obs-studio, symlinkJoin, makeWrapper }: + +{ plugins ? [] }: + +symlinkJoin { + name = "wrapped-${obs-studio.name}"; + + nativeBuildInputs = [ makeWrapper ]; + paths = [ obs-studio ] ++ plugins; + + postBuild = with lib; + let + # Some plugins needs extra environment, see obs-gstreamer for an example. + pluginArguments = + lists.concatMap (plugin: plugin.obsWrapperArguments or []) plugins; + + pluginsJoined = symlinkJoin { + name = "obs-studio-plugins"; + paths = plugins; + }; + + wrapCommandLine = [ + "wrapProgram" + "$out/bin/obs" + ''--set OBS_PLUGINS_PATH "${pluginsJoined}/lib/obs-plugins"'' + ''--set OBS_PLUGINS_DATA_PATH "${pluginsJoined}/share/obs/obs-plugins"'' + ] ++ lists.unique pluginArguments; + in '' + ${concatStringsSep " " wrapCommandLine} + + # Remove unused obs-plugins dir to not cause confusion + rm -r $out/share/obs/obs-plugins + # Leave some breadcrumbs + echo 'Plugins are at ${pluginsJoined}/share/obs/obs-plugins' > $out/share/obs/obs-plugins-README + ''; + + inherit (obs-studio) meta; + passthru = obs-studio.passthru // { + passthru.unwrapped = obs-studio; + }; +} diff --git a/nixpkgs/pkgs/applications/video/ogmtools/default.nix b/nixpkgs/pkgs/applications/video/ogmtools/default.nix new file mode 100644 index 000000000000..d910383bf956 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/ogmtools/default.nix @@ -0,0 +1,27 @@ +{ lib, stdenv, fetchurl, libogg, libvorbis, libdvdread }: + +stdenv.mkDerivation rec { + pname = "ogmtools"; + version = "1.5"; + + src = fetchurl { + url = "https://www.bunkus.org/videotools/ogmtools/ogmtools-${version}.tar.bz2"; + sha256 = "1spx81p5wf59ksl3r3gvf78d77sh7gj8a6lw773iv67bphfivmn8"; + }; + + buildInputs = [ libogg libvorbis libdvdread ]; + + env.NIX_CFLAGS_COMPILE = toString [ "-std=c++14" ]; + + meta = { + description = "Tools for modifying and inspecting OGG media streams"; + longDescription = '' + These tools allow information about (ogminfo) or extraction from + (ogmdemux) or creation of (ogmmerge) OGG media streams. Includes dvdxchap + tool for extracting chapter information from DVD. + ''; + homepage = "https://www.bunkus.org/videotools/ogmtools/"; + license = lib.licenses.gpl2; + platforms = lib.platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/olive-editor/default.nix b/nixpkgs/pkgs/applications/video/olive-editor/default.nix new file mode 100644 index 000000000000..514da9c50d75 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/olive-editor/default.nix @@ -0,0 +1,96 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchpatch +, pkg-config +, which +, frei0r +, opencolorio +, ffmpeg_4 +, CoreFoundation +, cmake +, wrapQtAppsHook +, openimageio +, openexr_3 +, portaudio +, imath +, qtwayland +, qtmultimedia +, qttools +}: + +let + # https://github.com/olive-editor/olive/issues/2284 + # we patch support for 2.3+, but 2.5 fails + openimageio' = openimageio.overrideAttrs (old: rec { + version = "2.4.15.0"; + src = (old.src.override { + rev = "v${version}"; + hash = "sha256-I2/JPmUBDb0bw7qbSZcAkYHB2q2Uo7En7ZurMwWhg/M="; + }); + }); +in + +stdenv.mkDerivation { + pname = "olive-editor"; + version = "unstable-2023-06-12"; + + src = fetchFromGitHub { + fetchSubmodules = true; + owner = "olive-editor"; + repo = "olive"; + rev = "2036fffffd0e24b7458e724b9084ae99c9507c64"; + sha256 = "sha256-qee9/WTvTy5jWLowvZJOwAjrqznRhJR+u9dYsnCN/Qs="; + }; + + cmakeFlags = [ + "-DBUILD_QT6=1" + ]; + + patches = [ + (fetchpatch { + # Taken from https://github.com/olive-editor/olive/pull/2294. + name = "olive-editor-openimageio-2.3-compat.patch"; + url = "https://github.com/olive-editor/olive/commit/311eeb72944f93f873d1cd1784ee2bf423e1e7c2.patch"; + hash = "sha256-lswWn4DbXGH1qPvPla0jSgUJQXuqU7LQGHIPoXAE8ag="; + }) + ]; + + # https://github.com/olive-editor/olive/issues/2200 + postPatch = '' + substituteInPlace ./app/node/project/serializer/serializer230220.cpp \ + --replace 'QStringRef' 'QStringView' + ''; + + nativeBuildInputs = [ + pkg-config + which + cmake + wrapQtAppsHook + ]; + + buildInputs = [ + ffmpeg_4 + frei0r + opencolorio + openimageio' + imath + openexr_3 + portaudio + qtwayland + qtmultimedia + qttools + ] ++ lib.optional stdenv.isDarwin CoreFoundation; + + meta = with lib; { + description = "Professional open-source NLE video editor"; + homepage = "https://www.olivevideoeditor.org/"; + downloadPage = "https://www.olivevideoeditor.org/download.php"; + license = licenses.gpl3; + maintainers = [ maintainers.balsoft ]; + platforms = platforms.unix; + # never built on aarch64-darwin since first introduction in nixpkgs + broken = stdenv.isDarwin && stdenv.isAarch64; + mainProgram = "olive-editor"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/omxplayer/default.nix b/nixpkgs/pkgs/applications/video/omxplayer/default.nix new file mode 100644 index 000000000000..e01d0a2f49c7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/omxplayer/default.nix @@ -0,0 +1,100 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchurl +, raspberrypifw +, pcre +, boost +, freetype +, zlib +}: + +let + ffmpeg = stdenv.mkDerivation rec { + pname = "ffmpeg"; + version = "1.1.3"; + + src = fetchurl { + url = "http://www.ffmpeg.org/releases/ffmpeg-${version}.tar.bz2"; + sha256 = "03s1zsprz5p6gjgwwqcf7b6cvzwwid6l8k7bamx9i0f1iwkgdm0j"; + }; + + configurePlatforms = [ ]; + configureFlags = [ + "--arch=${stdenv.hostPlatform.parsed.cpu.name}" + ] ++ lib.optionals stdenv.hostPlatform.isAarch32 [ + # TODO be better with condition + "--cpu=arm1176jzf-s" + ] ++ [ + "--disable-muxers" + "--enable-muxer=spdif" + "--enable-muxer=adts" + "--disable-encoders" + "--enable-encoder=ac3" + "--enable-encoder=aac" + "--disable-decoder=mpeg_xvmc" + "--disable-devices" + "--disable-ffprobe" + "--disable-ffplay" + "--disable-ffserver" + "--disable-ffmpeg" + "--enable-shared" + "--disable-doc" + "--enable-postproc" + "--enable-gpl" + "--enable-protocol=http" + "--enable-pthreads" + "--disable-runtime-cpudetect" + "--enable-pic" + "--disable-armv5te" + "--disable-neon" + "--enable-armv6t2" + "--enable-armv6" + "--enable-hardcoded-tables" + "--disable-runtime-cpudetect" + "--disable-debug" + "--arch=${stdenv.hostPlatform.parsed.cpu.name}" + "--target_os=${stdenv.hostPlatform.parsed.kernel.name}" + ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + "--cross-prefix=${stdenv.cc.targetPrefix}" + "--enable-cross-compile" + ]; + + enableParallelBuilding = true; + + meta = { + homepage = "http://www.ffmpeg.org/"; + description = "A complete, cross-platform solution to record, convert and stream audio and video"; + }; + }; +in +stdenv.mkDerivation rec { + pname = "omxplayer"; + version = "unstable-2013-03-28"; + + src = fetchFromGitHub { + owner = "huceke"; + repo = "omxplayer"; + rev = "fbee325dc20441138d04d8d2022ad85956302e97"; + sha256 = "0fkvv8il7ffqxki2gp8cxa5shh6sz9jsy5vv3f4025g4gss6afkg"; + }; + + postPatch = '' + sed -i 1d Makefile + export INCLUDES="-I${raspberrypifw}/include/interface/vcos/pthreads -I${raspberrypifw}/include/interface/vmcs_host/linux/" + ''; + + installPhase = '' + mkdir -p $out/bin + cp omxplayer.bin $out/bin + ''; + + buildInputs = [ raspberrypifw ffmpeg pcre boost freetype zlib ]; + + meta = with lib; { + homepage = "https://github.com/huceke/omxplayer"; + description = "Commandline OMX player for the Raspberry Pi"; + license = licenses.gpl2Plus; + platforms = platforms.arm; + }; +} diff --git a/nixpkgs/pkgs/applications/video/open-in-mpv/default.nix b/nixpkgs/pkgs/applications/video/open-in-mpv/default.nix new file mode 100644 index 000000000000..e6f820528882 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/open-in-mpv/default.nix @@ -0,0 +1,39 @@ +{ lib +, buildGoModule +, fetchFromGitHub +}: + +buildGoModule rec { + pname = "open-in-mpv"; + version = "2.2.0"; + + src = fetchFromGitHub { + owner = "Baldomo"; + repo = "open-in-mpv"; + rev = "v${version}"; + hash = "sha256-+sP8/wILBkT3NnhENDYZbOwqOufkFyMJFpQxquuUBEs="; + }; + + vendorHash = "sha256-G6GZO2+CfEAYcf7zBcqDa808A0eJjM8dq7+4VGZ+P4c="; + + ldflags = [ "-s" "-w" ]; + + postInstall = '' + install -Dm444 -t $out/share/applications scripts/open-in-mpv.desktop + ''; + + meta = with lib; { + description = "Simple web extension to open videos in mpv"; + longDescription = '' + To function the browser extension must be installed and open-in-mpv must be set as the default scheme-handler for mpv:// eg.: + xdg-mime default open-in-mpv.desktop x-scheme-handler/mpv + + https://addons.mozilla.org/en-US/firefox/addon/iina-open-in-mpv/ + https://chrome.google.com/webstore/detail/open-in-mpv/ggijpepdpiehgbiknmfpfbhcalffjlbj + ''; + homepage = "https://github.com/Baldomo/open-in-mpv"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ SuperSandro2000 ]; + mainProgram = "open-in-mpv"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/openshot-qt/default.nix b/nixpkgs/pkgs/applications/video/openshot-qt/default.nix new file mode 100644 index 000000000000..089b60a3b27c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/openshot-qt/default.nix @@ -0,0 +1,90 @@ +{ lib +, stdenv +, mkDerivationWith +, fetchFromGitHub +, doxygen +, gtk3 +, libopenshot +, python3 +, qtbase +, qtsvg +, wrapGAppsHook +}: + +let + pname = "openshot-qt"; + version = "3.1.1"; + src = fetchFromGitHub { + owner = "OpenShot"; + repo = "openshot-qt"; + rev = "v${version}"; + hash = "sha256-kEz1APBitWLlnIbyloYMsqNrwC9RqU04kyyWzm5klYc="; + }; +in +mkDerivationWith python3.pkgs.buildPythonApplication { + inherit pname version src; + + outputs = [ "out" ]; # "lib" can't be split + + nativeBuildInputs = [ + doxygen + wrapGAppsHook + ]; + + buildInputs = [ + gtk3 + ]; + + propagatedBuildInputs = with python3.pkgs; [ + httplib2 + libopenshot + pyqtwebengine + pyzmq + requests + sip4 + ]; + + strictDeps = true; + + preConfigure = '' + # the builder tries to create caching directories during install + export HOME=$(mktemp -d) + ''; + + doCheck = false; + + dontWrapGApps = true; + dontWrapQtApps = true; + + postFixup = '' + wrapProgram $out/bin/openshot-qt \ + '' + # Fix toolbar icons on Darwin + + lib.optionalString stdenv.isDarwin '' + --suffix QT_PLUGIN_PATH : "${lib.getBin qtsvg}/${qtbase.qtPluginPrefix}" \ + '' + '' + "''${gappsWrapperArgs[@]}" \ + "''${qtWrapperArgs[@]}" + ''; + + passthru = { + inherit libopenshot; + inherit (libopenshot) libopenshot-audio; + }; + + meta = { + homepage = "http://openshot.org/"; + description = "Free, open-source video editor"; + longDescription = '' + OpenShot Video Editor is a free, open-source video editor for Linux. + OpenShot can take your videos, photos, and music files and help you create + the film you have always dreamed of. Easily add sub-titles, transitions, + and effects, and then export your film to DVD, YouTube, Vimeo, Xbox 360, + and many other common formats. + ''; + license = with lib.licenses; [ gpl3Plus ]; + mainProgram = "openshot-qt"; + maintainers = with lib.maintainers; [ AndersonTorres ]; + platforms = lib.platforms.unix; + }; +} diff --git a/nixpkgs/pkgs/applications/video/p2pvc/default.nix b/nixpkgs/pkgs/applications/video/p2pvc/default.nix new file mode 100644 index 000000000000..ec2f0c95f899 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/p2pvc/default.nix @@ -0,0 +1,29 @@ +{ lib, stdenv, pkg-config, fetchFromGitHub, opencv2, ncurses, portaudio }: + +stdenv.mkDerivation { + pname = "p2pvc"; + version = "unstable-2015-02-12"; + + nativeBuildInputs = [ pkg-config ]; + buildInputs = [ opencv2 ncurses portaudio ]; + + enableParallelBuilding = true; + + installPhase = "mkdir -p $out/bin; cp p2pvc $out/bin/"; + + src = fetchFromGitHub { + owner = "mofarrell"; + repo = "p2pvc"; + rev = "d7b1c70288a7750fc8f9a22dbddbe51d34b5b9e5"; + sha256 = "0d4vvrsjad5gk4rrjwgydn9ffj12jfb4aksw2px6jw75hp9pzmka"; + }; + + meta = { + description = "A point to point color terminal video chat"; + homepage = "https://github.com/mofarrell/p2pvc"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ trino ]; + platforms = with lib.platforms; linux; + mainProgram = "p2pvc"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/peek/default.nix b/nixpkgs/pkgs/applications/video/peek/default.nix new file mode 100644 index 000000000000..105a86fbf4a7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/peek/default.nix @@ -0,0 +1,94 @@ +{ stdenv +, lib +, fetchFromGitHub +, fetchpatch +, nix-update-script +, meson +, ninja +, gettext +, desktop-file-utils +, appstream-glib +, pkg-config +, txt2man +, vala +, wrapGAppsHook +, gsettings-desktop-schemas +, gtk3 +, glib +, cairo +, keybinder3 +, ffmpeg-full +, python3 +, libxml2 +, gst_all_1 +, which +, gifski +}: + +stdenv.mkDerivation rec { + pname = "peek"; + version = "1.5.1"; + + src = fetchFromGitHub { + owner = "phw"; + repo = "peek"; + rev = version; + sha256 = "1xwlfizga6hvjqq127py8vabaphsny928ar7mwqj9cyqfl6fx41x"; + }; + + patches = [ + # Fix compatibility with GNOME Shell ≥ 40. + # https://github.com/phw/peek/pull/910 + (fetchpatch { + url = "https://github.com/phw/peek/commit/008d15316ab5428363c512b263ca8138cb8f52ba.patch"; + sha256 = "xxJ+r5uRk93MEzWTFla88ewZsnUl3+YKTenzDygtKP0="; + }) + ]; + + nativeBuildInputs = [ + appstream-glib + desktop-file-utils + gettext + meson + ninja + libxml2 + pkg-config + txt2man + python3 + vala + wrapGAppsHook + ]; + + buildInputs = [ + cairo + glib + gsettings-desktop-schemas + gtk3 + gst_all_1.gstreamer + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-ugly + keybinder3 + ]; + + postPatch = '' + patchShebangs build-aux/meson/postinstall.py data/man/build_man.sh + ''; + + preFixup = '' + gappsWrapperArgs+=(--prefix PATH : ${lib.makeBinPath [ which ffmpeg-full gifski ]}) + ''; + + passthru = { + updateScript = nix-update-script { }; + }; + + + meta = with lib; { + homepage = "https://github.com/phw/peek"; + description = "Simple animated GIF screen recorder with an easy to use interface"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ puffnfresh ]; + platforms = platforms.linux; + mainProgram = "peek"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/pipe-viewer/default.nix b/nixpkgs/pkgs/applications/video/pipe-viewer/default.nix new file mode 100644 index 000000000000..536b904fd858 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/pipe-viewer/default.nix @@ -0,0 +1,94 @@ +{ lib +, fetchFromGitHub +, perl +, buildPerlModule +, makeWrapper +, wrapGAppsHook +, withGtk3 ? false +, ffmpeg +, mpv +, wget +, xdg-utils +, youtube-dl +, yt-dlp +, TestPod +, Gtk3 +}: +let + perlEnv = perl.withPackages (ps: with ps; [ + AnyURIEscape + DataDump + Encode + FilePath + GetoptLong + HTTPMessage + JSON + JSONXS + LWPProtocolHttps + LWPUserAgentCached + Memoize + PathTools + ScalarListUtils + TermReadLineGnu + TextParsewords + UnicodeLineBreak + ] ++ lib.optionals withGtk3 [ + FileShareDir + ]); +in +buildPerlModule rec { + pname = "pipe-viewer"; + version = "0.4.9"; + + src = fetchFromGitHub { + owner = "trizen"; + repo = "pipe-viewer"; + rev = version; + hash = "sha256-7l8exCC9robe1hKnQAaIVfnn8L+FuwTOkxaxlwJmpe0="; + }; + + nativeBuildInputs = [ makeWrapper ] + ++ lib.optionals withGtk3 [ wrapGAppsHook ]; + + buildInputs = [ perlEnv ] + # Can't be in perlEnv for wrapGAppsHook to work correctly + ++ lib.optional withGtk3 Gtk3; + + # Not supported by buildPerlModule + # and the Perl code fails anyway + # when Getopt::Long sets $gtk in Build.PL: + # Modification of a read-only value attempted at /nix/store/eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee-perl5.34.0-Getopt-Long-2.52/lib/perl5/site_perl/5.34.0/Getopt/Long.pm line 585. + #buildFlags = lib.optional withGtk3 "--gtk3"; + postPatch = lib.optionalString withGtk3 '' + substituteInPlace Build.PL --replace 'my $gtk ' 'my $gtk = 1;#' + ''; + + nativeCheckInputs = [ + TestPod + ]; + + dontWrapGApps = true; + + postInstall = '' + cp -r share/* $out/share + ''; + + postFixup = '' + wrapProgram "$out/bin/pipe-viewer" \ + --prefix PATH : "${lib.makeBinPath [ ffmpeg mpv wget youtube-dl yt-dlp ]}" + '' + lib.optionalString withGtk3 '' + # make xdg-open overrideable at runtime + wrapProgram "$out/bin/gtk-pipe-viewer" ''${gappsWrapperArgs[@]} \ + --prefix PATH : "${lib.makeBinPath [ ffmpeg mpv wget youtube-dl yt-dlp ]}" \ + --suffix PATH : "${lib.makeBinPath [ xdg-utils ]}" + ''; + + meta = with lib; { + homepage = "https://github.com/trizen/pipe-viewer"; + description = "CLI+GUI YouTube Client"; + license = licenses.artistic2; + maintainers = with maintainers; [ julm ]; + platforms = platforms.all; + mainProgram = "pipe-viewer"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/pitivi/default.nix b/nixpkgs/pkgs/applications/video/pitivi/default.nix new file mode 100644 index 000000000000..eb00353b83d1 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/pitivi/default.nix @@ -0,0 +1,109 @@ +{ lib +, fetchurl +, pkg-config +, gettext +, itstool +, python3 +, wrapGAppsHook +, gst_all_1 +, gtk3 +, gobject-introspection +, libpeas +, librsvg +, gnome +, libnotify +, gsound +, meson +, ninja +, gsettings-desktop-schemas +, hicolor-icon-theme +}: + +python3.pkgs.buildPythonApplication rec { + pname = "pitivi"; + version = "2023.03"; + + format = "other"; + + src = fetchurl { + url = "mirror://gnome/sources/pitivi/${lib.versions.major version}/${pname}-${version}.tar.xz"; + sha256 = "PX1OFEeavqMPvF613BKgxwErxqW2huw6mQxo8YpBS/M="; + }; + + patches = [ + # By default, the build picks up environment variables like PYTHONPATH + # and saves them to the generated binary. This would make the build-time + # dependencies part of the closure so we remove it. + ./prevent-closure-contamination.patch + ]; + + nativeBuildInputs = [ + meson + ninja + pkg-config + gettext + itstool + python3 + wrapGAppsHook + gobject-introspection + ]; + + buildInputs = [ + gtk3 + libpeas + librsvg + gsound + gsettings-desktop-schemas + libnotify + ] ++ (with gst_all_1; [ + gstreamer + gst-editing-services + gst-plugins-base + (gst-plugins-good.override { gtkSupport = true; }) + gst-plugins-bad + gst-plugins-ugly + gst-libav + gst-devtools + ]); + + pythonPath = with python3.pkgs; [ + pygobject3 + gst-python + numpy + pycairo + matplotlib + librosa + ]; + + preFixup = '' + gappsWrapperArgs+=( + # The icon theme is hardcoded. + --prefix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" + ) + ''; + + postPatch = '' + patchShebangs ./getenvvar.py + ''; + + passthru = { + updateScript = gnome.updateScript { + packageName = "pitivi"; + versionPolicy = "none"; # we are using dev version, since the stable one is too old + }; + }; + + meta = with lib; { + description = "Non-Linear video editor utilizing the power of GStreamer"; + homepage = "http://pitivi.org/"; + longDescription = '' + Pitivi is a video editor built upon the GStreamer Editing Services. + It aims to be an intuitive and flexible application + that can appeal to newbies and professionals alike. + ''; + license = licenses.lgpl21Plus; + maintainers = with maintainers; [ ]; + platforms = platforms.linux; + mainProgram = "pitivi"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/pitivi/prevent-closure-contamination.patch b/nixpkgs/pkgs/applications/video/pitivi/prevent-closure-contamination.patch new file mode 100644 index 000000000000..0025ecd0a4cf --- /dev/null +++ b/nixpkgs/pkgs/applications/video/pitivi/prevent-closure-contamination.patch @@ -0,0 +1,23 @@ +--- a/meson.build ++++ b/meson.build +@@ -26,15 +26,15 @@ + geteenvvar = find_program('getenvvar.py') + cdata = configuration_data() + cdata.set('CONFIGURED_PYTHONPATH', +- run_command(geteenvvar, 'PYTHONPATH').stdout().strip()) ++ '') + cdata.set('CONFIGURED_GI_TYPELIB_PATH', +- run_command(geteenvvar, 'GI_TYPELIB_PATH').stdout().strip()) ++ '') + cdata.set('CONFIGURED_LD_LIBRARY_PATH', +- run_command(geteenvvar, 'LD_LIBRARY_PATH').stdout().strip()) ++ '') + cdata.set('CONFIGURED_GST_PLUGIN_PATH', +- run_command(geteenvvar, 'GST_PLUGIN_PATH').stdout().strip()) ++ '') + cdata.set('CONFIGURED_GST_PLUGIN_SYSTEM_PATH', +- run_command(geteenvvar, 'GST_PLUGIN_SYSTEM_PATH').stdout().strip()) ++ '') + cdata.set('LIBDIR', join_paths(get_option('prefix'), get_option('libdir'))) + cdata.set('DATADIR', join_paths(get_option('prefix'), get_option('datadir'))) + cdata.set('PACKAGE_NAME', 'Pitivi') diff --git a/nixpkgs/pkgs/applications/video/plex-media-player/default.nix b/nixpkgs/pkgs/applications/video/plex-media-player/default.nix new file mode 100644 index 000000000000..6a686d9d2c2a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/plex-media-player/default.nix @@ -0,0 +1,53 @@ +{ lib, fetchFromGitHub, fetchurl, pkg-config, cmake, python3, mkDerivation +, libX11, libXrandr, qtbase, qtwebchannel, qtwebengine, qtx11extras +, libvdpau, SDL2, mpv, libGL }: +let + # During compilation, a CMake bundle is downloaded from `artifacts.plex.tv`, + # which then downloads a handful of web client-related files. To enable + # sandboxed builds, we manually download them and save them so these files + # are fetched ahead-of-time instead of during the CMake build. To update + # plex-media-player use the update.sh script, so the versions and hashes + # for these files are are also updated! + depSrcs = import ./deps.nix { inherit fetchurl; }; +in mkDerivation rec { + pname = "plex-media-player"; + version = "2.58.1"; + vsnHash = "ae73e074"; + + src = fetchFromGitHub { + owner = "plexinc"; + repo = "plex-media-player"; + rev = "v${version}-${vsnHash}"; + sha256 = "1q20fdp5d0blb0q6p2357bwdc2g65cadkgdp4w533ij2nyaxydjd"; + }; + + nativeBuildInputs = [ pkg-config cmake python3 ]; + buildInputs = [ libX11 libXrandr qtbase qtwebchannel qtwebengine qtx11extras + libvdpau SDL2 mpv libGL ]; + + preConfigure = with depSrcs; '' + mkdir -p build/dependencies + ln -s ${webClient} build/dependencies/buildid-${webClientBuildId}.cmake + ln -s ${webClientDesktopHash} build/dependencies/web-client-desktop-${webClientDesktopBuildId}.tar.xz.sha1 + ln -s ${webClientDesktop} build/dependencies/web-client-desktop-${webClientDesktopBuildId}.tar.xz + ln -s ${webClientTvHash} build/dependencies/web-client-tv-${webClientTvBuildId}.tar.xz.sha1 + ln -s ${webClientTv} build/dependencies/web-client-tv-${webClientTvBuildId}.tar.xz + ''; + + cmakeBuildType = "RelWithDebInfo"; + + cmakeFlags = [ "-DQTROOT=${qtbase}" ]; + + # plexmediaplayer currently segfaults under wayland + qtWrapperArgs = [ "--set" "QT_QPA_PLATFORM" "xcb" ]; + + passthru.updateScript = ./update.sh; + + meta = with lib; { + description = "Streaming media player for Plex"; + license = licenses.gpl2; + maintainers = with maintainers; [ b4dm4n ]; + homepage = "https://plex.tv"; + mainProgram = "plexmediaplayer"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/plex-media-player/deps.nix b/nixpkgs/pkgs/applications/video/plex-media-player/deps.nix new file mode 100644 index 000000000000..cfb74c2d4898 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/plex-media-player/deps.nix @@ -0,0 +1,28 @@ +{ fetchurl }: + +rec { + webClientBuildId = "183-045db5be50e175"; + webClientDesktopBuildId = "4.29.2-e50e175"; + webClientTvBuildId = "4.29.6-045db5b"; + + webClient = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/buildid.cmake"; + sha256 = "1xsacy1xb8a9rfdrd7lvx7n3hd0cf2c3mgmg9wl18jvwnqxyac83"; + }; + webClientDesktopHash = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz.sha1"; + sha256 = "07spxyhrg45ppa2zjn3ri4qvi6qimlmq6wmh492r3jkrwd71rxgf"; + }; + webClientDesktop = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz"; + sha256 = "1zll79hpgx8fghx228li9qairfd637yf8rhvjzdgpq4dvn21fv65"; + }; + webClientTvHash = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz.sha1"; + sha256 = "1zzfw2g76wqrxrx9kck5q79if78z91wn3awj703kz9sgxi4bkjsk"; + }; + webClientTv = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz"; + sha256 = "1f1zvrr3c0w37gvl78blg9rgxxi64nc4iv5vd87qbysfh1vpsjz0"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/plex-media-player/update.sh b/nixpkgs/pkgs/applications/video/plex-media-player/update.sh new file mode 100755 index 000000000000..a8493a16c989 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/plex-media-player/update.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p curl common-updater-scripts nix-prefetch-scripts jq + +set -xeuo pipefail + +nixpkgs="$(git rev-parse --show-toplevel)" + +oldVersion="$(nix-instantiate --eval -E "with import $nixpkgs {}; plex-media-player.version or (builtins.parseDrvName plex-media-player.name).version" | tr -d '"')" +latestTag="$(curl -s https://api.github.com/repos/plexinc/plex-media-player/tags | jq -r '.[] | .name' | sort --version-sort | tail -1)" +latestVersion="$(expr $latestTag : 'v\(.*\)-.*')" +latestHash="$(expr $latestTag : 'v.*-\(.*\)')" + +if [ ! "$oldVersion" = "$latestVersion" ]; then + # update default.nix with the new version and hash + expectedHash=$(nix-prefetch-git --url https://github.com/plexinc/plex-media-player.git --rev $latestTag --quiet | jq -r '.sha256') + update-source-version plex-media-player --version-key=vsnHash "${latestHash}" 0000 + update-source-version plex-media-player "${latestVersion}" $expectedHash + + # extract the webClientBuildId from the source folder + src="$(nix-build --no-out-link $nixpkgs -A plex-media-player.src)" + webClientBuildId="$(grep 'set(WEB_CLIENT_BUILD_ID' $src/CMakeModules/WebClient.cmake | cut -d' ' -f2 | tr -d ')')" + + # retreive the included cmake file and hash + { read -r webClientBuildIdHash; read -r webClientBuildIdPath; } < \ + <(nix-prefetch-url --print-path "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/buildid.cmake") + webClientDesktopBuildId="$(grep 'set(DESKTOP_VERSION' $webClientBuildIdPath | cut -d' ' -f2 | tr -d ')')" + webClientTvBuildId="$(grep 'set(TV_VERSION' $webClientBuildIdPath | cut -d' ' -f2 | tr -d ')')" + + # get the hashes for the other files + webClientDesktopHash="$(nix-prefetch-url "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz.sha1")" + webClientDesktop="$(nix-prefetch-url "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-desktop-${webClientDesktopBuildId}.tar.xz")" + webClientTvHash="$(nix-prefetch-url "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz.sha1")" + webClientTv="$(nix-prefetch-url "https://artifacts.plex.tv/web-client-pmp/${webClientBuildId}/web-client-tv-${webClientTvBuildId}.tar.xz")" + + # update deps.nix + cat > $nixpkgs/pkgs/applications/video/plex-media-player/deps.nix <<EOF +{ fetchurl }: + +rec { + webClientBuildId = "${webClientBuildId}"; + webClientDesktopBuildId = "${webClientDesktopBuildId}"; + webClientTvBuildId = "${webClientTvBuildId}"; + + webClient = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/\${webClientBuildId}/buildid.cmake"; + sha256 = "${webClientBuildIdHash}"; + }; + webClientDesktopHash = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/\${webClientBuildId}/web-client-desktop-\${webClientDesktopBuildId}.tar.xz.sha1"; + sha256 = "${webClientDesktopHash}"; + }; + webClientDesktop = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/\${webClientBuildId}/web-client-desktop-\${webClientDesktopBuildId}.tar.xz"; + sha256 = "${webClientDesktop}"; + }; + webClientTvHash = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/\${webClientBuildId}/web-client-tv-\${webClientTvBuildId}.tar.xz.sha1"; + sha256 = "${webClientTvHash}"; + }; + webClientTv = fetchurl { + url = "https://artifacts.plex.tv/web-client-pmp/\${webClientBuildId}/web-client-tv-\${webClientTvBuildId}.tar.xz"; + sha256 = "${webClientTv}"; + }; +} +EOF + + git add "$nixpkgs"/pkgs/applications/video/plex-media-player/{default,deps}.nix + git commit -m "plex-media-player: ${oldVersion} -> ${latestVersion}" +else + echo "plex-media-player is already up-to-date" +fi diff --git a/nixpkgs/pkgs/applications/video/plex-mpv-shim/default.nix b/nixpkgs/pkgs/applications/video/plex-mpv-shim/default.nix new file mode 100644 index 000000000000..2e71c4668356 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/plex-mpv-shim/default.nix @@ -0,0 +1,52 @@ +{ lib, buildPythonApplication, fetchFromGitHub, fetchpatch, python, mpv, requests, python-mpv-jsonipc, pystray, tkinter +, wrapGAppsHook, gobject-introspection, mpv-shim-default-shaders }: + +buildPythonApplication rec { + pname = "plex-mpv-shim"; + version = "1.11.0"; + + src = fetchFromGitHub { + owner = "iwalton3"; + repo = pname; + rev = "refs/tags/v${version}"; + sha256 = "sha256-hUGKOJEDZMK5uhHoevFt1ay6QQEcoN4F8cPxln5uMRo="; + }; + + patches = [ + # pull in upstream commit to fix python-mpv dependency name -- remove when version > 1.11.0 + (fetchpatch { + url = "https://github.com/iwalton3/plex-mpv-shim/commit/d8643123a8ec79216e02850b08f63b06e4e0a2ea.diff"; + hash = "sha256-nc+vwYnAtMjVzL2fIQeTAqhf3HBseL+2pFEtv8zNUXo="; + }) + ]; + + nativeBuildInputs = [ + wrapGAppsHook + gobject-introspection + ]; + + propagatedBuildInputs = [ mpv requests python-mpv-jsonipc pystray tkinter ]; + + # needed for pystray to access appindicator using GI + preFixup = '' + makeWrapperArgs+=("''${gappsWrapperArgs[@]}") + ''; + dontWrapGApps = true; + + postInstall = '' + # put link to shaders where upstream package expects them + ln -s ${mpv-shim-default-shaders}/share/mpv-shim-default-shaders $out/${python.sitePackages}/plex_mpv_shim/default_shader_pack + ''; + + # does not contain tests + doCheck = false; + + meta = with lib; { + homepage = "https://github.com/iwalton3/plex-mpv-shim"; + description = "Allows casting of videos to MPV via the Plex mobile and web app"; + maintainers = with maintainers; [ devusb ]; + license = licenses.mit; + platforms = platforms.linux; + mainProgram = "plex-mpv-shim"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/prism/default.nix b/nixpkgs/pkgs/applications/video/prism/default.nix new file mode 100644 index 000000000000..68ef965ec1ab --- /dev/null +++ b/nixpkgs/pkgs/applications/video/prism/default.nix @@ -0,0 +1,23 @@ +{ lib, buildGoModule, fetchFromGitHub }: + +buildGoModule rec { + pname = "prism"; + version = "0.1.1"; + + src = fetchFromGitHub { + owner = "muesli"; + repo = pname; + rev = "v${version}"; + hash = "sha256-IRR7Gu+wGUUYyFfhc003QVlEaWCJPmi6XYVUN6Q6+GA="; + }; + + vendorHash = "sha256-uKtVifw4dxJdVvHxytL+9qjXHEdTyiz8U8n/95MObdY="; + + meta = with lib; { + description = "An RTMP stream recaster/splitter"; + homepage = "https://github.com/muesli/prism"; + license = licenses.mit; + maintainers = with maintainers; [ paperdigits ]; + mainProgram = "prism"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/pyca/default.nix b/nixpkgs/pkgs/applications/video/pyca/default.nix new file mode 100644 index 000000000000..73b6e606118a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/pyca/default.nix @@ -0,0 +1,82 @@ +{ lib +, python3 +, buildNpmPackage +, fetchFromGitHub +, jq +, stdenv +}: + +let + python = python3.override { + packageOverrides = self: super: { + # pyCA is incompatible with SQLAlchemy 2.0 + sqlalchemy = super.sqlalchemy_1_4; + }; + }; + + frontend = buildNpmPackage rec { + pname = "pyca"; + version = "4.5"; + + src = fetchFromGitHub { + owner = "opencast"; + repo = "pyCA"; + rev = "v${version}"; + sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk="; + }; + + npmDepsHash = "sha256-0U+semrNWTkNu3uQQkiJKZT1hB0/IfkL84G7/oP8XYY="; + + nativeBuildInputs = [ jq python ]; + + postPatch = '' + ${jq}/bin/jq '. += {"version": "${version}"}' < package.json > package.json.tmp + mv package.json.tmp package.json + ''; + + installPhase = '' + mkdir -p $out/static + cp -R pyca/ui/static/* $out/static/ + ''; + }; + +in +python3.pkgs.buildPythonApplication rec { + pname = "pyca"; + version = "4.5"; + + src = fetchFromGitHub { + owner = "opencast"; + repo = "pyCA"; + rev = "v${version}"; + sha256 = "sha256-cTkWkOmgxJZlddqaSYKva2wih4Mvsdrd7LD4NggxKQk="; + }; + + propagatedBuildInputs = with python.pkgs; [ + pycurl + python-dateutil + configobj + sqlalchemy + sdnotify + psutil + flask + prometheus-client + ]; + + postPatch = '' + sed -i -e 's#static_folder=.*#static_folder="${frontend}/static")#' pyca/ui/__init__.py + ''; + + passthru = { + inherit frontend; + }; + + meta = with lib; { + broken = stdenv.isDarwin; + description = "A fully functional Opencast capture agent written in Python"; + homepage = "https://github.com/opencast/pyCA"; + license = licenses.lgpl3; + maintainers = with maintainers; [ pmiddend ]; + }; +} + diff --git a/nixpkgs/pkgs/applications/video/qarte/default.nix b/nixpkgs/pkgs/applications/video/qarte/default.nix new file mode 100644 index 000000000000..cbbf1f307620 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/qarte/default.nix @@ -0,0 +1,47 @@ +{ mkDerivation, lib, fetchbzr, python3, rtmpdump }: + +let + pythonEnv = python3.withPackages (ps: with ps; [ m3u8 pyqt5-multimedia ]); +in mkDerivation { + pname = "qarte"; + version = "5.5.0"; + + src = fetchbzr { + url = "http://bazaar.launchpad.net/~vincent-vandevyvre/qarte/qarte-5"; + rev = "88"; + sha256 = "sha256-+Ixe4bWKubH/XBESwmP2NWS8bH0jq611c3MZn7W87Jw="; + }; + + buildInputs = [ pythonEnv ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + mv qarte $out/bin/ + substituteInPlace $out/bin/qarte \ + --replace '/usr/share' "$out/share" + + mkdir -p $out/share/man/man1/ + mv qarte.1 $out/share/man/man1/ + + mkdir -p $out/share/qarte + mv * $out/share/qarte/ + + runHook postInstall + ''; + + postFixup = '' + wrapQtApp $out/bin/qarte \ + --prefix PATH : ${rtmpdump}/bin + ''; + + meta = with lib; { + homepage = "https://launchpad.net/qarte"; + description = "A recorder for Arte TV Guide and Arte Concert"; + license = licenses.gpl3; + maintainers = with maintainers; [ vbgl ]; + platforms = platforms.linux; + mainProgram = "qarte"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/qctools/default.nix b/nixpkgs/pkgs/applications/video/qctools/default.nix new file mode 100644 index 000000000000..cbe565fe73c8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/qctools/default.nix @@ -0,0 +1,40 @@ +{ lib, stdenv, fetchurl, qmake, wrapQtAppsHook, ffmpeg, qtmultimedia, qwt }: + +stdenv.mkDerivation rec { + pname = "qctools"; + version = "1.3.1"; + + src = fetchurl { + url = "https://mediaarea.net/download/source/${pname}/${version}/${pname}_${version}.tar.xz"; + hash = "sha256-ClF8KiVjV2JTCjz/ueioojhiHZf8UW9WONaJrIx4Npo="; + }; + + sourceRoot = "${pname}/Project/QtCreator"; + + nativeBuildInputs = [ qmake wrapQtAppsHook ]; + + buildInputs = [ ffmpeg qtmultimedia qwt ]; + + installPhase = '' + runHook preInstall + + install -Dt $out/bin qctools-cli/qcli qctools-gui/QCTools + cd ../GNU/GUI + install -Dm644 qctools.desktop $out/share/applications/qctools.desktop + install -Dm644 qctools.metainfo.xml $out/share/metainfo/qctools.metainfo.xml + cd ../../../Source/Resource + install -Dm 0644 Logo.png $out/share/icons/hicolor/256x256/apps/qctools.png + install -Dm 0644 Logo.png $out/share/pixmaps/qctools.png + cd ../../Project/QtCreator + + runHook postInstall + ''; + + meta = with lib; { + description = "Audiovisual analytics and filtering of video files"; + homepage = "https://mediaarea.net/QCTools"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ orivej ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/qmediathekview/default.nix b/nixpkgs/pkgs/applications/video/qmediathekview/default.nix new file mode 100644 index 000000000000..359679103497 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/qmediathekview/default.nix @@ -0,0 +1,43 @@ +{ lib +, stdenv +, mkDerivation +, fetchFromGitHub +, boost +, qtbase +, xz +, qmake +, pkg-config +}: + +mkDerivation rec { + pname = "QMediathekView"; + version = "0.2.1"; + + src = fetchFromGitHub { + owner = "adamreichold"; + repo = pname; + rev = "v${version}"; + sha256 = "0i9hac9alaajbra3lx23m0iiq6ww4is00lpbzg5x70agjrwj0nd6"; + }; + + postPatch = '' + substituteInPlace ${pname}.pro \ + --replace /usr "" + ''; + + buildInputs = [ qtbase xz boost ]; + + nativeBuildInputs = [ qmake pkg-config ]; + + installFlags = [ "INSTALL_ROOT=$(out)" ]; + + meta = with lib; { + description = "An alternative Qt-based front-end for the database maintained by the MediathekView project"; + inherit (src.meta) homepage; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = with maintainers; [ dotlambda ]; + broken = stdenv.isAarch64; + mainProgram = "QMediathekView"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/qmplay2/default.nix b/nixpkgs/pkgs/applications/video/qmplay2/default.nix new file mode 100644 index 000000000000..b6b577790cfb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/qmplay2/default.nix @@ -0,0 +1,85 @@ +{ lib +, stdenv +, fetchFromGitHub +, alsa-lib +, cmake +, ffmpeg +, fribidi +, game-music-emu +, libXdmcp +, libXv +, libass +, libcddb +, libcdio +, libpulseaudio +, libsidplayfp +, libva +, libxcb +, pkg-config +, qtbase +, qttools +, taglib +, vulkan-headers +, vulkan-tools +, wrapQtAppsHook +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "qmplay2"; + version = "23.10.22"; + + src = fetchFromGitHub { + owner = "zaps166"; + repo = "QMPlay2"; + rev = finalAttrs.version; + fetchSubmodules = true; + hash = "sha256-yDymUXuILgT4AFTt302GniPi/WNwrTCOuOfdUiKOIyk="; + }; + + nativeBuildInputs = [ + cmake + pkg-config + wrapQtAppsHook + ]; + + buildInputs = [ + alsa-lib + ffmpeg + fribidi + game-music-emu + libXdmcp + libXv + libass + libcddb + libcdio + libpulseaudio + libsidplayfp + libva + libxcb + qtbase + qttools + taglib + vulkan-headers + vulkan-tools + ]; + + postInstall = '' + # Because we think it is better to use only lowercase letters! + ln -s $out/bin/QMPlay2 $out/bin/qmplay2 + ''; + + meta = { + homepage = "https://github.com/zaps166/QMPlay2/"; + description = "Qt-based Multimedia player"; + longDescription = '' + QMPlay2 is a video and audio player. It can play all formats supported by + FFmpeg, libmodplug (including J2B and SFX). It also supports Audio CD, raw + files, Rayman 2 music and chiptunes. It contains YouTube and MyFreeMP3 + browser. + ''; + changelog = "https://github.com/zaps166/QMPlay2/releases/tag/${finalAttrs.version}"; + license = lib.licenses.lgpl3Plus; + maintainers = with lib.maintainers; [ AndersonTorres kashw2 ]; + platforms = lib.platforms.linux; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/qstopmotion/default.nix b/nixpkgs/pkgs/applications/video/qstopmotion/default.nix new file mode 100644 index 000000000000..3172c4bb4343 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/qstopmotion/default.nix @@ -0,0 +1,86 @@ +{ lib, stdenv +, mkDerivation +, fetchurl +, qtbase +, qtmultimedia +, qtquickcontrols +, qtimageformats +, qtxmlpatterns +, ffmpeg +, guvcview +, cmake +, ninja +, libxml2 +, gettext +, pkg-config +, libgphoto2 +, gphoto2 +, v4l-utils +, libv4l +, pcre +, qwt +, extra-cmake-modules +}: + +mkDerivation rec { + pname = "qstopmotion"; + version = "2.5.2"; + + src = fetchurl { + url = "mirror://sourceforge/project/${pname}/Version_${builtins.replaceStrings ["."] ["_"] version}/${pname}-${version}-Source.tar.gz"; + sha256 = "sha256-jyBUyadkSuQKXOrr5XZ1jy6of1Qw8S2HPxuOrPc7RnE="; + }; + + buildInputs = [ + qtbase + qtmultimedia + qtquickcontrols + qtimageformats + qtxmlpatterns + v4l-utils + libv4l + pcre + guvcview + qwt + ]; + + nativeBuildInputs = [ + pkg-config + cmake + extra-cmake-modules + ninja + gettext + libgphoto2 + gphoto2 + libxml2 + libv4l + ]; + + patchPhase = '' + substituteInPlace CMakeLists.txt \ + --replace "find_package(Qt5 REQUIRED COMPONENTS Core Widgets Xml" \ + "find_package(Qt5 REQUIRED COMPONENTS Core Widgets Xml Multimedia" + grep -rl 'qwt' . | xargs sed -i 's@<qwt/qwt_slider.h>@<qwt_slider.h>@g' + ''; + + qtWrapperArgs = [ + "--prefix" "PATH" ":" (lib.makeBinPath [ ffmpeg ]) + ]; + + meta = with lib; { + homepage = "http://www.qstopmotion.org"; + description = "Create stopmotion animation with a (web)camera"; + longDescription = '' + Qstopmotion is a tool to create stopmotion + animation. Its users are able to create stop-motions from pictures + imported from a camera or from the harddrive and export the + animation to different video formats such as mpeg or avi. + ''; + + license = lib.licenses.gpl2Plus; + maintainers = [ maintainers.leenaars ]; + broken = stdenv.isAarch64; + platforms = lib.platforms.gnu ++ lib.platforms.linux; + mainProgram = "qstopmotion"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/recapp/default.nix b/nixpkgs/pkgs/applications/video/recapp/default.nix new file mode 100644 index 000000000000..c15a0680a933 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/recapp/default.nix @@ -0,0 +1,82 @@ +{ lib +, python3 +, fetchFromGitHub +, appstream-glib +, desktop-file-utils +, gettext +, glib +, gobject-introspection +, gtk3 +, gst_all_1 +, libnotify +, librsvg +, meson +, ninja +, pkg-config +, slop +, wrapGAppsHook +}: + +python3.pkgs.buildPythonApplication rec { + pname = "recapp"; + version = "1.1.1"; + + format = "other"; + + src = fetchFromGitHub { + owner = "amikha1lov"; + repo = "RecApp"; + rev = "v${version}"; + sha256 = "08bpfcqgw0lj6j7y5b2i18kffawlzp6pfk4wdpmk29vwmgk9s9yc"; + }; + + postPatch = '' + patchShebangs build-aux/meson + ''; + + nativeBuildInputs = [ + appstream-glib + desktop-file-utils + gettext + glib + gtk3 + meson + ninja + pkg-config + wrapGAppsHook + gobject-introspection + ]; + + buildInputs = [ + libnotify + librsvg + gtk3 + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-ugly + ]; + + propagatedBuildInputs = with python3.pkgs; [ + pulsectl + pydbus + pygobject3 + ]; + + dontWrapGApps = true; + + preFixup = '' + makeWrapperArgs+=( + "''${gappsWrapperArgs[@]}" + "--prefix" "PATH" ":" "${lib.makeBinPath [ gst_all_1.gstreamer.dev slop ]}" + ) + ''; + + meta = with lib; { + description = "User friendly Open Source screencaster for Linux written in GTK"; + homepage = "https://github.com/amikha1lov/RecApp"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ dotlambda ]; + mainProgram = "recapp"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/rtabmap/default.nix b/nixpkgs/pkgs/applications/video/rtabmap/default.nix new file mode 100644 index 000000000000..200fab274339 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/rtabmap/default.nix @@ -0,0 +1,87 @@ +{ lib +, stdenv +, fetchFromGitHub +, fetchpatch +, pkg-config +, cmake +, opencv +, pcl +, libusb1 +, eigen +, wrapQtAppsHook +, qtbase +, g2o +, ceres-solver +, libpointmatcher +, octomap +, freenect +, libdc1394 +, librealsense +, libGL +, libGLU +, vtkWithQt5 +, wrapGAppsHook +, liblapack +, xorg +}: + +stdenv.mkDerivation rec { + pname = "rtabmap"; + version = "0.21.0"; + + src = fetchFromGitHub { + owner = "introlab"; + repo = "rtabmap"; + rev = "refs/tags/${version}"; + hash = "sha256-1xb8O3VrErldid2OgAUMG28mSUO7QBUsPuSz8p03tSI"; + }; + + patches = [ + # Fix build with g2o 20230806 + (fetchpatch { + url = "https://github.com/introlab/rtabmap/commit/85cc6fe3c742855ad16c8442895e12dbb10b6e8b.patch"; + hash = "sha256-P6GkYKCNwe9dgZdgF/oEhgjA3bJnwXFWJCPoyIknQCo="; + }) + # Fix typo in previous patch + (fetchpatch { + url = "https://github.com/introlab/rtabmap/commit/c4e94bcdc31b859c1049724dbb7671e4597d86de.patch"; + hash = "sha256-1btkV4/y+bnF3xEVqlUy/9F6BoANeTOEJjZLmRzG3iA="; + }) + ]; + + nativeBuildInputs = [ cmake pkg-config wrapQtAppsHook wrapGAppsHook ]; + buildInputs = [ + ## Required + opencv + pcl + liblapack + xorg.libSM + xorg.libICE + xorg.libXt + ## Optional + libusb1 + eigen + g2o + ceres-solver + # libpointmatcher - ABI mismatch + octomap + freenect + libdc1394 + # librealsense - missing includedir + qtbase + libGL + libGLU + vtkWithQt5 + ]; + + # Disable warnings that are irrelevant to us as packagers + cmakeFlags = [ "-Wno-dev" ]; + + meta = with lib; { + description = "Real-Time Appearance-Based 3D Mapping"; + homepage = "https://introlab.github.io/rtabmap/"; + license = licenses.bsd3; + maintainers = with maintainers; [ ckie ]; + platforms = with platforms; linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/screenkey/default.nix b/nixpkgs/pkgs/applications/video/screenkey/default.nix new file mode 100644 index 000000000000..90cf5e7dcf24 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/screenkey/default.nix @@ -0,0 +1,69 @@ +{ lib +, fetchFromGitLab +, wrapGAppsHook +, xorg +, gobject-introspection +, gtk3 +, libappindicator-gtk3 +, slop +, python3 +}: + +python3.pkgs.buildPythonApplication rec { + pname = "screenkey"; + version = "1.5"; + + src = fetchFromGitLab { + owner = pname; + repo = pname; + rev = "v${version}"; + hash = "sha256-kWktKzRyWHGd1lmdKhPwrJoSzAIN2E5TKyg30uhM4Ug="; + }; + + nativeBuildInputs = [ + wrapGAppsHook + # for setup hook + gobject-introspection + ]; + + buildInputs = [ + gtk3 + libappindicator-gtk3 + ]; + + propagatedBuildInputs = with python3.pkgs; [ + babel + pycairo + pygobject3 + dbus-python + ]; + + # Prevent double wrapping because of wrapGAppsHook + dontWrapGApps = true; + + preFixup = '' + makeWrapperArgs+=( + --prefix PATH ":" "${lib.makeBinPath [ slop ]}" + "''${gappsWrapperArgs[@]}" + ) + ''; + + # screenkey does not have any tests + doCheck = false; + + # Fix CDLL python calls for non absolute paths of xorg libraries + postPatch = '' + substituteInPlace Screenkey/xlib.py \ + --replace libX11.so.6 ${lib.getLib xorg.libX11}/lib/libX11.so.6 \ + --replace libXtst.so.6 ${lib.getLib xorg.libXtst}/lib/libXtst.so.6 + ''; + + meta = with lib; { + homepage = "https://www.thregr.org/~wavexx/software/screenkey/"; + description = "A screencast tool to display your keys inspired by Screenflick"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = [ maintainers.rasendubi ]; + mainProgram = "screenkey"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/shaka-packager/default.nix b/nixpkgs/pkgs/applications/video/shaka-packager/default.nix new file mode 100644 index 000000000000..0bb73ee50e76 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/shaka-packager/default.nix @@ -0,0 +1,62 @@ +{ lib +, stdenv +, fetchurl +, runCommand +, shaka-packager +}: + +let + sources = { + "x86_64-linux" = { + filename = "packager-linux-x64"; + hash = "sha256-MoMX6PEtvPmloXJwRpnC2lHlT+tozsV4dmbCqweyyI0="; + }; + aarch64-linux = { + filename = "packager-linux-arm64"; + hash = "sha256-6+7SfnwVRsqFwI7/1F7yqVtkJVIoOFUmhoGU3P6gdQ0="; + }; + x86_64-darwin = { + filename = "packager-osx-x64"; + hash = "sha256-fFBtOp/Zb37LP7TWAEB0yp0xM88cMT9QS59EwW4MrAY="; + }; + }; + + source = sources."${stdenv.hostPlatform.system}" + or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); +in +stdenv.mkDerivation (finalAttrs: { + pname = "shaka-packager"; + version = "2.6.1"; + + src = fetchurl { + url = "https://github.com/shaka-project/shaka-packager/releases/download/v${finalAttrs.version}/${source.filename}"; + inherit (source) hash; + }; + + dontUnpack = true; + sourceRoot = "."; + + installPhase = '' + runHook preInstall + + install -m755 -D $src $out/bin/packager + + runHook postInstall + ''; + + passthru.tests = { + simple = runCommand "${finalAttrs.pname}-test" { } '' + ${shaka-packager}/bin/packager -version | grep ${finalAttrs.version} > $out + ''; + }; + + meta = { + description = "Media packaging framework for VOD and Live DASH and HLS applications"; + homepage = "https://shaka-project.github.io/shaka-packager/html/"; + license = lib.licenses.bsd3; + mainProgram = "packager"; + maintainers = with lib.maintainers; [ ]; + platforms = builtins.attrNames sources; + sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ]; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/shotcut/default.nix b/nixpkgs/pkgs/applications/video/shotcut/default.nix new file mode 100644 index 000000000000..ca3c0599a626 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/shotcut/default.nix @@ -0,0 +1,82 @@ +{ lib +, fetchFromGitHub +, stdenv +, wrapQtAppsHook +, substituteAll +, SDL2 +, frei0r +, ladspaPlugins +, gettext +, mlt +, jack1 +, pkg-config +, fftw +, qtbase +, qttools +, qtmultimedia +, qtcharts +, cmake +, gitUpdater +}: +stdenv.mkDerivation rec { + pname = "shotcut"; + version = "24.02.19"; + + src = fetchFromGitHub { + owner = "mltframework"; + repo = "shotcut"; + rev = "v${version}"; + hash = "sha256-fjm2gqbuLKj6YyAZGgbfWUd+JOM9/Fhvpfz0E+TaqY0="; + }; + + nativeBuildInputs = [ pkg-config cmake wrapQtAppsHook ]; + buildInputs = [ + SDL2 + frei0r + ladspaPlugins + gettext + mlt + fftw + qtbase + qttools + qtmultimedia + qtcharts + ]; + + env.NIX_CFLAGS_COMPILE = "-DSHOTCUT_NOUPGRADE"; + cmakeFlags = [ + "-DSHOTCUT_VERSION=${version}" + ]; + + patches = [ + (substituteAll { inherit mlt; src = ./fix-mlt-ffmpeg-path.patch; }) + ]; + + qtWrapperArgs = [ + "--set FREI0R_PATH ${frei0r}/lib/frei0r-1" + "--set LADSPA_PATH ${ladspaPlugins}/lib/ladspa" + "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [jack1 SDL2]}" + ]; + + passthru.updateScript = gitUpdater { + rev-prefix = "v"; + }; + + meta = with lib; { + description = "A free, open source, cross-platform video editor"; + longDescription = '' + An official binary for Shotcut, which includes all the + dependencies pinned to specific versions, is provided on + http://shotcut.org. + + If you encounter problems with this version, please contact the + nixpkgs maintainer(s). If you wish to report any bugs upstream, + please use the official build from shotcut.org instead. + ''; + homepage = "https://shotcut.org"; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ goibhniu woffs peti ]; + platforms = platforms.linux; + mainProgram = "shotcut"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/shotcut/fix-mlt-ffmpeg-path.patch b/nixpkgs/pkgs/applications/video/shotcut/fix-mlt-ffmpeg-path.patch new file mode 100644 index 000000000000..fa584162cbe8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/shotcut/fix-mlt-ffmpeg-path.patch @@ -0,0 +1,80 @@ +diff --git a/src/docks/encodedock.cpp b/src/docks/encodedock.cpp +index 3359f676..24e44f98 100644 +--- a/src/docks/encodedock.cpp ++++ b/src/docks/encodedock.cpp +@@ -2177,7 +2177,7 @@ bool EncodeDock::detectHardwareEncoders() + { + MAIN.showStatusMessage(tr("Detecting hardware encoders...")); + QStringList hwlist; +- QFileInfo ffmpegPath(qApp->applicationDirPath(), "ffmpeg"); ++ QFileInfo ffmpegPath("@ffmpeg@/bin/ffmpeg"); + foreach (const QString &codec, codecs()) { + LOG_INFO() << "checking for" << codec; + QProcess proc; +@@ -2220,7 +2220,7 @@ bool EncodeDock::detectHardwareEncoders() + QString &EncodeDock::defaultFormatExtension() + { + auto format = ui->formatCombo->currentText(); +- QFileInfo ffmpegPath(qApp->applicationDirPath(), "ffmpeg"); ++ QFileInfo ffmpegPath("@ffmpeg@/bin/ffmpeg"); + QProcess proc; + QStringList args; + args << "-hide_banner" << "-h" << format.prepend("muxer="); +diff --git a/src/jobs/ffmpegjob.cpp b/src/jobs/ffmpegjob.cpp +index 1f15e647..b6ad6633 100644 +--- a/src/jobs/ffmpegjob.cpp ++++ b/src/jobs/ffmpegjob.cpp +@@ -54,7 +54,7 @@ FfmpegJob::~FfmpegJob() + void FfmpegJob::start() + { + QString shotcutPath = qApp->applicationDirPath(); +- QFileInfo ffmpegPath(shotcutPath, "ffmpeg"); ++ QFileInfo ffmpegPath("@ffmpeg@/bin/ffmpeg"); + setReadChannel(QProcess::StandardError); + LOG_DEBUG() << ffmpegPath.absoluteFilePath() + " " + m_args.join(' '); + AbstractJob::start(ffmpegPath.absoluteFilePath(), m_args); +diff --git a/src/jobs/meltjob.cpp b/src/jobs/meltjob.cpp +index fd8c00b8..9150fe7b 100644 +--- a/src/jobs/meltjob.cpp ++++ b/src/jobs/meltjob.cpp +@@ -98,9 +98,9 @@ void MeltJob::start() + } + QString shotcutPath = qApp->applicationDirPath(); + #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +- QFileInfo meltPath(shotcutPath, "melt-7"); ++ QFileInfo meltPath("@mlt@/bin/melt"); + #else +- QFileInfo meltPath(shotcutPath, "melt"); ++ QFileInfo meltPath("@mlt@/bin/melt"); + #endif + setReadChannel(QProcess::StandardError); + QStringList args; +diff --git a/src/mltcontroller.cpp b/src/mltcontroller.cpp +index 1e2299ac..b8f39f12 100644 +--- a/src/mltcontroller.cpp ++++ b/src/mltcontroller.cpp +@@ -1555,9 +1555,9 @@ int Controller::checkFile(const QString &path) + || path.endsWith(".aep")) { + QString shotcutPath = qApp->applicationDirPath(); + #if defined(Q_OS_UNIX) && !defined(Q_OS_MAC) +- QFileInfo meltPath(shotcutPath, "melt-7"); ++ QFileInfo meltPath("@mlt@/bin/melt"); + #else +- QFileInfo meltPath(shotcutPath, "melt"); ++ QFileInfo meltPath("@mlt@/bin/melt"); + #endif + QStringList args; + args << "-quiet" << "-consumer" << "null" << "real_time=0" << "out=0" << "terminate_on_pause=1" << +diff --git a/src/widgets/directshowvideowidget.cpp b/src/widgets/directshowvideowidget.cpp +index c91ba821..73dd5a61 100644 +--- a/src/widgets/directshowvideowidget.cpp ++++ b/src/widgets/directshowvideowidget.cpp +@@ -35,7 +35,7 @@ DirectShowVideoWidget::DirectShowVideoWidget(QWidget *parent) : + ui->setupUi(this); + Util::setColorsToHighlight(ui->label); + #ifdef Q_OS_WIN +- QFileInfo ffmpegPath(qApp->applicationDirPath(), "ffmpeg"); ++ QFileInfo ffmpegPath("@ffmpeg@/bin/ffmpeg"); + QProcess proc; + QStringList args; + args << "-hide_banner" << "-list_devices" << "true" << "-f" << "dshow" << "-i" << "dummy"; diff --git a/nixpkgs/pkgs/applications/video/showmethekey/default.nix b/nixpkgs/pkgs/applications/video/showmethekey/default.nix new file mode 100644 index 000000000000..cd61cfc9d0d4 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/showmethekey/default.nix @@ -0,0 +1,49 @@ +{ lib +, stdenv +, fetchFromGitHub +, meson +, ninja +, libevdev +, json-glib +, libinput +, gtk4 +, libadwaita +, wrapGAppsHook4 +, libxkbcommon +, pkg-config +}: +stdenv.mkDerivation rec { + pname = "showmethekey"; + version = "1.12.0"; + + src = fetchFromGitHub { + owner = "AlynxZhou"; + repo = pname; + rev = "v${version}"; + hash = "sha256-eeObomb4Gv/vpvViHsi3+O0JR/rYamrlZNZaXKL6KJw="; + }; + + nativeBuildInputs = [ + meson + ninja + json-glib + pkg-config + wrapGAppsHook4 + ]; + + buildInputs = [ + gtk4 + libadwaita + libevdev + libinput + libxkbcommon + ]; + + meta = with lib; { + homepage = "https://showmethekey.alynx.one/"; + description = "Show keys you typed on screen"; + license = licenses.asl20; + platforms = platforms.linux; + maintainers = with maintainers; [ ocfox ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/simplescreenrecorder/default.nix b/nixpkgs/pkgs/applications/video/simplescreenrecorder/default.nix new file mode 100644 index 000000000000..cbeb325e7ce0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/simplescreenrecorder/default.nix @@ -0,0 +1,44 @@ +{ lib, stdenv, mkDerivation, fetchFromGitHub, alsa-lib, ffmpeg_4, libjack2, libX11, libXext, libXinerama, qtx11extras +, libXfixes, libGLU, libGL, pkg-config, libpulseaudio, libv4l, qtbase, qttools, cmake, ninja +}: + +mkDerivation rec { + pname = "simplescreenrecorder"; + version = "0.4.3"; + + src = fetchFromGitHub { + owner = "MaartenBaert"; + repo = "ssr"; + rev = version; + sha256 = "0mrx8wprs8bi42fwwvk6rh634ic9jnn0gkfpd6q9pcawnnbz3vq8"; + }; + + cmakeFlags = [ + "-DWITH_QT5=TRUE" + "-DWITH_GLINJECT=${if stdenv.hostPlatform.isx86 then "TRUE" else "FALSE"}" + ]; + + patches = [ ./fix-paths.patch ]; + + postPatch = '' + for i in scripts/ssr-glinject src/AV/Input/GLInjectInput.cpp; do + substituteInPlace $i \ + --subst-var out \ + --subst-var-by sh ${stdenv.shell} + done + ''; + + nativeBuildInputs = [ pkg-config cmake ninja ]; + buildInputs = [ + alsa-lib ffmpeg_4 libjack2 libX11 libXext libXfixes libXinerama libGLU libGL + libpulseaudio libv4l qtbase qttools qtx11extras + ]; + + meta = with lib; { + description = "A screen recorder for Linux"; + homepage = "https://www.maartenbaert.be/simplescreenrecorder"; + license = licenses.gpl3Plus; + platforms = platforms.linux; + maintainers = [ maintainers.goibhniu ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/simplescreenrecorder/fix-paths.patch b/nixpkgs/pkgs/applications/video/simplescreenrecorder/fix-paths.patch new file mode 100644 index 000000000000..9cf634285fcb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/simplescreenrecorder/fix-paths.patch @@ -0,0 +1,35 @@ +diff --git a/scripts/ssr-glinject b/scripts/ssr-glinject +index 48be48d..5038d4c 100755 +--- a/scripts/ssr-glinject ++++ b/scripts/ssr-glinject +@@ -59,6 +59,6 @@ do + fi + done + +-echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:libssr-glinject.so" ++echo "ssr-glinject: LD_PRELOAD = $LD_PRELOAD:@out@/lib/libssr-glinject.so" + echo "ssr-glinject: command = $@" +-LD_PRELOAD="$LD_PRELOAD:libssr-glinject.so" "$@" ++LD_PRELOAD="$LD_PRELOAD:@out@/lib/libssr-glinject.so" "$@" +diff --git a/src/AV/Input/GLInjectInput.cpp b/src/AV/Input/GLInjectInput.cpp +index fc98f31..18f5196 100644 +--- a/src/AV/Input/GLInjectInput.cpp ++++ b/src/AV/Input/GLInjectInput.cpp +@@ -113,7 +113,7 @@ bool ExecuteDetached(const char* command, const char* working_directory) { + + // try to execute command + do { +- res = execl("/bin/sh", "/bin/sh", "-c", command, (char*) NULL); ++ res = execl("@sh@", "@sh@", "-c", command, (char*) NULL); + } while(res == -1 and errno == EINTR); + + // failed, send feedback +@@ -207,7 +207,7 @@ void GLInjectInput::SetCapturing(bool capturing) { + bool GLInjectInput::LaunchApplication(const QString& channel, bool relax_permissions, const QString& command, const QString& working_directory) { + + // prepare command +- QString full_command = "LD_PRELOAD=\"libssr-glinject.so\" "; ++ QString full_command = "LD_PRELOAD=\"@out@/lib/libssr-glinject.so\" "; + full_command += "SSR_CHANNEL=\"" + ShellEscape(channel) + "\" "; + if(relax_permissions) + full_command += "SSR_STREAM_RELAX_PERMISSIONS=1 "; diff --git a/nixpkgs/pkgs/applications/video/smplayer/default.nix b/nixpkgs/pkgs/applications/video/smplayer/default.nix new file mode 100644 index 000000000000..513468cb16cf --- /dev/null +++ b/nixpkgs/pkgs/applications/video/smplayer/default.nix @@ -0,0 +1,62 @@ +{ lib +, stdenv +, fetchFromGitHub +, qmake +, qtscript +, wrapQtAppsHook +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "smplayer"; + version = "23.12.0"; + + src = fetchFromGitHub { + owner = "smplayer-dev"; + repo = "smplayer"; + rev = "v${finalAttrs.version}"; + hash = "sha256-ip4y9GF2u1yl1Ts8T9XcFg9wdXVTYXfDrrPuHLz6oSs="; + }; + + nativeBuildInputs = [ + qmake + wrapQtAppsHook + ]; + + buildInputs = [ + qtscript + ]; + + dontUseQmakeConfigure = true; + + makeFlags = [ + "PREFIX=${placeholder "out"}" + ]; + + meta = { + homepage = "https://www.smplayer.info"; + description = "A complete front-end for MPlayer"; + longDescription = '' + SMPlayer is a free media player for Windows and Linux with built-in codecs + that can play virtually all video and audio formats. It doesn't need any + external codecs. Just install SMPlayer and you'll be able to play all + formats without the hassle to find and install codec packs. + + One of the most interesting features of SMPlayer: it remembers the + settings of all files you play. So you start to watch a movie but you have + to leave... don't worry, when you open that movie again it will be resumed + at the same point you left it, and with the same settings: audio track, + subtitles, volume... + + SMPlayer is a graphical user interface (GUI) for the award-winning + MPlayer, which is capable of playing almost all known video and audio + formats. But apart from providing access for the most common and useful + options of MPlayer, SMPlayer adds other interesting features like the + possibility to play Youtube videos or download subtitles. + ''; + changelog = "https://github.com/smplayer-dev/smplayer/releases/tag/v${finalAttrs.version}"; + license = lib.licenses.gpl3Plus; + maintainers = with lib.maintainers; [ AndersonTorres ]; + platforms = lib.platforms.linux; + }; +}) +# TODO [ AndersonTorres ]: create a wrapper including mplayer/mpv diff --git a/nixpkgs/pkgs/applications/video/smtube/default.nix b/nixpkgs/pkgs/applications/video/smtube/default.nix new file mode 100644 index 000000000000..0f50dc3311df --- /dev/null +++ b/nixpkgs/pkgs/applications/video/smtube/default.nix @@ -0,0 +1,28 @@ +{ lib, mkDerivation, fetchurl, qmake, qtscript, qtwebkit }: + +mkDerivation rec { + version = "21.10.0"; + pname = "smtube"; + + src = fetchurl { + url = "mirror://sourceforge/smtube/SMTube/${version}/${pname}-${version}.tar.bz2"; + sha256 = "sha256-ZQIUAi/YC+zsYHVhlprZ5K6NGvT6LojmdQ1Z+WCg1lU="; + }; + + makeFlags = [ + "PREFIX=$(out)" + ]; + + dontUseQmakeConfigure = true; + + nativeBuildInputs = [ qmake ]; + buildInputs = [ qtscript qtwebkit ]; + + meta = with lib; { + description = "Play and download Youtube videos"; + homepage = "http://smplayer.sourceforge.net/smtube.php"; + license = licenses.gpl2Plus; + maintainers = with maintainers; [ vbgl ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/srt-live-server/add-ctime-include.patch b/nixpkgs/pkgs/applications/video/srt-live-server/add-ctime-include.patch new file mode 100644 index 000000000000..2e1931ab1222 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/srt-live-server/add-ctime-include.patch @@ -0,0 +1,11 @@ +diff --git a/slscore/common.hpp b/slscore/common.hpp +index 30aeeea..bed0e62 100644 +--- a/slscore/common.hpp ++++ b/slscore/common.hpp +@@ -29,6 +29,7 @@ + #include <stddef.h> + #include <stdint.h> + #include <string> ++#include <ctime> + #include <vector> + #include <unistd.h> diff --git a/nixpkgs/pkgs/applications/video/srt-live-server/default.nix b/nixpkgs/pkgs/applications/video/srt-live-server/default.nix new file mode 100644 index 000000000000..8bc3cd330b65 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/srt-live-server/default.nix @@ -0,0 +1,40 @@ +{ lib +, fetchFromGitHub +, stdenv +, srt +, zlib +}: + +stdenv.mkDerivation rec { + pname = "srt-live-server"; + version = "1.4.8"; + + src = fetchFromGitHub { + owner = "Edward-Wu"; + repo = "srt-live-server"; + rev = "V${version}"; + sha256 = "0x48sxpgxznb1ymx8shw437pcgk76ka5rx0zhn9b3cyi9jlq1yld"; + }; + + patches = [ + # https://github.com/Edward-Wu/srt-live-server/pull/94 + ./fix-insecure-printfs.patch + + # https://github.com/Edward-Wu/srt-live-server/pull/127 # adds `#include <ctime>` + ./add-ctime-include.patch + ]; + + buildInputs = [ srt zlib ]; + + makeFlags = [ + "PREFIX=$(out)" + ]; + + meta = with lib; { + description = "srt live server for low latency"; + license = licenses.mit; + homepage = "https://github.com/Edward-Wu/srt-live-server"; + maintainers = with maintainers; [ shamilton ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/srt-live-server/fix-insecure-printfs.patch b/nixpkgs/pkgs/applications/video/srt-live-server/fix-insecure-printfs.patch new file mode 100644 index 000000000000..8cc85549d13e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/srt-live-server/fix-insecure-printfs.patch @@ -0,0 +1,61 @@ +diff --color -ur a/Makefile b/Makefile +--- a/Makefile 2021-04-16 13:02:41.416453040 +0200 ++++ b/Makefile 2021-04-16 13:21:23.020089623 +0200 +@@ -1,3 +1,4 @@ ++PREFIX = /usr/local + SHELL = /bin/sh + MAIN_NAME=sls + CLIENT_NAME=slc +@@ -64,3 +65,16 @@ + rm -f $(OUTPUT_PATH)/*.o + rm -rf $(BIN_PATH)/* + ++install: all ++ @echo installing executable files to ${DESTDIR}${PREFIX}/bin ++ @mkdir -p "${DESTDIR}${PREFIX}/bin" ++ @cp -f ${BIN_PATH}/${MAIN_NAME} "${DESTDIR}${PREFIX}/bin" ++ @chmod 755 "${DESTDIR}${PREFIX}/bin/${MAIN_NAME}" ++ @cp -f ${BIN_PATH}/${CLIENT_NAME} "${DESTDIR}${PREFIX}/bin" ++ @chmod 755 "${DESTDIR}${PREFIX}/bin/${CLIENT_NAME}" ++ ++uninstall: ++ @echo removing executable files from ${DESTDIR}${PREFIX}/bin ++ @rm -f "${DESTDIR}${PREFIX}/bin/${MAIN_NAME}" ++ @rm -f "${DESTDIR}${PREFIX}/bin/${CLIENT_NAME}" ++ +diff --color -ur a/slscore/HttpClient.cpp b/slscore/HttpClient.cpp +--- a/slscore/HttpClient.cpp 2021-04-16 13:02:41.416453040 +0200 ++++ b/slscore/HttpClient.cpp 2021-04-16 13:11:40.343866698 +0200 +@@ -90,7 +90,7 @@ + goto FUNC_END; + } + if (NULL != method && strlen(method) > 0) { +- sprintf(m_http_method, method); ++ strcpy(m_http_method, method); + } + + m_interval = interval; +diff --color -ur a/slscore/SLSLog.cpp b/slscore/SLSLog.cpp +--- a/slscore/SLSLog.cpp 2021-04-16 13:02:41.416453040 +0200 ++++ b/slscore/SLSLog.cpp 2021-04-16 13:08:16.836119519 +0200 +@@ -85,7 +85,7 @@ + vsnprintf (buf , 4095 , fmt , vl); + //sprintf(buf_info, "%s %s: %s\n" , cur_time, LOG_LEVEL_NAME[level], buf); + sprintf(buf_info, "%s:%03d %s %s: %s\n" , cur_time, cur_time_msec, APP_NAME, LOG_LEVEL_NAME[level], buf); +- printf(buf_info); ++ puts(buf_info); + + if (m_log_file) { + fwrite(buf_info, strlen(buf_info), 1, m_log_file); +diff --color -ur a/slscore/SLSSrt.cpp b/slscore/SLSSrt.cpp +--- a/slscore/SLSSrt.cpp 2021-04-16 13:02:41.417452995 +0200 ++++ b/slscore/SLSSrt.cpp 2021-04-16 13:10:11.004957820 +0200 +@@ -124,7 +124,7 @@ + std::map<int, std::string>::iterator it; + for(it=map_error.begin(); it!=map_error.end(); ++it) { + sprintf(szBuf, "%d: %s\n", it->first, it->second.c_str()); +- printf(szBuf); ++ puts(szBuf); + } + printf("----------end------------\n"); + map_error.clear(); diff --git a/nixpkgs/pkgs/applications/video/srtrelay/default.nix b/nixpkgs/pkgs/applications/video/srtrelay/default.nix new file mode 100644 index 000000000000..8640424be1e9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/srtrelay/default.nix @@ -0,0 +1,26 @@ +{ lib, buildGoModule, fetchFromGitHub, srt, ffmpeg }: + +buildGoModule rec { + pname = "srtrelay"; + version = "1.1.0"; + + src = fetchFromGitHub { + owner = "voc"; + repo = "srtrelay"; + rev = "v${version}"; + sha256 = "sha256-CA+UuFOWjZjSBDWM62rda3IKO1fwC3X52mP4tg1uoO4="; + }; + + vendorHash = "sha256-xTYlfdijSo99ei+ZMX6N9gl+yw0DrPQ2wOhn6SS9S/E="; + + buildInputs = [ srt ]; + nativeCheckInputs = [ ffmpeg ]; + + meta = with lib; { + description = "Streaming-Relay for the SRT-protocol"; + homepage = "https://github.com/voc/srtrelay"; + license = licenses.mit; + maintainers = with maintainers; [ fpletz ]; + mainProgram = "srtrelay"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/streamlink-twitch-gui/bin.nix b/nixpkgs/pkgs/applications/video/streamlink-twitch-gui/bin.nix new file mode 100644 index 000000000000..ac74ed748f41 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/streamlink-twitch-gui/bin.nix @@ -0,0 +1,128 @@ +{ autoPatchelfHook +, fetchurl +, lib +, makeDesktopItem +, makeWrapper +, stdenv +, wrapGAppsHook +, at-spi2-core +, atk +, alsa-lib +, cairo +, cups +, dbus +, expat +, gcc-unwrapped +, gdk-pixbuf +, glib +, pango +, gtk3-x11 +, libudev0-shim +, libuuid +, mesa +, nss +, nspr +, xorg +, streamlink +}: +let + basename = "streamlink-twitch-gui"; + runtimeLibs = lib.makeLibraryPath [ gtk3-x11 libudev0-shim ]; + runtimeBins = lib.makeBinPath [ streamlink ]; + +in +stdenv.mkDerivation rec { + pname = "${basename}-bin"; + version = "2.4.1"; + + src = { + x86_64-linux = fetchurl { + url = "https://github.com/streamlink/${basename}/releases/download/v${version}/${basename}-v${version}-linux64.tar.gz"; + hash = "sha256-uzD61Q1XIthAwoJHb0H4sTdYkUj0qGeGs1h0XFeV03E="; + }; + i686-linux = fetchurl { + url = "https://github.com/streamlink/${basename}/releases/download/v${version}/${basename}-v${version}-linux32.tar.gz"; + hash = "sha256-akJEd94PmH9YeBud+l5+5QpbnzXAD0jDBKJM4h/t2EA="; + }; + }.${stdenv.hostPlatform.system} or (throw "Unsupported system: ${stdenv.hostPlatform.system}"); + + nativeBuildInputs = with xorg; [ + at-spi2-core + atk + alsa-lib + autoPatchelfHook + cairo + cups.lib + dbus.lib + expat + gcc-unwrapped + gdk-pixbuf + glib + pango + gtk3-x11 + mesa + nss + nspr + libuuid + libX11 + libxcb + libXcomposite + libXcursor + libXdamage + libXext + libXfixes + libXi + libXrandr + libXrender + libXScrnSaver + libXtst + makeWrapper + wrapGAppsHook + ]; + + buildInputs = [ streamlink ]; + + dontBuild = true; + dontConfigure = true; + + installPhase = '' + runHook preInstall + mkdir -p $out/{bin,opt/${basename},share} + + # Install all files, remove unnecessary ones + cp -a . $out/opt/${basename}/ + rm -r $out/opt/${basename}/{{add,remove}-menuitem.sh,credits.html,icons/} + ln -s "$out/opt/${basename}/${basename}" $out/bin/ + cp -r "${desktopItem}/share/applications" $out/share/ + runHook postInstall + ''; + + preFixup = '' + gappsWrapperArgs+=( + --add-flags "--no-version-check" \ + --prefix LD_LIBRARY_PATH : ${runtimeLibs} \ + --prefix PATH : ${runtimeBins} + ) + ''; + + desktopItem = makeDesktopItem { + name = basename; + exec = basename; + icon = basename; + desktopName = "Streamlink Twitch GUI"; + genericName = meta.description; + categories = [ "AudioVideo" "Network" ]; + }; + + meta = with lib; { + description = "Twitch.tv browser for Streamlink"; + longDescription = "Browse Twitch.tv and watch streams in your videoplayer of choice"; + homepage = "https://streamlink.github.io/streamlink-twitch-gui/"; + downloadPage = "https://github.com/streamlink/streamlink-twitch-gui/releases"; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + license = licenses.mit; + mainProgram = "streamlink-twitch-gui"; + maintainers = with maintainers; [ rileyinman ]; + platforms = [ "x86_64-linux" "i686-linux" ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/streamlink/default.nix b/nixpkgs/pkgs/applications/video/streamlink/default.nix new file mode 100644 index 000000000000..63e94fa600c6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/streamlink/default.nix @@ -0,0 +1,58 @@ +{ lib +, python3Packages +, fetchPypi +, ffmpeg +}: + +python3Packages.buildPythonApplication rec { + pname = "streamlink"; + version = "6.6.2"; + format = "pyproject"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-0UF8fFmG3BQ7xxHIqZ97iEsQ0lg/RLHD2t6n3wp15NU="; + }; + + nativeCheckInputs = with python3Packages; [ + pytestCheckHook + mock + requests-mock + freezegun + pytest-asyncio + pytest-trio + ]; + + propagatedBuildInputs = (with python3Packages; [ + certifi + isodate + lxml + pycountry + pycryptodome + pysocks + requests + trio + trio-websocket + typing-extensions + urllib3 + websocket-client + ]) ++ [ + ffmpeg + ]; + + meta = with lib; { + changelog = "https://github.com/streamlink/streamlink/raw/${version}/CHANGELOG.md"; + description = "CLI for extracting streams from various websites to video player of your choosing"; + homepage = "https://streamlink.github.io/"; + longDescription = '' + Streamlink is a CLI utility that pipes videos from online + streaming services to a variety of video players such as VLC, or + alternatively, a browser. + + Streamlink is a fork of the livestreamer project. + ''; + license = licenses.bsd2; + mainProgram = "streamlink"; + maintainers = with maintainers; [ dezgeg zraexy DeeUnderscore ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/stremio/default.nix b/nixpkgs/pkgs/applications/video/stremio/default.nix new file mode 100644 index 000000000000..03ccb4b9f066 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/stremio/default.nix @@ -0,0 +1,46 @@ +{ lib, stdenv, fetchurl, fetchFromGitHub, qmake, wrapQtAppsHook +, mpv, qtwebengine, qtwebchannel, nodejs +}: + +stdenv.mkDerivation rec { + pname = "stremio-shell"; + version = "4.4.165"; + + src = fetchFromGitHub { + owner = "Stremio"; + repo = pname; + rev = "v${version}"; + fetchSubmodules = true; + sha256 = "sha256-Gky0/HaGm11PeV4twoQV71T99NG2o0mYzQxu/c9x5oE="; + }; + + server = fetchurl { + url = "https://s3-eu-west-1.amazonaws.com/stremio-artifacts/four/v${version}/server.js"; + sha256 = "sha256-52Pg0PrV15arGqhD3rXYCl1J6kcoL+/BHRvgiQBO/OA="; + }; + + buildInputs = [ qtwebengine mpv ]; + + nativeBuildInputs = [ qmake wrapQtAppsHook ]; + + postInstall = '' + mkdir -p $out/{bin,share/applications} + ln -s $out/opt/stremio/stremio $out/bin/stremio + mv $out/opt/stremio/smartcode-stremio.desktop $out/share/applications + install -Dm 644 images/stremio_window.png $out/share/pixmaps/smartcode-stremio.png + ln -s ${nodejs}/bin/node $out/opt/stremio/node + ln -s $server $out/opt/stremio/server.js + ''; + + meta = with lib; { + mainProgram = "stremio"; + description = "A modern media center that gives you the freedom to watch everything you want."; + homepage = "https://www.stremio.com/"; + # (Server-side) web UI is closed source now, apparently they work on open-sourcing it. + # server.js appears to be MIT-licensed, but I can't find how they actually build it. + # https://www.reddit.com/r/StremioAddons/comments/n2ob04/a_summary_of_how_stremio_works_internally_and/ + license = with licenses; [ gpl3 mit ]; + maintainers = with maintainers; [ abbradar ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/sub-batch/default.nix b/nixpkgs/pkgs/applications/video/sub-batch/default.nix new file mode 100644 index 000000000000..bc0d6bd3a6cb --- /dev/null +++ b/nixpkgs/pkgs/applications/video/sub-batch/default.nix @@ -0,0 +1,36 @@ +{ stdenv +, lib +, fetchFromGitHub +, rustPlatform +, makeWrapper +, alass +}: + +rustPlatform.buildRustPackage rec { + pname = "sub-batch"; + version = "1.0.1"; + + src = fetchFromGitHub { + owner = "kl"; + repo = pname; + rev = "v${version}"; + sha256 = "sha256-TOcK+l65iKON1kgBE4DYV/BXACnvqPCshavnVdpnGH4="; + }; + + cargoSha256 = "sha256-tOY3aLpU08Tg/IT+usS2DNO0Q1aD0bvURmNJmHcJkgI="; + + nativeBuildInputs = [ makeWrapper ]; + + postInstall = '' + wrapProgram "$out/bin/sub-batch" --prefix PATH : "${lib.makeBinPath [ alass ]}" + ''; + + meta = with lib; { + description = "Match and rename subtitle files to video files and perform other batch operations on subtitle files"; + homepage = "https://github.com/kl/sub-batch"; + license = licenses.mit; + maintainers = with maintainers; [ erictapen ]; + broken = stdenv.isDarwin; + mainProgram = "sub-batch"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/subdl/default.nix b/nixpkgs/pkgs/applications/video/subdl/default.nix new file mode 100644 index 000000000000..773d1f1ad423 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/subdl/default.nix @@ -0,0 +1,28 @@ +{ lib, stdenv, fetchFromGitHub, python3 }: + +stdenv.mkDerivation { + pname = "subdl"; + version = "unstable-2017-11.06"; + + src = fetchFromGitHub { + owner = "alexanderwink"; + repo = "subdl"; + rev = "4cf5789b11f0ff3f863b704b336190bf968cd471"; + sha256 = "0kmk5ck1j49q4ww0lvas2767kwnzhkq0vdwkmjypdx5zkxz73fn8"; + }; + + buildInputs = [ python3 ]; + + installPhase = '' + install -vD subdl $out/bin/subdl + ''; + + meta = { + homepage = "https://github.com/alexanderwink/subdl"; + description = "A command-line tool to download subtitles from opensubtitles.org"; + platforms = lib.platforms.all; + license = lib.licenses.gpl3; + maintainers = [ lib.maintainers.exfalso ]; + mainProgram = "subdl"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/subtitleedit/default.nix b/nixpkgs/pkgs/applications/video/subtitleedit/default.nix new file mode 100644 index 000000000000..e08ac36db3f0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/subtitleedit/default.nix @@ -0,0 +1,97 @@ +{ lib +, stdenv +, fetchzip +, makeDesktopItem +, nix-update-script + +, copyDesktopItems +, icoutils +, makeWrapper + +, ffmpeg +, gtk2 +, hunspell +, mono +, mpv +, tesseract4 +}: + +stdenv.mkDerivation rec { + pname = "subtitleedit"; + version = "4.0.2"; + + src = fetchzip { + url = "https://github.com/SubtitleEdit/subtitleedit/releases/download/${version}/SE${lib.replaceStrings [ "." ] [ "" ] version}.zip"; + hash = "sha256-kcs2h6HeWniJhGDNsy+EBauXbiDIlLCOJkVOCIzLBzM="; + stripRoot = false; + }; + + nativeBuildInputs = [ + copyDesktopItems + icoutils + makeWrapper + ]; + + runtimeLibs = lib.makeLibraryPath [ + gtk2 + hunspell + mpv + tesseract4 + ]; + + runtimeBins = lib.makeBinPath [ + ffmpeg + hunspell + tesseract4 + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + mkdir -p $out/share/icons/hicolor/{16x16,32x32,48x48,256x256}/apps + + cp -r * $out/bin/ + ln -s ${hunspell.out}/lib/libhunspell*.so $out/bin/libhunspell.so + makeWrapper "${mono}/bin/mono" $out/bin/subtitleedit \ + --add-flags "$out/bin/SubtitleEdit.exe" \ + --prefix LD_LIBRARY_PATH : ${runtimeLibs} \ + --prefix PATH : ${runtimeBins} + + wrestool -x -t 14 SubtitleEdit.exe > subtitleedit.ico + icotool -x -i 3 -o $out/share/icons/hicolor/16x16/apps/subtitleedit.png subtitleedit.ico + icotool -x -i 6 -o $out/share/icons/hicolor/32x32/apps/subtitleedit.png subtitleedit.ico + icotool -x -i 9 -o $out/share/icons/hicolor/48x48/apps/subtitleedit.png subtitleedit.ico + icotool -x -i 10 -o $out/share/icons/hicolor/256x256/apps/subtitleedit.png subtitleedit.ico + + runHook postInstall + ''; + + desktopItems = [ + (makeDesktopItem { + name = pname; + desktopName = "Subtitle Edit"; + exec = "subtitleedit"; + icon = "subtitleedit"; + comment = meta.description; + categories = [ "Video" ]; + }) + ]; + + passthru.updateScript = nix-update-script { }; + + meta = with lib; { + description = "A subtitle editor"; + longDescription = '' + With Subtitle Edit you can easily adjust a subtitle if it is out of sync with + the video in several different ways. You can also use it for making + new subtitles from scratch (using the time-line /waveform/spectrogram) + or for translating subtitles. + ''; + homepage = "https://nikse.dk/subtitleedit"; + license = licenses.gpl3Plus; + platforms = platforms.all; + sourceProvenance = with sourceTypes; [ binaryNativeCode ]; + maintainers = with maintainers; [ ]; + }; +} diff --git a/nixpkgs/pkgs/applications/video/subtitleeditor/default.nix b/nixpkgs/pkgs/applications/video/subtitleeditor/default.nix new file mode 100644 index 000000000000..fd8e03963dca --- /dev/null +++ b/nixpkgs/pkgs/applications/video/subtitleeditor/default.nix @@ -0,0 +1,64 @@ +{ lib, stdenv, fetchFromGitHub, autoreconfHook, pkg-config, intltool, file, + desktop-file-utils, enchant, gtk3, gtkmm3, gst_all_1, hicolor-icon-theme, + libsigcxx, libxmlxx, xdg-utils, isocodes, wrapGAppsHook +}: + +stdenv.mkDerivation rec { + pname = "subtitleeditor"; + version = "unstable-2019-11-30"; + + src = fetchFromGitHub { + owner = "kitone"; + repo = "subtitleeditor"; + rev = "4c215f4cff4483c44361a2f1d45efc4c6670787f"; + sha256 = "sha256-1Q1nd3GJ6iDGQv4SM2S1ehVW6kPdbqTn8KTtTb0obiQ="; + }; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + intltool + file + wrapGAppsHook + ]; + + buildInputs = [ + desktop-file-utils + enchant + gtk3 + gtkmm3 + gst_all_1.gstreamer + gst_all_1.gstreamermm + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-ugly + gst_all_1.gst-libav + hicolor-icon-theme + libsigcxx + libxmlxx + xdg-utils + isocodes + ]; + + enableParallelBuilding = true; + + preConfigure = "substituteInPlace ./configure --replace /usr/bin/file ${file}/bin/file"; + + configureFlags = [ "--disable-debug" ]; + + meta = { + description = "GTK 3 application to edit video subtitles"; + longDescription = '' + Subtitle Editor is a GTK 3 tool to edit subtitles for GNU/Linux/*BSD. It + can be used for new subtitles or as a tool to transform, edit, correct + and refine existing subtitle. This program also shows sound waves, which + makes it easier to synchronise subtitles to voices. + ''; + homepage = "http://kitone.github.io/subtitleeditor/"; + license = lib.licenses.gpl3Plus; + platforms = lib.platforms.linux; + maintainers = [ lib.maintainers.plcplc ]; + mainProgram = "subtitleeditor"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/tanidvr/default.nix b/nixpkgs/pkgs/applications/video/tanidvr/default.nix new file mode 100644 index 000000000000..74987e004080 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/tanidvr/default.nix @@ -0,0 +1,19 @@ +{ lib, stdenv, fetchurl }: + +stdenv.mkDerivation rec { + pname = "tanidvr"; + version = "1.4.1"; + + src = fetchurl { + url = "mirror://sourceforge/tanidvr/TaniDVR/${pname}-${version}/${pname}-${version}.tar.bz2"; + sha256 = "0irwwf6mb72n3y4xcrl3s081nbnldvdlc6ypjqxa4p32c1d0g6ql"; + }; + + meta = { + description = "CLI tool for managing and capturing video from DVRs which use the DVR-IP protocol"; + homepage = "https://tanidvr.sourceforge.net/"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ pho ]; + platforms = lib.platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/tartube/default.nix b/nixpkgs/pkgs/applications/video/tartube/default.nix new file mode 100644 index 000000000000..180315e5072f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/tartube/default.nix @@ -0,0 +1,79 @@ +{ lib +, fetchFromGitHub +, gdk-pixbuf +, gobject-introspection +, gtk3 +, libnotify +, pango +, python3Packages +, wrapGAppsHook +, youtube-dl +, glib +, ffmpeg +, aria +}: + +python3Packages.buildPythonApplication rec { + pname = "tartube"; + version = "2.5.0"; + + src = fetchFromGitHub { + owner = "axcore"; + repo = "tartube"; + rev = "refs/tags/v${version}"; + sha256 = "sha256-IcJDh8Q9K6SROZWVi98R1N2kSdgwJczScLdJFKy2FIU="; + }; + + nativeBuildInputs = [ + gobject-introspection + wrapGAppsHook + ]; + + strictDeps = false; + + propagatedBuildInputs = with python3Packages; [ + moviepy + pygobject3 + pyxdg + requests + feedparser + playsound + ffmpeg + matplotlib + aria + ]; + + buildInputs = [ + gdk-pixbuf + gtk3 + glib + libnotify + pango + ]; + + postPatch = '' + sed -i "/^\s*'pgi',$/d" setup.py + ''; + + postInstall = '' + mkdir -p $out/share/{man/man1,applications,pixmaps} + cp pack/tartube.1 $out/share/man/man1 + cp pack/tartube.desktop $out/share/applications + cp pack/tartube.{png,xpm} $out/share/pixmaps + ''; + + doCheck = false; + + makeWrapperArgs = [ + "--prefix PATH : ${lib.makeBinPath [ youtube-dl ]}" + ]; + + meta = with lib; { + description = "A GUI front-end for youtube-dl"; + license = licenses.gpl3; + platforms = platforms.linux; + maintainers = with maintainers; [ mkg20001 luc65r ]; + homepage = "https://tartube.sourceforge.io/"; + mainProgram = "tartube"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/timelens/default.nix b/nixpkgs/pkgs/applications/video/timelens/default.nix new file mode 100644 index 000000000000..bd38a4c2f76a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/timelens/default.nix @@ -0,0 +1,46 @@ +{ lib +, rustPlatform +, fetchFromGitHub +, pkg-config +, glib +, gst_all_1 +, wrapGAppsHook +}: + +rustPlatform.buildRustPackage rec { + pname = "timelens"; + version = "0.1.1"; + + src = fetchFromGitHub { + owner = "timelens"; + repo = "timelens"; + rev = version; + hash = "sha256-cGFM1QOuavGwGBccUEttSTp+aD+d31Cqul+AQYvbyhY="; + }; + + cargoHash = "sha256-rVE2foebSEk3zJQTAkmhoIOFyMArGnt9tLlOS7RjQYM="; + + nativeBuildInputs = [ + pkg-config + wrapGAppsHook + ]; + + buildInputs = [ + glib + gst_all_1.gstreamer + gst_all_1.gst-libav + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-ugly + ]; + + meta = { + description = "A open source project for creating visual timelines"; + homepage = "https://timelens.blinry.org"; + changelog = "https://github.com/timelens/timelens/blob/${src.rev}/CHANGELOG.md"; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ janik ]; + mainProgram = "timelens"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/tivodecode/default.nix b/nixpkgs/pkgs/applications/video/tivodecode/default.nix new file mode 100644 index 000000000000..c21a0611262d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/tivodecode/default.nix @@ -0,0 +1,23 @@ +{ lib, stdenv, fetchurl }: + +let + version = "0.2pre4"; + +in + +stdenv.mkDerivation { + pname = "tivodecode"; + inherit version; + + src = fetchurl { + url = "mirror://sourceforge/tivodecode/tivodecode/${version}/tivodecode-${version}.tar.gz"; + sha256 = "1pww5r2iygscqn20a1cz9xbfh18p84a6a5ifg4h5nvyn9b63k23q"; + }; + + meta = with lib; { + description = "Converts a .TiVo file (produced by TiVoToGo) to a normal MPEG file"; + homepage = "https://tivodecode.sourceforge.net"; + platforms = platforms.unix; + license = licenses.bsd3; + }; +} diff --git a/nixpkgs/pkgs/applications/video/ustreamer/default.nix b/nixpkgs/pkgs/applications/video/ustreamer/default.nix new file mode 100644 index 000000000000..88baeafe1871 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/ustreamer/default.nix @@ -0,0 +1,34 @@ +{ lib, stdenv, fetchFromGitHub, libbsd, libevent, libjpeg }: + +stdenv.mkDerivation rec { + pname = "ustreamer"; + version = "5.48"; + + src = fetchFromGitHub { + owner = "pikvm"; + repo = "ustreamer"; + rev = "v${version}"; + hash = "sha256-R1HL8tYFDtHrxArcoJwlM0Y7MbSyNxNiZ2tjyh1OCn4="; + }; + + buildInputs = [ libbsd libevent libjpeg ]; + + makeFlags = [ "PREFIX=${placeholder "out"}" ]; + + enableParallelBuilding = true; + + meta = with lib; { + homepage = "https://github.com/pikvm/ustreamer"; + description = "Lightweight and fast MJPG-HTTP streamer"; + longDescription = '' + µStreamer is a lightweight and very quick server to stream MJPG video from + any V4L2 device to the net. All new browsers have native support of this + video format, as well as most video players such as mplayer, VLC etc. + µStreamer is a part of the Pi-KVM project designed to stream VGA and HDMI + screencast hardware data with the highest resolution and FPS possible. + ''; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ tfc ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/uvccapture/default.nix b/nixpkgs/pkgs/applications/video/uvccapture/default.nix new file mode 100644 index 000000000000..96e42b1a7f95 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/uvccapture/default.nix @@ -0,0 +1,52 @@ +{ lib, stdenv, fetchurl, libjpeg }: + +let + debianPatches = fetchurl { + url = "mirror://debian/pool/main/u/uvccapture/uvccapture_0.5-3.debian.tar.gz"; + sha256 = "0m29by13nw1r8sch366qzdxg5rsd1k766kqg1nj2pdb8f7pwjh9r"; + }; + +in + +stdenv.mkDerivation rec { + pname = "uvccapture"; + version = "0.5"; + + src = fetchurl { + url = "mirror://debian/pool/main/u/uvccapture/uvccapture_${version}.orig.tar.gz"; + sha256 = "1b3akkcmr3brbf93akr8xi20w8zqf2g0qfq928500wy04qi6jqpi"; + }; + + buildInputs = [ libjpeg ]; + + patchPhase = '' + tar xvf "${debianPatches}" + for fname in debian/patches/fix_videodev_include_FTBFS.patch \ + debian/patches/warnings.patch \ + debian/patches/numbuffers.patch + do + echo "Applying patch $fname" + patch < "$fname" + done + ''; + + makeFlagsArray = [ "PREFIX=$(out)/bin/" ]; + + preInstall = '' + mkdir -p "$out/bin" + ''; + + # Upstream has no man page, install one from Debian + postInstall = '' + mkdir -p "$out/share/man/man1" + cp -v debian/uvccapture.1 "$out/share/man/man1/" + ''; + + meta = with lib; { + description = "Capture image from USB webcam at a specified interval"; + license = licenses.gpl2Plus; + platforms = platforms.linux; + maintainers = [ maintainers.bjornfor ]; + mainProgram = "uvccapture"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vcs/default.nix b/nixpkgs/pkgs/applications/video/vcs/default.nix new file mode 100644 index 000000000000..e21e3a98f1f7 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vcs/default.nix @@ -0,0 +1,43 @@ +{ lib, stdenv, fetchurl, makeWrapper +, coreutils, ffmpeg, gawk, gnugrep, gnused, imagemagick, mplayer +, util-linux, getopt +, dejavu_fonts +}: +with lib; +let + version = "1.13.4"; + gopt = if stdenv.isLinux then util-linux else getopt; + runtimeDeps = [ + coreutils ffmpeg gawk gnugrep gnused imagemagick mplayer gopt + ]; +in +stdenv.mkDerivation { + pname = "vcs"; + inherit version; + src = fetchurl { + url = "http://p.outlyer.net/files/vcs/vcs-${version}.bash"; + sha256 = "0nhwcpffp3skz24kdfg4445i6j37ks6a0qsbpfd3dbi4vnpa60a0"; + }; + + unpackCmd = "mkdir src; cp $curSrc src/vcs"; + patches = [ ./fonts.patch ]; + nativeBuildInputs = [ makeWrapper ]; + + inherit dejavu_fonts; + installPhase = '' + mkdir -p $out/bin + mv vcs $out/bin/vcs + substituteAllInPlace $out/bin/vcs + chmod +x $out/bin/vcs + wrapProgram $out/bin/vcs --argv0 vcs --set PATH "${makeBinPath runtimeDeps}" + ''; + + meta = { + description = "Generates contact sheets from video files"; + homepage = "http://p.outlyer.net/vcs"; + license = licenses.cc-by-nc-sa-30; + maintainers = with maintainers; [ elitak ]; + platforms = with platforms; unix; + mainProgram = "vcs"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vcs/fonts.patch b/nixpkgs/pkgs/applications/video/vcs/fonts.patch new file mode 100644 index 000000000000..3df0359f8b26 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vcs/fonts.patch @@ -0,0 +1,23 @@ +--- a/vcs 2020-04-04 14:37:53.531095977 -0700 ++++ b/vcs 2020-04-04 14:40:46.459407878 -0700 +@@ -3669,18 +3669,8 @@ + [[ ( -z $USR_FONT_TITLE ) && ( $FONT_TITLE != 'DejaVu-Sans-Book' ) ]] && return + [[ ( -z $USR_FONT_TSTAMPS ) && ( $FONT_TSTAMPS != 'DejaVu-Sans-Book' ) ]] && return + [[ ( -z $USR_FONT_SIGN ) && ( $FONT_SIGN != 'DejaVu-Sans-Book' ) ]] && return +- # Try to locate DejaVu Sans +- local dvs='' +- if [[ -d /usr/local/share/fonts ]]; then +- dvs=$(find /usr/local/share/fonts/ -type f -iname 'dejavusans.ttf') +- fi +- if [[ ( -z $dvs ) && ( -d /usr/share/fonts ) ]]; then +- dvs=$(find /usr/share/fonts/ -type f -iname 'dejavusans.ttf') +- fi +- if [[ -z $dvs ]]; then +- warn "Unable to locate DejaVu Sans font. Falling back to helvetica." +- dvs=helvetica +- fi ++ # Use DejaVu Sans, by default ++ local dvs='@dejavu_fonts@/share/fonts/truetype/DejaVuSans.ttf' + [[ -z $USR_FONT_HEADING ]] && FONT_HEADING="$dvs" + [[ -z $USR_FONT_TITLE ]] && FONT_TITLE="$dvs" + [[ -z $USR_FONT_TSTAMPS ]] && FONT_TSTAMPS="$dvs" diff --git a/nixpkgs/pkgs/applications/video/vdr/default.nix b/nixpkgs/pkgs/applications/video/vdr/default.nix new file mode 100644 index 000000000000..c5159fdd61f0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/default.nix @@ -0,0 +1,56 @@ +{ stdenv, fetchgit, fontconfig, libjpeg, libcap, freetype, fribidi, pkg-config +, gettext, systemd, perl, lib +, enableSystemd ? true +, enableBidi ? true +}: stdenv.mkDerivation rec { + + pname = "vdr"; + version = "2.6.6"; + + src = fetchgit { + url = "git://git.tvdr.de/vdr.git"; + rev = version; + hash = "sha256-3om/Q67PHtX/aIG4zMCaJTyD9bZNEcyE5LQTeb+zB+M="; + }; + + enableParallelBuilding = true; + + postPatch = "substituteInPlace Makefile --replace libsystemd-daemon libsystemd"; + + buildInputs = [ fontconfig libjpeg libcap freetype perl ] + ++ lib.optional enableSystemd systemd + ++ lib.optional enableBidi fribidi; + + buildFlags = [ "vdr" "i18n" ] + ++ lib.optional enableSystemd "SDNOTIFY=1" + ++ lib.optional enableBidi "BIDI=1"; + + nativeBuildInputs = [ perl ]; + + # plugins uses the same build environment as vdr + propagatedNativeBuildInputs = [ pkg-config gettext ]; + + installFlags = [ + "DESTDIR=$(out)" + "PREFIX=" # needs to be empty, otherwise plugins try to install at same prefix + ]; + + installTargets = [ "install-pc" "install-bin" "install-doc" "install-i18n" + "install-includes" ]; + + postInstall = '' + mkdir -p $out/lib/vdr # only needed if vdr is started without any plugin + mkdir -p $out/share/vdr/conf + cp *.conf $out/share/vdr/conf + ''; + + outputs = [ "out" "dev" "man" ]; + + meta = with lib; { + homepage = "http://www.tvdr.de/"; + description = "Video Disc Recorder"; + maintainers = [ maintainers.ck3d ]; + platforms = platforms.linux; + license = licenses.gpl2Plus; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vdr/markad/default.nix b/nixpkgs/pkgs/applications/video/vdr/markad/default.nix new file mode 100644 index 000000000000..c0672821558b --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/markad/default.nix @@ -0,0 +1,59 @@ +{ lib +, stdenv +, vdr +, fetchFromGitHub +, graphicsmagick +, pcre +, xorgserver +, ffmpeg +, libiconv +, boost +, libgcrypt +, perl +, util-linux +, groff +, libva +, xorg +, ncurses +, callPackage +}: +stdenv.mkDerivation rec { + pname = "vdr-markad"; + version = "3.4.6"; + + src = fetchFromGitHub { + repo = "vdr-plugin-markad"; + owner = "kfb77"; + sha256 = "sha256-fixkalZAPz0iO1SmshsO0vYc2sksH2lrStsSOEcdZ1g="; + rev = "V${version}"; + }; + + buildInputs = [ vdr ffmpeg ]; + + postPatch = '' + substituteInPlace command/Makefile --replace '/usr' "" + + substituteInPlace plugin/markad.cpp \ + --replace "/usr/bin" "$out/bin" \ + --replace "/var/lib/markad" "$out/var/lib/markad" + + substituteInPlace command/markad-standalone.cpp \ + --replace "/var/lib/markad" "$out/var/lib/markad" + ''; + + buildFlags = [ + "DESTDIR=$(out)" + "VDRDIR=${vdr.dev}/lib/pkgconfig" + ]; + + installFlags = buildFlags; + + meta = with lib; { + inherit (src.meta) homepage; + description = "Plugin for VDR that marks advertisements"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + +} diff --git a/nixpkgs/pkgs/applications/video/vdr/nopacity/default.nix b/nixpkgs/pkgs/applications/video/vdr/nopacity/default.nix new file mode 100644 index 000000000000..e0173ab6c8ae --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/nopacity/default.nix @@ -0,0 +1,24 @@ +{ stdenv, lib, fetchFromGitLab, vdr, graphicsmagick }: +stdenv.mkDerivation rec { + pname = "vdr-skin-nopacity"; + version = "1.1.16"; + + src = fetchFromGitLab { + repo = "SkinNopacity"; + owner = "kamel5"; + sha256 = "sha256-5TTilBKlNsFBm5BaCoRV1LzZgpad2lOIQGyk94jGYls="; + rev = version; + }; + + buildInputs = [ vdr graphicsmagick ]; + + installFlags = [ "DESTDIR=$(out)" ]; + + meta = with lib; { + inherit (src.meta) homepage; + description = "Highly customizable native true color skin for the Video Disc Recorder"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vdr/plugins.nix b/nixpkgs/pkgs/applications/video/vdr/plugins.nix new file mode 100644 index 000000000000..92d9128543f0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/plugins.nix @@ -0,0 +1,194 @@ +{ lib, stdenv, vdr, fetchFromGitHub +, graphicsmagick, pcre +, boost, libgcrypt, perl, util-linux, groff, ncurses +, callPackage +}: let + mkPlugin = name: stdenv.mkDerivation { + name = "vdr-${name}-${vdr.version}"; + inherit (vdr) src; + buildInputs = [ vdr ]; + preConfigure = "cd PLUGINS/src/${name}"; + installFlags = [ "DESTDIR=$(out)" ]; + }; +in { + + markad = callPackage ./markad {}; + + nopacity = callPackage ./nopacity {}; + + softhddevice = callPackage ./softhddevice {}; + + streamdev = callPackage ./streamdev {}; + + xineliboutput = callPackage ./xineliboutput {}; + + skincurses = (mkPlugin "skincurses").overrideAttrs(oldAttr: { + buildInputs = oldAttr.buildInputs ++ [ ncurses ]; + }); + + inherit (lib.genAttrs [ + "epgtableid0" "hello" "osddemo" "pictures" "servicedemo" "status" "svdrpdemo" + ] mkPlugin); + + femon = stdenv.mkDerivation rec { + pname = "vdr-femon"; + version = "2.4.0"; + + buildInputs = [ vdr ]; + + src = fetchFromGitHub { + repo = "vdr-plugin-femon"; + owner = "rofafor"; + sha256 = "sha256-0qBMYgNKk7N9Bj8fAoOokUo+G9gfj16N5e7dhoKRBqs="; + rev = "v${version}"; + }; + + postPatch = "substituteInPlace Makefile --replace /bin/true true"; + + makeFlags = [ "DESTDIR=$(out)" ]; + + meta = with lib; { + inherit (src.meta) homepage; + description = "DVB Frontend Status Monitor plugin for VDR"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + + }; + + epgsearch = stdenv.mkDerivation rec { + pname = "vdr-epgsearch"; + version = "2.4.2"; + + src = fetchFromGitHub { + repo = "vdr-plugin-epgsearch"; + owner = "vdr-projects"; + sha256 = "sha256-C+WSdGTnDBTWLvpjG5GBaK8pYbht431nL5iaL/a0H4Y="; + rev = "v${version}"; + }; + + postPatch = '' + for f in *.sh; do + patchShebangs "$f" + done + ''; + + nativeBuildInputs = [ + perl # for pod2man and pos2html + util-linux + groff + ]; + + buildInputs = [ + vdr + pcre + ]; + + buildFlags = [ + "SENDMAIL=" + "REGEXLIB=pcre" + ]; + + installFlags = [ + "DESTDIR=$(out)" + ]; + + outputs = [ "out" "man" ]; + + meta = with lib; { + inherit (src.meta) homepage; + description = "Searchtimer and replacement of the VDR program menu"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + + }; + + vnsiserver = stdenv.mkDerivation rec { + pname = "vdr-vnsiserver"; + version = "1.8.3"; + + buildInputs = [ vdr ]; + + installFlags = [ "DESTDIR=$(out)" ]; + + src = fetchFromGitHub { + repo = "vdr-plugin-vnsiserver"; + owner = "vdr-projects"; + rev = version; + sha256 = "sha256-ivHdzX90ozMXSvIc5OrKC5qHeK5W3TK8zyrN8mY3IhE="; + }; + + meta = with lib; { + inherit (src.meta) homepage; + description = "VDR plugin to handle KODI clients."; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + + }; + + text2skin = stdenv.mkDerivation rec { + pname = "vdr-text2skin"; + version = "1.3.4-20170702"; + + src = fetchFromGitHub { + repo = "vdr-plugin-text2skin"; + owner = "vdr-projects"; + rev = "8f7954da2488ced734c30e7c2704b92a44e6e1ad"; + sha256 = "19hkwmaw6nwak38bv6cm2vcjjkf4w5yjyxb98qq6zfjjh5wq54aa"; + }; + + buildInputs = [ vdr graphicsmagick ]; + + buildFlags = [ + "DESTDIR=$(out)" + "IMAGELIB=graphicsmagic" + "VDRDIR=${vdr.dev}/include/vdr" + "LOCALEDIR=$(DESTDIR)/share/locale" + "LIBDIR=$(DESTDIR)/lib/vdr" + ]; + + preBuild = '' + mkdir -p $out/lib/vdr + ''; + + dontInstall = true; + + meta = with lib; { + inherit (src.meta) homepage; + description = "VDR Text2Skin Plugin"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + }; + + fritzbox = stdenv.mkDerivation rec { + pname = "vdr-fritzbox"; + version = "1.5.4"; + + src = fetchFromGitHub { + owner = "jowi24"; + repo = "vdr-fritz"; + rev = version; + sha256 = "sha256-DGD73i+ZHFgtCo+pMj5JaMovvb5vS1x20hmc5t29//o="; + fetchSubmodules = true; + }; + + buildInputs = [ vdr boost libgcrypt ]; + + installFlags = [ "DESTDIR=$(out)" ]; + + meta = with lib; { + inherit (src.meta) homepage; + description = "A plugin for VDR to access AVMs Fritz Box routers"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vdr/softhddevice/default.nix b/nixpkgs/pkgs/applications/video/vdr/softhddevice/default.nix new file mode 100644 index 000000000000..4d2504f5e5e6 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/softhddevice/default.nix @@ -0,0 +1,54 @@ +{ lib +, stdenv +, vdr +, alsa-lib +, fetchFromGitHub +, xcbutilwm +, xorgserver +, ffmpeg +, libva +, libvdpau +, xorg +, libGL +, libGLU +}: +stdenv.mkDerivation rec { + pname = "vdr-softhddevice"; + version = "2.1.1"; + + src = fetchFromGitHub { + owner = "ua0lnj"; + repo = "vdr-plugin-softhddevice"; + sha256 = "sha256-d/Cl0sE4laDdjMhd3xTHcY4OT5tWWCFCvLsNF157+zw="; + rev = "v${version}"; + }; + + buildInputs = [ + vdr + xcbutilwm + ffmpeg + alsa-lib + libva + libvdpau + xorg.libxcb + xorg.libX11 + libGL + libGLU + ]; + + makeFlags = [ "DESTDIR=$(out)" ]; + + postPatch = '' + substituteInPlace softhddev.c \ + --replace "LOCALBASE \"/bin/X\"" "\"${xorgserver}/bin/X\"" + ''; + + meta = with lib; { + inherit (src.meta) homepage; + description = "VDR SoftHDDevice Plug-in"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + +} diff --git a/nixpkgs/pkgs/applications/video/vdr/streamdev/default.nix b/nixpkgs/pkgs/applications/video/vdr/streamdev/default.nix new file mode 100644 index 000000000000..de45b31d8690 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/streamdev/default.nix @@ -0,0 +1,39 @@ +{ stdenv +, fetchFromGitHub +, lib +, vdr +}: +stdenv.mkDerivation rec { + pname = "vdr-streamdev"; + version = "0.6.3"; + + src = fetchFromGitHub { + owner = "vdr-projects"; + repo = "vdr-plugin-streamdev"; + rev = version; + sha256 = "sha256-12sASyFAnSuP2xQzr1KL/Am52ez6hiOUH/0zFH2bxhc="; + }; + + # configure don't accept argument --prefix + dontAddPrefix = true; + + makeFlags = [ + "DESTDIR=$(out)" + "LIBDIR=/lib/vdr" + "LOCDIR=/share/locale" + ]; + + enableParallelBuilding = true; + + buildInputs = [ + vdr + ]; + + meta = with lib;{ + inherit (src.meta) homepage; + description = "This PlugIn is a VDR implementation of the VTP (Video Transfer Protocol) Version 0.0.3 (see file PROTOCOL) and a basic HTTP Streaming Protocol."; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vdr/wrapper.nix b/nixpkgs/pkgs/applications/video/vdr/wrapper.nix new file mode 100644 index 000000000000..431d2dae4f04 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/wrapper.nix @@ -0,0 +1,30 @@ +{ symlinkJoin, lib, makeWrapper, vdr +, plugins ? [] +}: let + + makeXinePluginPath = l: lib.concatStringsSep ":" (map (p: "${p}/lib/xine/plugins") l); + + requiredXinePlugins = lib.flatten (map (p: p.passthru.requiredXinePlugins or []) plugins); + +in symlinkJoin { + + name = "vdr-with-plugins-${lib.getVersion vdr}"; + + paths = [ vdr ] ++ plugins; + + nativeBuildInputs = [ makeWrapper ]; + + postBuild = '' + wrapProgram $out/bin/vdr \ + --add-flags "-L $out/lib/vdr --localedir=$out/share/locale" \ + --prefix XINE_PLUGIN_PATH ":" ${lib.escapeShellArg (makeXinePluginPath requiredXinePlugins)} + ''; + + meta = with vdr.meta; { + inherit license homepage; + description = description + + " (with plugins: " + + lib.concatStringsSep ", " (map (x: ""+x.name) plugins) + + ")"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vdr/xineliboutput/default.nix b/nixpkgs/pkgs/applications/video/vdr/xineliboutput/default.nix new file mode 100644 index 000000000000..a01ee1481f8a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vdr/xineliboutput/default.nix @@ -0,0 +1,89 @@ +{ stdenv +, fetchurl +, lib +, vdr +, libcap +, libvdpau +, xine-lib +, libjpeg +, libextractor +, libglvnd +, libGLU +, libX11 +, libXext +, libXrender +, libXrandr +, ffmpeg +, avahi +, wayland +, makeWrapper +, dbus-glib +}: +let + makeXinePluginPath = l: lib.concatStringsSep ":" (map (p: "${p}/lib/xine/plugins") l); + + self = stdenv.mkDerivation rec { + pname = "vdr-xineliboutput"; + version = "2.3.0"; + + src = fetchurl { + url = "mirror://sourceforge/project/xineliboutput/xineliboutput/${pname}-${version}/${pname}-${version}.tgz"; + sha256 = "sha256-GnTaGaIbBufZP2npa9mAbrO1ccMf1RzhbvjrWhKBTjg="; + }; + + postPatch = '' + # pkg-config is called with opengl, which do not contain needed glx symbols + substituteInPlace configure \ + --replace "X11 opengl" "X11 gl" + ''; + + # configure don't accept argument --prefix + dontAddPrefix = true; + + postConfigure = '' + sed -i config.mak \ + -e 's,XINEPLUGINDIR=/[^/]*/[^/]*/[^/]*/,XINEPLUGINDIR=/,' + ''; + + makeFlags = [ "DESTDIR=$(out)" ]; + + postFixup = '' + for f in $out/bin/*; do + wrapProgram $f \ + --prefix XINE_PLUGIN_PATH ":" "${makeXinePluginPath [ "$out" xine-lib ]}" + done + ''; + + nativeBuildInputs = [ makeWrapper ]; + + buildInputs = [ + dbus-glib + ffmpeg + libcap + libextractor + libjpeg + libglvnd + libGLU + libvdpau + libXext + libXrandr + libXrender + libX11 + vdr + xine-lib + avahi + wayland + ]; + + passthru.requiredXinePlugins = [ xine-lib self ]; + + meta = with lib;{ + homepage = "https://sourceforge.net/projects/xineliboutput/"; + description = "Xine-lib based software output device for VDR"; + maintainers = [ maintainers.ck3d ]; + license = licenses.gpl2; + inherit (vdr.meta) platforms; + }; + }; +in +self diff --git a/nixpkgs/pkgs/applications/video/video-trimmer/default.nix b/nixpkgs/pkgs/applications/video/video-trimmer/default.nix new file mode 100644 index 000000000000..3ff12dbffcce --- /dev/null +++ b/nixpkgs/pkgs/applications/video/video-trimmer/default.nix @@ -0,0 +1,78 @@ +{ stdenv +, lib +, fetchFromGitLab +, rustPlatform +, cargo +, pkg-config +, meson +, rustc +, wrapGAppsHook4 +, desktop-file-utils +, blueprint-compiler +, ninja +, gtk4 +, libadwaita +, gst_all_1 +, ffmpeg-headless +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "video-trimmer"; + version = "0.8.1"; + + src = fetchFromGitLab { + domain = "gitlab.gnome.org"; + owner = "YaLTeR"; + repo = "video-trimmer"; + rev = "v${finalAttrs.version}"; + hash = "sha256-nr0PAvp4wlswQBNN2LLyYQMpk3IIleHf3+978XhUGGQ="; + }; + + cargoDeps = rustPlatform.fetchCargoTarball { + inherit (finalAttrs) src; + name = "${finalAttrs.pname}-${finalAttrs.version}"; + hash = "sha256-YFbLMpQbHUtxRrBVarcoIeDsvc26NWc1YhMeCaLgJAc="; + }; + + nativeBuildInputs = [ + pkg-config + meson + wrapGAppsHook4 + desktop-file-utils + blueprint-compiler + ninja + # Present here in addition to buildInputs, because meson runs + # `gtk4-update-icon-cache` during installPhase, thanks to: + # https://gitlab.gnome.org/YaLTeR/video-trimmer/-/merge_requests/12 + gtk4 + rustPlatform.cargoSetupHook + cargo + rustc + ]; + + buildInputs = [ + gtk4 + libadwaita + gst_all_1.gstreamer + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good # for scaletempo and webm + gst_all_1.gst-plugins-bad + ]; + + doCheck = true; + + preFixup = '' + gappsWrapperArgs+=( + --prefix PATH : "${lib.makeBinPath [ ffmpeg-headless ]}" + ) + ''; + + meta = with lib; { + homepage = "https://gitlab.gnome.org/YaLTeR/video-trimmer"; + description = "Trim videos quickly"; + maintainers = with maintainers; [ doronbehar ]; + license = licenses.gpl3Plus; + platforms = platforms.linux; + mainProgram = "video-trimmer"; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/vivictpp/default.nix b/nixpkgs/pkgs/applications/video/vivictpp/default.nix new file mode 100644 index 000000000000..e2fc34340fc5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vivictpp/default.nix @@ -0,0 +1,74 @@ +{ lib, stdenv, fetchFromGitHub +, meson, cmake, ninja, pkg-config +, python3, git +, SDL2, SDL2_ttf +, freetype, harfbuzz +, ffmpeg +, cacert }: + +let + version = "1.0.0"; + withSubprojects = stdenv.mkDerivation { + name = "sources-with-subprojects"; + + src = fetchFromGitHub { + owner = "vivictorg"; + repo = "vivictpp"; + rev = "v${version}"; + hash = "sha256-dCtMjemEjXe63ELAfQhzJl3GecqWLcjL2y5Htn6hYgU="; + }; + + nativeBuildInputs = [ + meson + cacert + git + ]; + + buildCommand = '' + cp -r --no-preserve=mode $src $out + cd $out + + meson subprojects download + find subprojects -type d -name .git -prune -execdir rm -r {} + + ''; + + outputHashMode = "recursive"; + outputHash = "sha256-a7NBQJt5T+KwP8Djc8TQiVLNZF8UcXlXrv2G/dZ54aM="; + }; +in stdenv.mkDerivation rec { + pname = "vivictpp"; + inherit version; + + src = withSubprojects; + + nativeBuildInputs = [ + meson + cmake + ninja + pkg-config + + python3 + git + ]; + + buildInputs = [ + SDL2 + SDL2_ttf + freetype + harfbuzz + ffmpeg + ]; + + preConfigure = '' + patchShebangs . + ''; + + meta = with lib; { + description = "An easy to use tool for subjective comparison of the visual quality of different encodings of the same video source"; + homepage = "https://github.com/vivictorg/vivictpp"; + license = licenses.gpl2Plus; + platforms = platforms.unix; + maintainers = with maintainers; [ tilpner ]; + mainProgram = "vivictpp"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vokoscreen-ng/default.nix b/nixpkgs/pkgs/applications/video/vokoscreen-ng/default.nix new file mode 100644 index 000000000000..d105849dba35 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vokoscreen-ng/default.nix @@ -0,0 +1,68 @@ +{ fetchFromGitHub +, gst_all_1 +, gst-plugins-bad +, gst-plugins-base +, gst-plugins-good +, gst-plugins-ugly +, gstreamer +, lib +, libX11 +, pipewire +, pkg-config +, pulseaudio +, qt6 +, stdenv +, wayland +}: + +stdenv.mkDerivation rec { + pname = "vokoscreen-ng"; + version = "4.0.0"; + + src = fetchFromGitHub { + owner = "vkohaupt"; + repo = "vokoscreenNG"; + rev = version; + hash = "sha256-Y6+R18Gf3ShqhsmZ4Okx02fSOOyilS6iKU5FW9wpxvY="; + }; + + qmakeFlags = [ "src/vokoscreenNG.pro" ]; + + nativeBuildInputs = [ qt6.qttools pkg-config qt6.qmake qt6.wrapQtAppsHook ]; + buildInputs = [ + gst_all_1.gstreamer + libX11 + pulseaudio + qt6.qtbase + qt6.qtmultimedia + wayland + pipewire + gst_all_1.gst-plugins-base + gst_all_1.gst-plugins-good + gst_all_1.gst-plugins-bad + gst_all_1.gst-plugins-ugly + ]; + + postPatch = '' + substituteInPlace src/vokoscreenNG.pro \ + --replace lrelease-qt5 lrelease + ''; + + postInstall = '' + mkdir -p $out/bin $out/share/applications $out/share/icons + cp ./vokoscreenNG $out/bin/ + cp ./src/applications/vokoscreenNG.desktop $out/share/applications/ + cp ./src/applications/vokoscreenNG.png $out/share/icons/ + qtWrapperArgs+=(--prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "$GST_PLUGIN_SYSTEM_PATH_1_0") + wrapQtApp $out/bin/vokoscreenNG + ''; + + meta = with lib; { + description = "User friendly Open Source screencaster for Linux and Windows"; + license = licenses.gpl2Plus; + homepage = "https://github.com/vkohaupt/vokoscreenNG"; + maintainers = with maintainers; [ shamilton dietmarw ]; + platforms = platforms.linux; + mainProgram = "vokoscreenNG"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vokoscreen/default.nix b/nixpkgs/pkgs/applications/video/vokoscreen/default.nix new file mode 100644 index 000000000000..cb0df69ee2c5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vokoscreen/default.nix @@ -0,0 +1,58 @@ +{ lib, fetchFromGitHub, mkDerivation +, pkg-config, qtbase, qttools, qmake, qtmultimedia, qtx11extras, alsa-lib, libv4l, libXrandr +, ffmpeg +}: + +mkDerivation rec { + + pname = "vokoscreen"; + version = "2.5.8-beta"; + + src = fetchFromGitHub { + owner = "vkohaupt"; + repo = "vokoscreen"; + rev = version; + sha256 = "1a85vbsi53mhzva49smqwcs61c51wv3ic410nvb9is9nlsbifwan"; + }; + + nativeBuildInputs = [ pkg-config qmake ]; + buildInputs = [ + alsa-lib + libv4l + qtbase + qtmultimedia + qttools + qtx11extras + libXrandr + ]; + + patches = [ + ./ffmpeg-out-of-box.patch + ]; + + # Workaround build failure on -fno-common toolchains: + # ld: alsa_device.o:(.bss+0x8): multiple definition of `rc'; QvkAlsaDevice.o:(.bss+0x8): first defined here + env.NIX_CFLAGS_COMPILE = "-fcommon"; + + preConfigure = '' + sed -i 's/lrelease-qt5/lrelease/g' vokoscreen.pro + ''; + + postConfigure = '' + substituteInPlace settings/QvkSettings.cpp --subst-var-by ffmpeg ${ffmpeg} + ''; + + meta = with lib; { + description = "Simple GUI screencast recorder, using ffmpeg"; + homepage = "https://linuxecke.volkoh.de/vokoscreen/vokoscreen.html"; + longDescription = '' + vokoscreen is an easy to use screencast creator to record + educational videos, live recordings of browser, installation, + videoconferences, etc. + ''; + license = licenses.gpl2Plus; + maintainers = [ maintainers.league ]; + platforms = platforms.linux; + mainProgram = "vokoscreen"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/vokoscreen/ffmpeg-out-of-box.patch b/nixpkgs/pkgs/applications/video/vokoscreen/ffmpeg-out-of-box.patch new file mode 100644 index 000000000000..afcee3f9715f --- /dev/null +++ b/nixpkgs/pkgs/applications/video/vokoscreen/ffmpeg-out-of-box.patch @@ -0,0 +1,24 @@ +diff --git a/settings/QvkSettings.cpp b/settings/QvkSettings.cpp +index 3008e62..07485bd 100644 +--- a/settings/QvkSettings.cpp ++++ b/settings/QvkSettings.cpp +@@ -66,17 +66,8 @@ void QvkSettings::readAll() + Minimized = settings.value( "Minimized", 0 ).toUInt(); + MinimizedByStart = settings.value( "MinimizedByStart", 0 ).toUInt(); + Countdown = settings.value( "Countdown", 0 ).toUInt(); +- QFile file; +- if ( file.exists( qApp->applicationDirPath().append( "/bin/ffmpeg" ) ) == true ) +- { +- vokoscreenWithLibs = true; +- Recorder = qApp->applicationDirPath().append( "/bin/ffmpeg" ); +- } +- else +- { +- vokoscreenWithLibs = false; +- Recorder = settings.value( "Recorder", "ffmpeg" ).toString(); +- } ++ vokoscreenWithLibs = true; ++ Recorder = settings.value( "Recorder", "@ffmpeg@/bin/ffmpeg" ).toString(); + settings.endGroup(); + + settings.beginGroup( "Videooptions" ); diff --git a/nixpkgs/pkgs/applications/video/w_scan/default.nix b/nixpkgs/pkgs/applications/video/w_scan/default.nix new file mode 100644 index 000000000000..4dedf71d39bf --- /dev/null +++ b/nixpkgs/pkgs/applications/video/w_scan/default.nix @@ -0,0 +1,25 @@ +{ lib, stdenv, fetchurl }: + +stdenv.mkDerivation rec { + pname = "w_scan"; + version = "20170107"; + + src = fetchurl { + url = "http://wirbel.htpc-forum.de/w_scan/${pname}-${version}.tar.bz2"; + sha256 = "1zkgnj2sfvckix360wwk1v5s43g69snm45m0drnzyv7hgf5g7q1q"; + }; + + # Workaround build failure on -fno-common toolchains: + # ld: char-coding.o:/build/w_scan-20170107/si_types.h:117: multiple definition of + # `service_t'; countries.o:/build/w_scan-20170107/si_types.h:117: first defined here + env.NIX_CFLAGS_COMPILE = "-fcommon"; + + meta = { + description = "Small CLI utility to scan DVB and ATSC transmissions"; + homepage = "http://wirbel.htpc-forum.de/w_scan/index_en.html"; + platforms = lib.platforms.linux; + maintainers = [ lib.maintainers.nico202 ] ; + license = lib.licenses.gpl2; + mainProgram = "w_scan"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/w_scan2/default.nix b/nixpkgs/pkgs/applications/video/w_scan2/default.nix new file mode 100644 index 000000000000..d4d21a26025d --- /dev/null +++ b/nixpkgs/pkgs/applications/video/w_scan2/default.nix @@ -0,0 +1,26 @@ +{ + lib, + stdenv, + fetchFromGitHub, +}: + +stdenv.mkDerivation rec { + pname = "w_scan2"; + version = "1.0.15"; + + src = fetchFromGitHub { + owner = "stefantalpalaru"; + repo = "w_scan2"; + rev = version; + hash = "sha256-ToD02W9H9HqddhpZsQm2Uzy/cVtv4KnfYmpCl2KEGSY="; + }; + + meta = { + description = "A small channel scan tool which generates ATSC, DVB-C, DVB-S/S2 and DVB-T/T2 channels.conf files"; + homepage = "https://github.com/stefantalpalaru/w_scan2"; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ _0x4A6F ] ; + license = lib.licenses.gpl2Only; + mainProgram = "w_scan2"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/webcamoid/default.nix b/nixpkgs/pkgs/applications/video/webcamoid/default.nix new file mode 100644 index 000000000000..799e68bf072e --- /dev/null +++ b/nixpkgs/pkgs/applications/video/webcamoid/default.nix @@ -0,0 +1,36 @@ +{ lib, fetchFromGitHub, pkg-config, libxcb, mkDerivation, cmake +, qtbase, qtdeclarative, qtquickcontrols, qtquickcontrols2 +, ffmpeg_4, gst_all_1, libpulseaudio, alsa-lib, jack2 +, v4l-utils }: +mkDerivation rec { + pname = "webcamoid"; + version = "9.1.1"; + + src = fetchFromGitHub { + sha256 = "sha256-E2hHFrksJtdDLWiX7wL1z9LBbBKT04a853V8u+WiwbA="; + rev = version; + repo = "webcamoid"; + owner = "webcamoid"; + }; + + buildInputs = [ + libxcb + qtbase qtdeclarative qtquickcontrols qtquickcontrols2 + ffmpeg_4 + gst_all_1.gstreamer gst_all_1.gst-plugins-base + alsa-lib libpulseaudio jack2 + v4l-utils + ]; + + nativeBuildInputs = [ pkg-config cmake ]; + + meta = with lib; { + description = "Webcam Capture Software"; + longDescription = "Webcamoid is a full featured and multiplatform webcam suite."; + homepage = "https://github.com/webcamoid/webcamoid/"; + license = [ licenses.gpl3Plus ]; + platforms = platforms.linux; + maintainers = with maintainers; [ robaca ]; + mainProgram = "webcamoid"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/webtorrent_desktop/default.nix b/nixpkgs/pkgs/applications/video/webtorrent_desktop/default.nix new file mode 100644 index 000000000000..75a8d9f5c639 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/webtorrent_desktop/default.nix @@ -0,0 +1,63 @@ +{ lib, stdenv, electron, buildNpmPackage, fetchFromGitHub, fetchpatch }: + +buildNpmPackage { + pname = "webtorrent-desktop"; + version = "0.25-pre-1eb612"; + src = fetchFromGitHub { + owner = "webtorrent"; + repo = "webtorrent-desktop"; + rev = "1eb61201d6360698a2cc4ea72bf0fa7ee78b457c"; + sha256 = "sha256-DBEFOamncyidMXypvKNnUmDIPUq1LzYjDgox7fa4+Gg="; + }; + patches = [ + # electron 27 fix + (fetchpatch { + url = "https://github.com/webtorrent/webtorrent-desktop/pull/2388.patch"; + hash = "sha256-gam5oAZtsaiCNFwecA5ff0nhraySLx3SOHlb/js+cPM="; + }) + # startup fix + (fetchpatch { + url = "https://github.com/webtorrent/webtorrent-desktop/pull/2389.patch"; + hash = "sha256-hBJGLNNjcGRhYOFlLm/RL0po+70tEeJtR6Y/CfacPAI="; + }) + ]; + npmDepsHash = "sha256-tqhp3jDb1xtyV/n9kJtzkiznLQfqeYWeZiTnTVV0ibE="; + makeCacheWritable = true; + npmRebuildFlags = [ "--ignore-scripts" ]; + installPhase = '' + ## Rebuild node_modules for production + ## after babel compile has finished + rm -r node_modules + export NODE_ENV=production + npm ci --ignore-scripts + + ## delete unused files + rm -r test + + ## delete config for build time cache + npm config delete cache + + ## add script wrapper and desktop files; icons + mkdir -p $out/lib $out/bin $out/share/applications + cp -r . $out/lib/webtorrent-desktop + cat > $out/bin/WebTorrent <<EOF + #! ${stdenv.shell} + set -eu + exec ${electron}/bin/electron --no-sandbox $out/lib/webtorrent-desktop "\$@" + EOF + chmod +x $out/bin/WebTorrent + cp -r static/linux/share/icons $out/share/ + sed "s#/opt/webtorrent-desktop#$out/bin#" \ + < static/linux/share/applications/webtorrent-desktop.desktop \ + > $out/share/applications/webtorrent-desktop.desktop + ''; + + meta = with lib; { + description = "Streaming torrent app for Mac, Windows, and Linux"; + homepage = "https://webtorrent.io/desktop"; + license = licenses.mit; + maintainers = [ maintainers.bendlas ]; + mainProgram = "WebTorrent"; + }; + +} diff --git a/nixpkgs/pkgs/applications/video/wf-recorder/default.nix b/nixpkgs/pkgs/applications/video/wf-recorder/default.nix new file mode 100644 index 000000000000..56a85517eb0a --- /dev/null +++ b/nixpkgs/pkgs/applications/video/wf-recorder/default.nix @@ -0,0 +1,32 @@ +{ lib, stdenv, fetchFromGitHub +, meson, ninja, pkg-config, scdoc, wayland-scanner +, wayland, wayland-protocols, ffmpeg, x264, libpulseaudio +, mesa # for libgbm +}: + +stdenv.mkDerivation rec { + pname = "wf-recorder"; + version = "0.4.1"; + + src = fetchFromGitHub { + owner = "ammen99"; + repo = pname; + rev = "v${version}"; + hash = "sha256-SXPXvKXn236oO1WakkMNql3lj2flYYlmArVHGomH0/k="; + }; + + nativeBuildInputs = [ meson ninja pkg-config wayland-scanner scdoc ]; + buildInputs = [ + wayland wayland-protocols ffmpeg x264 libpulseaudio mesa + ]; + + meta = with lib; { + description = "Utility program for screen recording of wlroots-based compositors"; + inherit (src.meta) homepage; + changelog = "https://github.com/ammen99/wf-recorder/releases/tag/v${version}"; + license = licenses.mit; + maintainers = with maintainers; [ yuka ]; + platforms = platforms.linux; + mainProgram = "wf-recorder"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/xawtv/0001-Fix-build-for-glibc-2.32.patch b/nixpkgs/pkgs/applications/video/xawtv/0001-Fix-build-for-glibc-2.32.patch new file mode 100644 index 000000000000..227559f1f91c --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xawtv/0001-Fix-build-for-glibc-2.32.patch @@ -0,0 +1,63 @@ +From 009c426ab37ef7f8d9d8e30f45096225203d694a Mon Sep 17 00:00:00 2001 +From: Maximilian Bosch <maximilian@mbosch.me> +Date: Tue, 11 Aug 2020 11:27:21 +0200 +Subject: [PATCH] Fix build for glibc-2.32 + +The `sys_siglist`-array has been removed. Instead, `strsignal` should be +used. +--- + console/fbtools.c | 2 +- + console/record.c | 2 +- + x11/rootv.c | 4 ++-- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/console/fbtools.c b/console/fbtools.c +index 9f876df..07739ff 100644 +--- a/console/fbtools.c ++++ b/console/fbtools.c +@@ -520,6 +520,6 @@ fb_catch_exit_signals(void) + + /* cleanup */ + fb_cleanup(); +- fprintf(stderr,"Oops: %s\n",sys_siglist[termsig]); ++ fprintf(stderr,"Oops: %s\n",strsignal(termsig)); + exit(42); + } +diff --git a/console/record.c b/console/record.c +index 685221b..90f0c85 100644 +--- a/console/record.c ++++ b/console/record.c +@@ -429,7 +429,7 @@ ctrlc(int signal) + { + if (verbose) + fprintf(stderr,"\n%s - exiting\n", +- sys_siglist[signal]); ++ strsignal(signal)); + stop = 1; + } + +diff --git a/x11/rootv.c b/x11/rootv.c +index 60a8406..4bf458b 100644 +--- a/x11/rootv.c ++++ b/x11/rootv.c +@@ -133,7 +133,7 @@ catch_sig(int signal) + termsig = signal; + if (verbose) + fprintf(stderr,"received signal %d [%s]\n", +- termsig,sys_siglist[termsig]); ++ termsig,strsignal(termsig)); + } + + static void usage(FILE *fp) +@@ -422,7 +422,7 @@ main(int argc, char *argv[]) + } + if (verbose && termsig) + fprintf(stderr,"exiting on signal %d [%s]\n", +- termsig,sys_siglist[termsig]); ++ termsig,strsignal(termsig)); + if (do_mute && have_mute) + XvSetPortAttribute(dpy,port,XV_MUTE,1); + XvStopVideo(dpy,port,win); +-- +2.25.4 + diff --git a/nixpkgs/pkgs/applications/video/xawtv/default.nix b/nixpkgs/pkgs/applications/video/xawtv/default.nix new file mode 100644 index 000000000000..d52feb8a66b0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xawtv/default.nix @@ -0,0 +1,66 @@ +{ lib +, stdenv +, fetchurl +, ncurses +, libjpeg +, libX11 +, libXt +, alsa-lib +, aalib +, libXft +, xorgproto +, libv4l +, libFS +, libXaw +, libXpm +, libXext +, libSM +, libICE +, perl +}: + +stdenv.mkDerivation rec { + pname = "xawtv"; + version = "3.107"; + + src = fetchurl { + url = "https://linuxtv.org/downloads/xawtv/xawtv-${version}.tar.bz2"; + sha256 = "055p0wia0xsj073l8mg4ifa6m81dmv6p45qyh99brramq5iylfy5"; + }; + + patches = [ + ./0001-Fix-build-for-glibc-2.32.patch + ]; + + buildInputs = [ + ncurses + libjpeg + libX11 + libXt + libXft + xorgproto + libFS + perl + alsa-lib + aalib + libXaw + libXpm + libXext + libSM + libICE + libv4l + ]; + + makeFlags = [ + "SUID_ROOT=" # do not try to setuid + "resdir=${placeholder "out"}/share/X11" + ]; + + meta = { + description = "TV application for Linux with apps and tools such as a teletext browser"; + license = lib.licenses.gpl2; + homepage = "https://www.kraxel.org/blog/linux/xawtv/"; + maintainers = with lib.maintainers; [ domenkozar ]; + platforms = lib.platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/xine/lib.nix b/nixpkgs/pkgs/applications/video/xine/lib.nix new file mode 100644 index 000000000000..ec3a64208267 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xine/lib.nix @@ -0,0 +1,92 @@ +{ lib +, stdenv +, fetchurl +, aalib +, alsa-lib +, autoreconfHook +, ffmpeg +, flac +, libGL +, libGLU +, libX11 +, libXext +, libXinerama +, libXv +, libcaca +, libcdio +, libmng +, libmpcdec +, libpulseaudio +, libtheora +, libv4l +, libvorbis +, libxcb +, ncurses +, perl +, pkg-config +, speex +, vcdimager +, zlib +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "xine-lib"; + version = "1.2.13"; + + src = fetchurl { + url = "mirror://sourceforge/xine/xine-lib-${finalAttrs.version}.tar.xz"; + hash = "sha256-XxDW1xikpRwX7RsysDHU+bgLBh6CdlNbK+MeWsS3Xm8="; + }; + + outputs = [ "out" "dev" "man" ]; + + nativeBuildInputs = [ + autoreconfHook + perl + pkg-config + ]; + + buildInputs = [ + aalib + alsa-lib + ffmpeg + flac + libGL + libGLU + libX11 + libXext + libXinerama + libXv + libcaca + libcdio + libmng + libmpcdec + libpulseaudio + libtheora + libv4l + libvorbis + libxcb + ncurses + perl + speex + vcdimager + zlib + libX11 + libXext + libXinerama + libXv + libxcb + ]; + + enableParallelBuilding = true; + + env.NIX_LDFLAGS = "-lxcb-shm"; + + meta = { + homepage = "https://xine.sourceforge.net/"; + description = "A high-performance, portable and reusable multimedia playback engine"; + license = with lib.licenses; [ gpl2Plus lgpl2Plus ]; + maintainers = with lib.maintainers; [ AndersonTorres ]; + platforms = lib.platforms.linux; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/xine/ui.nix b/nixpkgs/pkgs/applications/video/xine/ui.nix new file mode 100644 index 000000000000..2437705ceac9 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xine/ui.nix @@ -0,0 +1,79 @@ +{ lib +, stdenv +, fetchurl +, fetchpatch +, autoreconfHook +, curl +, libXext +, libXft +, libXi +, libXinerama +, libXtst +, libXv +, libXxf86vm +, libjpeg +, libpng +, lirc +, ncurses +, pkg-config +, readline +, shared-mime-info +, xine-lib +, xorgproto +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "xine-ui"; + version = "0.99.14"; + + src = fetchurl { + url = "mirror://sourceforge/xine/xine-ui-${finalAttrs.version}.tar.xz"; + hash = "sha256-1NSQ1c7OcOK7mEnJ5ILyz4evAwLUUbYUR2/cw2Qs2cM="; + }; + + outputs = [ "out" "dev" "lib" "man" ]; + + nativeBuildInputs = [ + autoreconfHook + pkg-config + shared-mime-info + ]; + + buildInputs = [ + curl + libXext + libXft + libXi + libXinerama + libXtst + libXv + libXxf86vm + libjpeg + libpng + lirc + ncurses + readline + xine-lib + xorgproto + ]; + + configureFlags = [ "--with-readline=${readline.dev}" ]; + + env = { + LIRC_CFLAGS="-I${lirc}/include"; + LIRC_LIBS="-L ${lirc}/lib -llirc_client"; + }; + + postInstall = '' + substituteInPlace $out/share/applications/xine.desktop \ + --replace "MimeType=;" "MimeType=" + ''; + + meta = { + homepage = "https://xine.sourceforge.net/"; + description = "Xlib-based frontend for Xine video player"; + license = lib.licenses.gpl2Plus; + maintainers = with lib.maintainers; [ AndersonTorres ]; + platforms = lib.platforms.linux; + }; +}) diff --git a/nixpkgs/pkgs/applications/video/xplayer/default.nix b/nixpkgs/pkgs/applications/video/xplayer/default.nix new file mode 100644 index 000000000000..baa8fcb95be0 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xplayer/default.nix @@ -0,0 +1,97 @@ +{ stdenv +, lib +, fetchFromGitHub +, autoreconfHook +, autoconf-archive +, clutter-gst +, clutter-gtk +, gettext +, glib +, gobject-introspection +, gst-plugins-bad +, gst-plugins-base +, gst-plugins-good +, gstreamer +, gtk-doc +, gtk3 +, intltool +, itstool +, libpeas +, libxml2 +, libxplayer-plparser +, pkg-config +, python3 +, wrapGAppsHook +, xapp +, yelp-tools }: + +stdenv.mkDerivation rec { + pname = "xplayer"; + version = "2.4.4"; + + src = fetchFromGitHub { + owner = "linuxmint"; + repo = pname; + rev = version; + sha256 = "sha256-o2vLNIELd1EYWG26t5gOpnamJrBJeg4P6fcLirkcmfM="; + }; + + # configure wants to find gst-inspect-1.0 via pkgconfig but + # the gstreamer toolsdir points to the wrong derivation output + postPatch = '' + substituteInPlace configure.ac \ + --replace '$gst10_toolsdir/gst-inspect-1.0' '${gstreamer}/bin/gst-inspect-1.0' \ + ''; + + preBuild = '' + makeFlagsArray+=( + "INCLUDES=-I${glib.dev}/include/gio-unix-2.0" + "CFLAGS=-Wno-error" # Otherwise a lot of deprecated warnings are treated as error + ) + ''; + + nativeBuildInputs = [ + autoreconfHook + wrapGAppsHook + autoconf-archive + gettext + gtk-doc + intltool + itstool + pkg-config + python3.pkgs.wrapPython + yelp-tools + gobject-introspection + ]; + + buildInputs = [ + clutter-gst + clutter-gtk + glib + gst-plugins-bad + gst-plugins-base + gst-plugins-good + gstreamer + gtk3 + libpeas + libxml2 + libxplayer-plparser + python3 + xapp + # to satisfy configure script + python3.pkgs.pygobject3 + ]; + + postFixup = '' + buildPythonPath ${python3.pkgs.dbus-python} + patchPythonScript $out/lib/xplayer/plugins/dbus/dbusservice.py + ''; + + meta = with lib; { + description = "A generic media player from Linux Mint"; + license = with licenses; [ gpl2Plus lgpl21Plus ]; + homepage = "https://github.com/linuxmint/xplayer"; + maintainers = with maintainers; [ tu-maurice bobby285271 ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/xplayer/plparser.nix b/nixpkgs/pkgs/applications/video/xplayer/plparser.nix new file mode 100644 index 000000000000..67e394968da5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xplayer/plparser.nix @@ -0,0 +1,44 @@ +{ stdenv +, lib +, fetchFromGitHub +, meson +, ninja +, gobject-introspection +, gmime3 +, libxml2 +, libsoup +, pkg-config +}: + +stdenv.mkDerivation rec { + pname = "xplayer-plparser"; + version = "1.0.3"; + + src = fetchFromGitHub { + owner = "linuxmint"; + repo = pname; + rev = version; + sha256 = "6GMKsIpyQdiyHPxrjWHAHvuCouJxrAcYPIo9u6TLOA4="; + }; + + nativeBuildInputs = [ + meson + ninja + pkg-config + gobject-introspection + ]; + + buildInputs = [ + gmime3 + libxml2 + libsoup + ]; + + meta = with lib; { + description = "Playlist parsing library for xplayer"; + homepage = "https://github.com/linuxmint/xplayer-plparser"; + maintainers = with maintainers; [ tu-maurice bobby285271 ]; + license = licenses.lgpl2Plus; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/video/xscast/default.nix b/nixpkgs/pkgs/applications/video/xscast/default.nix new file mode 100644 index 000000000000..4e7252a514f8 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/xscast/default.nix @@ -0,0 +1,36 @@ +{ lib, stdenv, fetchFromGitHub, makeWrapper, ffmpeg, imagemagick, dzen2, xorg }: + +stdenv.mkDerivation { + pname = "xscast-unstable"; + version = "2016-07-26"; + + src = fetchFromGitHub { + owner = "KeyboardFire"; + repo = "xscast"; + rev = "9e6fd3c28d3f5ae630619f6dbccaf1f6ca594b21"; + sha256 = "0br27bq9bpglfdpv63h827bipgvhlh10liyhmhcxls4227kagz72"; + }; + + nativeBuildInputs = [ makeWrapper ]; + + installPhase = '' + runHook preInstall + + install -Dm755 xscast.sh $out/bin/xscast + install -Dm644 xscast.1 $out/share/man/man1/xscast.1 + patchShebangs $out/bin + + wrapProgram "$out/bin/xscast" \ + --prefix PATH : ${lib.makeBinPath [ ffmpeg dzen2 xorg.xwininfo xorg.xinput xorg.xmodmap imagemagick ]} + + runHook postInstall + ''; + + meta = with lib; { + homepage = "https://github.com/KeyboardFire/xscast"; + license = licenses.mit; + description = "Screencasts of windows with list of keystrokes overlayed"; + maintainers = with maintainers; [ ]; + mainProgram = "xscast"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/youtube-tui/Cargo.lock b/nixpkgs/pkgs/applications/video/youtube-tui/Cargo.lock new file mode 100644 index 000000000000..7aadf62090f5 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/youtube-tui/Cargo.lock @@ -0,0 +1,1563 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_colours" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7db9d9767fde724f83933a716ee182539788f293828244e9d999695ce0f7ba1e" +dependencies = [ + "rgb", +] + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bit_field" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc827186963e592360843fb5ba4b973e145841266c1357f7180c43526f2e5b61" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" + +[[package]] +name = "bumpalo" +version = "3.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" + +[[package]] +name = "bytemuck" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cassowary" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df8670b8c7b9dae1793364eafadf7239c40d669904660c5960d74cfd80b46a53" + +[[package]] +name = "cc" +version = "1.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "winapi", +] + +[[package]] +name = "clipboard" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25a904646c0340239dcf7c51677b33928bf24fdf424b79a57909c0109075b2e7" +dependencies = [ + "clipboard-win", + "objc", + "objc-foundation", + "objc_id", + "x11-clipboard", +] + +[[package]] +name = "clipboard-win" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a093d6fed558e5fe24c3dfc85a68bb68f1c824f440d3ba5aca189e2998786b" +dependencies = [ + "winapi", +] + +[[package]] +name = "color_quant" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" + +[[package]] +name = "console" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "windows-sys 0.45.0", +] + +[[package]] +name = "core-foundation" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" + +[[package]] +name = "crc32fast" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +dependencies = [ + "cfg-if", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" +dependencies = [ + "cfg-if", + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" +dependencies = [ + "autocfg", + "cfg-if", + "crossbeam-utils", + "memoffset", + "scopeguard", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossterm" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e64e6c0fbe2c17357405f7c758c1ef960fce08bdfb2c03d88d2a18d7e09c4b67" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a84cda67535339806297f1b331d6dd6320470d2a0fe65381e79ee9e156dd3d13" +dependencies = [ + "bitflags", + "crossterm_winapi", + "libc", + "mio", + "parking_lot", + "serde", + "signal-hook", + "signal-hook-mio", + "winapi", +] + +[[package]] +name = "crossterm_winapi" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acdd7c62a3665c7f6830a51635d9ac9b23ed385797f70a83bb8bafe9c572ab2b" +dependencies = [ + "winapi", +] + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "dyn-clone" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68b0cf012f1230e43cd00ebb729c6bb58707ecfa8ad08b52ef3a4ccd2697fc30" + +[[package]] +name = "either" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "equivalent" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88bffebc5d80432c9b140ee17875ff173a8ab62faad5b257da912bd2f6c1c0a1" + +[[package]] +name = "errno" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +dependencies = [ + "errno-dragonfly", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "exr" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1e481eb11a482815d3e9d618db8c42a93207134662873809335a92327440c18" +dependencies = [ + "bit_field", + "flume", + "half", + "lebe", + "miniz_oxide", + "rayon-core", + "smallvec", + "zune-inflate", +] + +[[package]] +name = "fastrand" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" +dependencies = [ + "instant", +] + +[[package]] +name = "fdeflate" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d329bdeac514ee06249dabc27877490f17f5d371ec693360768b838e19f3ae10" +dependencies = [ + "simd-adler32", +] + +[[package]] +name = "flate2" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b9429470923de8e8cbd4d2dc513535400b4b3fef0319fb5c4e1f520a7bef743" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "futures-core", + "futures-sink", + "nanorand", + "pin-project", + "spin", +] + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" +dependencies = [ + "foreign-types-shared", +] + +[[package]] +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "futures-core" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" + +[[package]] +name = "futures-sink" +version = "0.3.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" + +[[package]] +name = "getrandom" +version = "0.2.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gif" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80792593675e051cf94a4b111980da2ba60d4a83e43e0048c5693baab3977045" +dependencies = [ + "color_quant", + "weezl", +] + +[[package]] +name = "half" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02b4af3693f1b705df946e9fe5631932443781d0aabb423b62fcd4d73f6d2fd0" +dependencies = [ + "crunchy", +] + +[[package]] +name = "hashbrown" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a" + +[[package]] +name = "hermit-abi" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b" + +[[package]] +name = "home" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "http_req" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f680177f2ebe4aabd573d07b322d15a5e0fbc97cd739fd627b08043c89041f8" +dependencies = [ + "native-tls", + "unicase", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "image" +version = "0.24.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "527909aa81e20ac3a44803521443a765550f09b5130c2c2fa1ea59c2f8f50a3a" +dependencies = [ + "bytemuck", + "byteorder", + "color_quant", + "exr", + "gif", + "jpeg-decoder", + "num-rational", + "num-traits", + "png", + "qoi", + "tiff", +] + +[[package]] +name = "indexmap" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5477fe2230a79769d8dc68e0eabf5437907c0457a5614a9e8dddb67f65eb65d" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "instant" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "invidious" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf06ca3149bc691b638f1eed94bc5ea5d7eae85ddc01c23249f0af0bd16d62e" +dependencies = [ + "http_req", + "serde", + "serde_json", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys 0.48.0", +] + +[[package]] +name = "itoa" +version = "1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a" + +[[package]] +name = "jpeg-decoder" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc0000e42512c92e31c2252315bda326620a4e034105e900c98ec492fa077b3e" +dependencies = [ + "rayon", +] + +[[package]] +name = "js-sys" +version = "0.3.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "lebe" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03087c2bad5e1034e8cace5926dec053fb3790248370865f5117a7d0213354c8" + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "libmpv" +version = "2.0.1" +source = "git+https://github.com/sudipghimire533/libmpv-rs#18aa79a6b73e309360d3dcaeb434e862f9483350" +dependencies = [ + "libmpv-sys", +] + +[[package]] +name = "libmpv-sys" +version = "3.1.0" +source = "git+https://github.com/sudipghimire533/libmpv-rs#18aa79a6b73e309360d3dcaeb434e862f9483350" + +[[package]] +name = "linux-raw-sys" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" + +[[package]] +name = "lock_api" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" + +[[package]] +name = "make-cmd" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8ca8afbe8af1785e09636acb5a41e08a765f5f0340568716c18a8700ba3c0d3" + +[[package]] +name = "malloc_buf" +version = "0.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb907fe88d54d8d9ce32a3cceab4218ed2f6b7d35617cafe9adf84e43919cb" +dependencies = [ + "libc", +] + +[[package]] +name = "memoffset" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" +dependencies = [ + "autocfg", +] + +[[package]] +name = "miniz_oxide" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7" +dependencies = [ + "adler", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "0.8.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +dependencies = [ + "libc", + "log", + "wasi", + "windows-sys 0.48.0", +] + +[[package]] +name = "nanorand" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" +dependencies = [ + "getrandom", +] + +[[package]] +name = "native-tls" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07226173c32f2926027b63cce4bcd8076c3552846cbe7925f3aaffeac0a3b92e" +dependencies = [ + "lazy_static", + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "objc" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915b1b472bc21c53464d6c8461c9d3af805ba1ef837e1cac254428f4a77177b1" +dependencies = [ + "malloc_buf", +] + +[[package]] +name = "objc-foundation" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1add1b659e36c9607c7aab864a76c7a4c2760cd0cd2e120f3fb8b952c7e22bf9" +dependencies = [ + "block", + "objc", + "objc_id", +] + +[[package]] +name = "objc_id" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c92d4ddb4bd7b50d730c215ff871754d0da6b2178849f8a2a2ab69712d0c073b" +dependencies = [ + "objc", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "openssl" +version = "0.10.55" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.90" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.1", +] + +[[package]] +name = "pin-project" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "030ad2bc4db10a8944cb0d837f158bdfec4d4a4873ab701a95046770d11f8842" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec2e072ecce94ec471b13398d5402c188e76ac03cf74dd1a975161b23a3f6d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pkg-config" +version = "0.3.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" + +[[package]] +name = "png" +version = "0.17.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59871cc5b6cce7eaccca5a802b4173377a1c2ba90654246789a8fa2334426d11" +dependencies = [ + "bitflags", + "crc32fast", + "fdeflate", + "flate2", + "miniz_oxide", +] + +[[package]] +name = "proc-macro2" +version = "1.0.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "qoi" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "quote" +version = "1.0.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ratatui" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce841e0486e7c2412c3740168ede33adeba8e154a15107b879d8162d77c7174e" +dependencies = [ + "bitflags", + "cassowary", + "crossterm 0.26.1", + "serde", + "unicode-segmentation", + "unicode-width", +] + +[[package]] +name = "rayon" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-utils", + "num_cpus", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + +[[package]] +name = "rgb" +version = "0.8.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20ec2d3e3fc7a92ced357df9cebd5a10b6fb2aa1ee797bf7e9ce2f17dffc8f59" +dependencies = [ + "bytemuck", +] + +[[package]] +name = "rustix" +version = "0.37.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys 0.48.0", +] + +[[package]] +name = "ryu" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9" + +[[package]] +name = "schannel" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +dependencies = [ + "windows-sys 0.48.0", +] + +[[package]] +name = "scopeguard" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" + +[[package]] +name = "security-framework" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7daf513456463b42aa1d94cff7e0c24d682b429f020b9afa4f5ba5c40a22b237" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.167" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b69b106b68bc8054f0e974e70d19984040f8a5cf9215ca82626ea4853f82c4b9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "452e67b9c20c37fa79df53201dc03839651086ed9bbe92b3ca585ca9fdaa7d85" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "signal-hook" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9" +dependencies = [ + "libc", + "signal-hook-registry", +] + +[[package]] +name = "signal-hook-mio" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29ad2e15f37ec9a6cc544097b78a1ec90001e9f71b81338ca39f430adaca99af" +dependencies = [ + "libc", + "mio", + "signal-hook", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1" +dependencies = [ + "libc", +] + +[[package]] +name = "simd-adler32" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "238abfbb77c1915110ad968465608b68e869e0772622c9656714e73e5a1a522f" + +[[package]] +name = "sixel-rs" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfa95c014543113a192d906e5971d0c8d1e8b4cc1e61026539687a7016644ce5" +dependencies = [ + "sixel-sys", +] + +[[package]] +name = "sixel-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb46e0cd5569bf910390844174a5a99d52dd40681fff92228d221d9f8bf87dea" +dependencies = [ + "make-cmd", +] + +[[package]] +name = "smallvec" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62bb4feee49fdd9f707ef802e22365a35de4b7b299de4763d44bfea899442ff9" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "syn" +version = "2.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6" +dependencies = [ + "autocfg", + "cfg-if", + "fastrand", + "redox_syscall", + "rustix", + "windows-sys 0.48.0", +] + +[[package]] +name = "termcolor" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "tiff" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7449334f9ff2baf290d55d73983a7d6fa15e01198faef72af07e2a8db851e471" +dependencies = [ + "flate2", + "jpeg-decoder", + "weezl", +] + +[[package]] +name = "traitobject" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efd1f82c56340fdf16f2a953d7bda4f8fdffba13d93b00844c25572110b26079" + +[[package]] +name = "tui-additions" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de5841ec45de71c46252a832bb1e3e69abf2ee2492eb309ea077c8d78e798e7" +dependencies = [ + "crossterm 0.26.1", + "dyn-clone", + "ratatui", + "typemap", + "unicode-segmentation", +] + +[[package]] +name = "typemap" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "653be63c80a3296da5551e1bfd2cca35227e13cdd08c6668903ae2f4f77aa1f6" +dependencies = [ + "unsafe-any", +] + +[[package]] +name = "unicase" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-ident" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73" + +[[package]] +name = "unicode-segmentation" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36" + +[[package]] +name = "unicode-width" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b" + +[[package]] +name = "unsafe-any" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30360d7979f5e9c6e6cea48af192ea8fab4afb3cf72597154b8f08935bc9c7f" +dependencies = [ + "traitobject", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1865806a559042e51ab5414598446a5871b561d21b6764f2eabb0dd481d880a6" + +[[package]] +name = "urlencoding" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "viuer" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b511f7e9ae27b5750f12ca50c353a1179bd4cc964a47294eb0d2cdad40cb41c0" +dependencies = [ + "ansi_colours", + "base64", + "console", + "crossterm 0.25.0", + "image", + "lazy_static", + "sixel-rs", + "tempfile", + "termcolor", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.87" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1" + +[[package]] +name = "weezl" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9193164d4de03a926d909d3bc7c30543cecb35400c02114792c2cae20d5e2dbb" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" +dependencies = [ + "windows-targets 0.48.1", +] + +[[package]] +name = "windows-sys" +version = "0.45.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +dependencies = [ + "windows-targets 0.42.2", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.1", +] + +[[package]] +name = "windows-targets" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + +[[package]] +name = "windows-targets" +version = "0.48.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f" +dependencies = [ + "windows_aarch64_gnullvm 0.48.0", + "windows_aarch64_msvc 0.48.0", + "windows_i686_gnu 0.48.0", + "windows_i686_msvc 0.48.0", + "windows_x86_64_gnu 0.48.0", + "windows_x86_64_gnullvm 0.48.0", + "windows_x86_64_msvc 0.48.0", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" + +[[package]] +name = "x11-clipboard" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89bd49c06c9eb5d98e6ba6536cf64ac9f7ee3a009b2f53996d405b3944f6bcea" +dependencies = [ + "xcb", +] + +[[package]] +name = "xcb" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e917a3f24142e9ff8be2414e36c649d47d6cc2ba81f16201cdef96e533e02de" +dependencies = [ + "libc", + "log", +] + +[[package]] +name = "youtube-tui" +version = "0.8.0" +dependencies = [ + "chrono", + "clipboard", + "crossterm 0.26.1", + "dyn-clone", + "home", + "invidious", + "libmpv", + "ratatui", + "serde", + "serde_json", + "serde_yaml", + "tui-additions", + "typemap", + "unicode-segmentation", + "urlencoding", + "viuer", +] + +[[package]] +name = "zune-inflate" +version = "0.2.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" +dependencies = [ + "simd-adler32", +] diff --git a/nixpkgs/pkgs/applications/video/youtube-tui/default.nix b/nixpkgs/pkgs/applications/video/youtube-tui/default.nix new file mode 100644 index 000000000000..bfa1039d5d33 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/youtube-tui/default.nix @@ -0,0 +1,57 @@ +{ lib +, rustPlatform +, fetchFromGitHub +, pkg-config +, openssl +, xorg +, stdenv +, python3 +, libsixel +, mpv +, CoreFoundation +, Security +, AppKit +}: + +rustPlatform.buildRustPackage rec { + pname = "youtube-tui"; + version = "0.8.0"; + + src = fetchFromGitHub { + owner = "Siriusmart"; + repo = pname; + rev = "v${version}"; + hash = "sha256-FOiK3yQcQuwdCEjBtRPW4iBd+8uNsvZ6l5tclHVzL+M="; + }; + + cargoLock = { + lockFile = ./Cargo.lock; + outputHashes = { + "libmpv-2.0.1" = "sha256-efbXk0oXkzlIqgbP4wKm7sWlVZBT2vzDSN3iwsw2vL0="; + }; + }; + + nativeBuildInputs = [ + pkg-config + python3 + ]; + + buildInputs = [ + openssl + xorg.libxcb + libsixel + mpv + ] ++ lib.optionals stdenv.isDarwin [ + CoreFoundation + Security + AppKit + ]; + + meta = with lib; { + description = "An aesthetically pleasing YouTube TUI written in Rust"; + homepage = "https://siriusmart.github.io/youtube-tui"; + license = licenses.gpl3Only; + maintainers = with maintainers; [ Ruixi-rebirth ]; + mainProgram = "youtube-tui"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/yuview/default.nix b/nixpkgs/pkgs/applications/video/yuview/default.nix new file mode 100644 index 000000000000..a6c7ad6ceb86 --- /dev/null +++ b/nixpkgs/pkgs/applications/video/yuview/default.nix @@ -0,0 +1,46 @@ +{ lib +, stdenv +, fetchFromGitHub +, qmake +, wrapQtAppsHook +}: + +stdenv.mkDerivation rec { + pname = "yuview"; + version = "2.13"; + + src = fetchFromGitHub { + owner = "IENT"; + repo = "YUView"; + rev = "v.${version}"; + sha256 = "sha256-2mNIuyY/ni+zkUc8V/iXUEa7JeBJyOnNod7friMYAm8="; + }; + + nativeBuildInputs = [ qmake wrapQtAppsHook ]; + + patches = [ ./disable_version_check.patch ]; + + enableParallelBuilding = true; + + meta = with lib; { + homepage = "https://ient.github.io/YUView"; + description = "YUV Viewer and Analysis Tool"; + longDescription = '' + YUView is a Qt based YUV player with an advanced analytic toolset for + Linux, Windows and Mac. At its core, YUView is a powerful YUV player that + can open and show almost any YUV format. With its simple interface it is + easy to navigate through sequences and inspect details and a side by side + and comparison view can help to spot differences between two sequences. A + sophisticated statistics renderer can overlay the video with supplemental + information. More features include playlists, support for visual tests and + presentations, support of compressed formats (through libde265 and + FFmpeg), support for raw RGB files as well as image files and image + sequences, and many more. Further information can be found in the YUV help + in the application itself or in our wiki. + ''; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ leixb ]; + platforms = platforms.unix; + mainProgram = "YUView"; + }; +} diff --git a/nixpkgs/pkgs/applications/video/yuview/disable_version_check.patch b/nixpkgs/pkgs/applications/video/yuview/disable_version_check.patch new file mode 100644 index 000000000000..c13cb9e9b5bd --- /dev/null +++ b/nixpkgs/pkgs/applications/video/yuview/disable_version_check.patch @@ -0,0 +1,15 @@ +diff --git a/YUViewLib/src/common/Typedef.h b/YUViewLib/src/common/Typedef.h +--- a/YUViewLib/src/common/Typedef.h ++++ b/YUViewLib/src/common/Typedef.h +@@ -212,12 +212,7 @@ private: + #define YUVIEW_VERSION "Unknown" + #endif + +-#ifndef YUVIEW_HASH + #define VERSION_CHECK 0 +-#define YUVIEW_HASH 0 +-#else +-#define VERSION_CHECK 1 +-#endif + + #define MAX_RECENT_FILES 10 |