uboot: (firmwareOdroidC2/C4) don't invoke patch tool, use patches = [] instead

https://github.com/NixOS/nixpkgs/blob/master/pkgs/stdenv/generic/setup.sh#L948
this can do it nicely.

Signed-off-by: Anton Arapov <anton@deadbeef.mx>
This commit is contained in:
Anton Arapov 2021-04-03 12:58:10 +02:00 committed by Alan Daniels
commit 56de2bcd43
30691 changed files with 3076956 additions and 0 deletions

View file

@ -0,0 +1,160 @@
{ lib
, config
, stdenv
, fetchurl
, fetchpatch
, boost
, ffmpeg
, ffms
, fftw
, fontconfig
, freetype
, icu
, intltool
, libGL
, libGLU
, libX11
, libass
, libiconv
, pkg-config
, wxGTK
, zlib
, spellcheckSupport ? true
, hunspell ? null
, automationSupport ? true
, lua ? null
, openalSupport ? false
, openal ? null
, alsaSupport ? stdenv.isLinux
, alsa-lib ? null
, pulseaudioSupport ? config.pulseaudio or stdenv.isLinux
, libpulseaudio ? null
, portaudioSupport ? false
, portaudio ? null
}:
assert spellcheckSupport -> (hunspell != null);
assert automationSupport -> (lua != null);
assert openalSupport -> (openal != null);
assert alsaSupport -> (alsa-lib != null);
assert pulseaudioSupport -> (libpulseaudio != null);
assert portaudioSupport -> (portaudio != null);
let
inherit (lib) optional;
in
stdenv.mkDerivation rec {
pname = "aegisub";
version = "3.2.2";
src = fetchurl {
url = "http://ftp.aegisub.org/pub/releases/${pname}-${version}.tar.xz";
hash = "sha256-xV4zlFuC2FE8AupueC8Ncscmrc03B+lbjAAi9hUeaIU=";
};
patches = [
# Compatibility with ICU 59
(fetchpatch {
url = "https://github.com/Aegisub/Aegisub/commit/dd67db47cb2203e7a14058e52549721f6ff16a49.patch";
sha256 = "sha256-R2rN7EiyA5cuBYIAMpa0eKZJ3QZahfnRp8R4HyejGB8=";
})
# Compatbility with Boost 1.69
(fetchpatch {
url = "https://github.com/Aegisub/Aegisub/commit/c3c446a8d6abc5127c9432387f50c5ad50012561.patch";
sha256 = "sha256-7nlfojrb84A0DT82PqzxDaJfjIlg5BvWIBIgoqasHNk=";
})
# Compatbility with make 4.3
(fetchpatch {
url = "https://github.com/Aegisub/Aegisub/commit/6bd3f4c26b8fc1f76a8b797fcee11e7611d59a39.patch";
sha256 = "sha256-rG8RJokd4V4aSYOQw2utWnrWPVrkqSV3TAvnGXNhLOk=";
})
# Compatibility with ffms2
(fetchpatch {
url = "https://github.com/Aegisub/Aegisub/commit/1aa9215e7fc360de05da9b7ec2cd68f1940af8b2.patch";
sha256 = "sha256-JsuI4hQTcT0TEqHHoSsGbuiTg4hMCH3Cxp061oLk8Go=";
})
./update-ffms2.patch
# Compatibility with X11
(fetchpatch {
url = "https://github.com/Aegisub/Aegisub/commit/7a6da26be6a830f4e1255091952cc0a1326a4520.patch";
sha256 = "sha256-/aTcIjFlZY4N9+IyHL4nwR0hUR4HTJM7ibbdKmNxq0w=";
})
];
nativeBuildInputs = [
intltool
pkg-config
];
buildInputs = [
boost
ffmpeg
ffms
fftw
fontconfig
freetype
icu
libGL
libGLU
libX11
libass
libiconv
wxGTK
zlib
]
++ optional alsaSupport alsa-lib
++ optional automationSupport lua
++ optional openalSupport openal
++ optional portaudioSupport portaudio
++ optional pulseaudioSupport libpulseaudio
++ optional spellcheckSupport hunspell
;
enableParallelBuilding = true;
hardeningDisable = [
"bindnow"
"relro"
];
postPatch = ''
sed -i 's/-Wno-c++11-narrowing/-Wno-narrowing/' configure.ac src/Makefile
'';
# compat with icu61+
# https://github.com/unicode-org/icu/blob/release-64-2/icu4c/readme.html#L554
CXXFLAGS = [ "-DU_USING_ICU_NAMESPACE=1" ];
# this is fixed upstream though not yet in an officially released version,
# should be fine remove on next release (if one ever happens)
NIX_LDFLAGS = "-lpthread";
postInstall = "ln -s $out/bin/aegisub-* $out/bin/aegisub";
meta = with lib; {
homepage = "https://github.com/Aegisub/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 = [ maintainers.AndersonTorres ];
platforms = [ "i686-linux" "x86_64-linux" ];
};
}
# TODO [ AndersonTorres ]: update to fork release

View file

@ -0,0 +1,105 @@
commit 89c4e8d34ab77c3322f097b91fd9de22cbea7a37
Author: Thomas Goyne <plorkyeran@aegisub.org>
Date: Wed Nov 21 16:41:05 2018 -0800
Update ffmpeg and ffms2
diff --git a/src/video_provider_ffmpegsource.cpp b/src/video_provider_ffmpegsource.cpp
index 8bd68fbbf..f4ed6a2f2 100644
--- a/src/video_provider_ffmpegsource.cpp
+++ b/src/video_provider_ffmpegsource.cpp
@@ -44,6 +44,23 @@
#include <libaegisub/make_unique.h>
namespace {
+typedef enum AGI_ColorSpaces {
+ AGI_CS_RGB = 0,
+ AGI_CS_BT709 = 1,
+ AGI_CS_UNSPECIFIED = 2,
+ AGI_CS_FCC = 4,
+ AGI_CS_BT470BG = 5,
+ AGI_CS_SMPTE170M = 6,
+ AGI_CS_SMPTE240M = 7,
+ AGI_CS_YCOCG = 8,
+ AGI_CS_BT2020_NCL = 9,
+ AGI_CS_BT2020_CL = 10,
+ AGI_CS_SMPTE2085 = 11,
+ AGI_CS_CHROMATICITY_DERIVED_NCL = 12,
+ AGI_CS_CHROMATICITY_DERIVED_CL = 13,
+ AGI_CS_ICTCP = 14
+} AGI_ColorSpaces;
+
/// @class FFmpegSourceVideoProvider
/// @brief Implements video loading through the FFMS library.
class FFmpegSourceVideoProvider final : public VideoProvider, FFmpegSourceProvider {
@@ -78,7 +95,7 @@ public:
if (matrix == RealColorSpace)
FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), nullptr);
else if (matrix == "TV.601")
- FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr);
+ FFMS_SetInputFormatV(VideoSource, AGI_CS_BT470BG, CR, FFMS_GetPixFmt(""), nullptr);
else
return;
ColorSpace = matrix;
@@ -103,16 +120,16 @@ std::string colormatrix_description(int cs, int cr) {
std::string str = cr == FFMS_CR_JPEG ? "PC" : "TV";
switch (cs) {
- case FFMS_CS_RGB:
+ case AGI_CS_RGB:
return "None";
- case FFMS_CS_BT709:
+ case AGI_CS_BT709:
return str + ".709";
- case FFMS_CS_FCC:
+ case AGI_CS_FCC:
return str + ".FCC";
- case FFMS_CS_BT470BG:
- case FFMS_CS_SMPTE170M:
+ case AGI_CS_BT470BG:
+ case AGI_CS_SMPTE170M:
return str + ".601";
- case FFMS_CS_SMPTE240M:
+ case AGI_CS_SMPTE240M:
return str + ".240M";
default:
throw VideoOpenError("Unknown video color space");
@@ -206,8 +223,10 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st
// set thread count
int Threads = OPT_GET("Provider/Video/FFmpegSource/Decoding Threads")->GetInt();
+#if FFMS_VERSION < ((2 << 24) | (30 << 16) | (0 << 8) | 0)
if (FFMS_GetVersion() < ((2 << 24) | (17 << 16) | (2 << 8) | 1) && FFMS_GetSourceType(Index) == FFMS_SOURCE_LAVF)
Threads = 1;
+#endif
// set seekmode
// TODO: give this its own option?
@@ -235,18 +254,22 @@ void FFmpegSourceVideoProvider::LoadVideo(agi::fs::path const& filename, std::st
else
DAR = double(Width) / Height;
- CS = TempFrame->ColorSpace;
+ int VideoCS = CS = TempFrame->ColorSpace;
CR = TempFrame->ColorRange;
- if (CS == FFMS_CS_UNSPECIFIED)
- CS = Width > 1024 || Height >= 600 ? FFMS_CS_BT709 : FFMS_CS_BT470BG;
+ if (CS == AGI_CS_UNSPECIFIED)
+ CS = Width > 1024 || Height >= 600 ? AGI_CS_BT709 : AGI_CS_BT470BG;
RealColorSpace = ColorSpace = colormatrix_description(CS, CR);
#if FFMS_VERSION >= ((2 << 24) | (17 << 16) | (1 << 8) | 0)
- if (CS != FFMS_CS_RGB && CS != FFMS_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) {
- if (FFMS_SetInputFormatV(VideoSource, FFMS_CS_BT470BG, CR, FFMS_GetPixFmt(""), &ErrInfo))
+ if (CS != AGI_CS_RGB && CS != AGI_CS_BT470BG && ColorSpace != colormatrix && (colormatrix == "TV.601" || OPT_GET("Video/Force BT.601")->GetBool())) {
+ CS = AGI_CS_BT470BG;
+ ColorSpace = colormatrix_description(AGI_CS_BT470BG, CR);
+ }
+
+ if (CS != VideoCS) {
+ if (FFMS_SetInputFormatV(VideoSource, CS, CR, FFMS_GetPixFmt(""), &ErrInfo))
throw VideoOpenError(std::string("Failed to set input format: ") + ErrInfo.Buffer);
- ColorSpace = colormatrix_description(FFMS_CS_BT470BG, CR);
}
#endif

View file

@ -0,0 +1,33 @@
{ 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 Subtitle Synchronization";
homepage = "https://github.com/kaegi/alass";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ erictapen ];
};
}

View file

@ -0,0 +1,44 @@
{ fetchFromGitHub
, makeWrapper
, stdenvNoCC
, lib
, gnugrep
, gnused
, curl
, openssl
, mpv
, aria2
}:
stdenvNoCC.mkDerivation rec {
pname = "ani-cli";
version = "2.2";
src = fetchFromGitHub {
owner = "pystardust";
repo = "ani-cli";
rev = "v${version}";
sha256 = "sha256-B/bIGrSQmKZFh3PpsbwivR2QKLMHIypWLxWuufiFHw4=";
};
nativeBuildInputs = [ makeWrapper ];
installPhase = ''
runHook preInstall
install -Dm755 ani-cli $out/bin/ani-cli
wrapProgram $out/bin/ani-cli \
--prefix PATH : ${lib.makeBinPath [ gnugrep gnused curl openssl mpv aria2 ]}
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;
};
}

View file

@ -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
}

View file

@ -0,0 +1,99 @@
{ stdenv, lib, fetchurl, 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.0";
src = fetchurl {
url = "mirror://sourceforge/avidemux/avidemux/${version}/avidemux_${version}.tar.gz";
sha256 = "sha256-0exvUnflEijs8O4cqJ+uJMWR9SD4fOlvq+yIGNBN4zs=";
};
patches = [
./dynamic_install_dir.patch
./bootstrap_logging.patch
];
nativeBuildInputs =
[ yasm cmake pkg-config ]
++ lib.optional withQT wrapQtAppsHook;
buildInputs = [
zlib gettext libvdpau libva libXv sqlite fribidi fontconfig
freetype alsa-lib libXext libGLU makeWrapper
] ++ 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;
buildCommand = let
qtVersion = "5.${lib.versions.minor qtbase.version}";
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
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH''${LD_LIBRARY_PATH:+:}${libXext}/lib"
${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"
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;
};
}

View file

@ -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)
{

View file

@ -0,0 +1,25 @@
{ mkDerivation, lib, fetchurl, pkg-config, ffmpeg, 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 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;
};
}

View file

@ -0,0 +1,88 @@
{ lib, stdenv
, fetchFromGitHub
, pkg-config
, fetchpatch
, scons
, boost172
, dvdauthor
, dvdplusrwtools
, enca
, cdrkit
, ffmpeg
, 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=e6cc6bc80c672aaa1a2260abfe8823da299a192c";
};
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=";}
]);
nativeBuildInputs = [ wrapGAppsHook scons pkg-config gettext ];
buildInputs = [
boost172
dvdauthor
dvdplusrwtools
enca
ffmpeg
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 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 ];
};
}

View file

@ -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 \

View file

@ -0,0 +1,65 @@
{ 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
'';
NIX_CFLAGS_COMPILE = builtins.concatStringsSep " " [
"-Wno-error=deprecated-declarations"
"-Wno-error=incompatible-pointer-types"
];
nativeBuildInputs = [ pkg-config ];
buildInputs = [
which
gnome.gnome-common
glib
intltool
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 = [ ];
};
}

View file

@ -0,0 +1,69 @@
{ lib
, fetchFromGitHub
, python3
}:
let
py = python3.override {
packageOverrides = self: super: {
# Upstream is pinning releases incl. dependencies of their dependencies
zeroconf = super.zeroconf.overridePythonAttrs (oldAttrs: rec {
version = "0.31.0";
src = fetchFromGitHub {
owner = "jstasiak";
repo = "python-zeroconf";
rev = version;
sha256 = "158dqay74zvnz6kmpvip4ml0kw59nf2aaajwgaamx0zc8ci1p5pj";
};
});
click = super.click.overridePythonAttrs (oldAttrs: rec {
version = "7.1.2";
src = oldAttrs.src.override {
inherit version;
sha256 = "06kbzd6sjfkqan3miwj9wqyddfxc2b6hi7p5s4dvqjb3gif2bdfj";
};
});
PyChromecast = super.PyChromecast.overridePythonAttrs (oldAttrs: rec {
version = "9.2.0";
src = oldAttrs.src.override {
inherit version;
sha256 = "02ig2wf2yyrnnl88r2n13s1naskwsifwgx3syifmcxygflsmjd3d";
};
});
};
};
in
with py.pkgs;
buildPythonApplication rec {
pname = "catt";
version = "0.12.2";
disabled = python3.pythonOlder "3.4";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-BOETKTkcbLOu5SubiejswU7D47qWS13QZ7rU9x3jf5Y=";
};
propagatedBuildInputs = [
click
ifaddr
PyChromecast
requests
youtube-dl
];
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 ];
};
}

View file

@ -0,0 +1,64 @@
{ lib
, stdenv
, fetchFromGitHub
, pkg-config
, cmake
, libiconv
, zlib
, enableOcr ? true
, makeWrapper
, tesseract4
, leptonica
, ffmpeg
}:
stdenv.mkDerivation rec {
pname = "ccextractor";
version = "0.93";
src = fetchFromGitHub {
owner = "CCExtractor";
repo = pname;
rev = "v${version}";
sha256 = "sha256-usVAKBkdd8uz9cD5eLd0hnwGonOJLscRdc+iWDlNXVc=";
};
postPatch = 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 ];
cmakeFlags = 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 ];
};
}

View file

@ -0,0 +1,69 @@
{ lib
, stdenv
, fetchFromGitHub
, appstream-glib
, desktop-file-utils
, libepoxy
, glib
, gtk4
, wayland
, meson
, mpv
, ninja
, nix-update-script
, pkg-config
, python3
, wrapGAppsHook4
}:
stdenv.mkDerivation rec {
pname = "celluloid";
version = "0.23";
src = fetchFromGitHub {
owner = "celluloid-player";
repo = "celluloid";
rev = "v${version}";
hash = "sha256-YKDud/UJJx9ko5k+Oux8mUUme0MXaRMngESE14Hhxv8=";
};
nativeBuildInputs = [
appstream-glib
desktop-file-utils
meson
ninja
pkg-config
python3
wrapGAppsHook4
];
buildInputs = [
libepoxy
glib
gtk4
wayland
mpv
];
postPatch = ''
patchShebangs meson-post-install.py src/generate-authors.py
'';
doCheck = true;
meta = with lib; {
homepage = "https://github.com/celluloid-player/celluloid";
description = "Simple GTK frontend for the mpv video player";
longDescription = ''
Celluloid (formerly GNOME MPV) is a simple GTK+ frontend for mpv.
Celluloid interacts with mpv via the client API exported by libmpv,
allowing access to mpv's powerful playback capabilities.
'';
license = licenses.gpl3Plus;
maintainers = with maintainers; [ AndersonTorres ];
platforms = platforms.linux;
};
passthru.updateScript = nix-update-script {
attrPath = pname;
};
}

View file

@ -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-2021-02-14";
src = fetchFromGitHub {
owner = "cinelerra-cv-team";
repo = "cinelerra-cv";
rev = "7d0e8ede557d0cdf3606e0a8d97166a22f88d89e";
sha256 = "0n84y2wp47y89drc48cm1609gads5c6saw6c6bqcf5c5wcg1yfbj";
};
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;
};
}

View file

@ -0,0 +1,89 @@
{ 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
, libadwaita
, appstream-glib
, libsoup
}:
stdenv.mkDerivation rec {
pname = "clapper";
version = "0.4.1";
src = fetchFromGitHub {
owner = "Rafostar";
repo = pname;
rev = version;
sha256 = "sha256-ccvg8yxPCN7OYmJvq0SPY6iyiuFuWJyiu+mRoykEzqI=";
};
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
libadwaita
libsoup
wayland
wayland-protocols
];
postPatch = ''
patchShebangs build-aux/meson/postinstall.py
'';
mesonFlags = [
# TODO: https://github.com/NixOS/nixpkgs/issues/36468
"-Dc_args=-I${glib.dev}/include/gio-unix-2.0"
];
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;
};
}

View file

@ -0,0 +1,122 @@
{ lib
, stdenv
, fetchurl
, alsa-lib
, autoPatchelfHook
, binutils-unwrapped
, libav_0_8
, libnotify
, libresample
, libusb1
, qt4
, rpmextract
, unzip
, xorg
, usersGroup ? "clickshare" # for udev access rules
}:
# This fetches the latest firmware version that
# contains a linux-compatible client binary.
# Barco no longer supports linux, so updates are unlikely:
# https://www.barco.com/de/support/clickshare-csc-1/knowledge-base/KB1191
stdenv.mkDerivation rec {
pname = "clickshare-csc1";
version = "01.07.00.033";
src = fetchurl {
name = "clickshare-csc1-${version}.zip";
url = "https://www.barco.com/services/website/de/TdeFiles/Download?FileNumber=R33050020&TdeType=3&MajorVersion=01&MinorVersion=07&PatchVersion=00&BuildVersion=033";
sha256 = "0h4jqidqvk4xkaky5bizi7ilz4qzl2mh68401j21y3djnzx09br3";
};
nativeBuildInputs = [
autoPatchelfHook
binutils-unwrapped
rpmextract
unzip
];
buildInputs = [
alsa-lib
libav_0_8
libnotify
libresample
libusb1
qt4
xorg.libX11
xorg.libXdamage
xorg.libXfixes
xorg.libXinerama
xorg.libXtst
];
sourceRoot = ".";
# The source consists of nested archives.
# We extract them archive by archive.
# If the filename contains version numbers,
# we use a wildcard and check that there
# is actually only one file matching.
postUnpack =
let
rpmArch =
if stdenv.hostPlatform.isx86_32 then "i386" else
if stdenv.hostPlatform.isx86_64 then "x86_64" else
throw "unsupported system: ${stdenv.hostPlatform.system}";
in
''
ls clickshare_baseunit_*.*_all.signed_release.ipk | wc --lines | xargs test 1 =
tar --verbose --extract --one-top-level=dir1 < clickshare_baseunit_*.*_all.signed_release.ipk
mkdir dir2
( cd dir2 ; ar xv ../dir1/firmware.ipk )
tar --verbose --gzip --extract --one-top-level=dir3 --exclude='dev/*' < dir2/data.tar.gz
ls dir3/clickshare/clickshare-*-*.${rpmArch}.rpm | wc --lines | xargs test 1 =
mkdir dir4
cd dir4
rpmextract ../dir3/clickshare/clickshare-*-*.${rpmArch}.rpm
'';
installPhase = ''
runHook preInstall
mkdir --verbose --parents $out
mv --verbose --target-directory=. usr/*
rmdir --verbose usr
cp --verbose --recursive --target-directory=$out *
runHook postInstall
'';
# Default udev rule restricts access to the
# clickshare USB dongle to the `wheel` group.
# We replace it with the group
# stated in the package arguments.
# Also, we patch executable and icon paths in .desktop files.
preFixup = ''
substituteInPlace \
$out/lib/udev/rules.d/99-clickshare.rules \
--replace wheel ${usersGroup}
substituteInPlace \
$out/share/applications/clickshare.desktop \
--replace Exec= Exec=$out/bin/ \
--replace =/usr =$out
substituteInPlace \
$out/etc/xdg/autostart/clickshare-launcher.desktop \
--replace =/usr =$out
'';
meta = {
homepage = "https://www.barco.com/de/support/clickshare-csc-1/drivers";
downloadPage = "https://www.barco.com/de/Support/software/R33050020";
platforms = [ "i686-linux" "x86_64-linux" ];
license = lib.licenses.unfree;
maintainers = [ lib.maintainers.yarny ];
description = "Linux driver/client for Barco ClickShare CSC-1";
longDescription = ''
Barco ClickShare is a wireless presentation system
where a USB dongle transmits to a base station
that is connected with a beamer.
The USB dongle requires proprietary software that
captures the screen and sends it to the dongle.
This package provides the necessary software for Linux.
'';
};
}

View file

@ -0,0 +1,65 @@
{ 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;
};
}

View file

@ -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;
}

View file

@ -0,0 +1,39 @@
{ 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";
};
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;
};
}

View file

@ -0,0 +1,70 @@
{ lib
, mkDerivationWith
, python3Packages
, fetchFromGitHub
, wrapQtAppsHook
, ffmpeg
, qtbase
}:
mkDerivationWith python3Packages.buildPythonApplication rec {
pname = "corrscope";
version = "0.8.0";
format = "pyproject";
src = fetchFromGitHub {
owner = "corrscope";
repo = "corrscope";
rev = version;
sha256 = "1wdla4ryif1ss37aqi61lcvzddvf568wyh5s3xv1lrryh4al9vpd";
};
nativeBuildInputs = [
wrapQtAppsHook
] ++ (with python3Packages; [
poetry-core
]);
buildInputs = [
ffmpeg
qtbase
];
propagatedBuildInputs = with python3Packages; [
appdirs
atomicwrites
attrs
click
matplotlib
numpy
packaging
qtpy
pyqt5
ruamel-yaml
colorspacious
];
dontWrapQtApps = true;
preFixup = ''
makeWrapperArgs+=(
--prefix PATH : ${lib.makeBinPath [ ffmpeg ]}
"''${qtWrapperArgs[@]}"
)
'';
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;
};
}

View file

@ -0,0 +1,179 @@
{ stdenv
, lib
, cacert
, curl
, runCommandLocal
, targetPlatform
, unzip
, appimage-run
, addOpenGLRunpath
, libGLU
, xorg
, buildFHSUserEnv
, bash
, writeText
, ocl-icd
, xkeyboard_config
, glib
, libarchive
, python2
}:
let
davinci = (
stdenv.mkDerivation rec {
pname = "davinci-resolve";
version = "17.4.3";
nativeBuildInputs = [ unzip appimage-run addOpenGLRunpath ];
# Pretty sure, there are missing dependencies ...
buildInputs = [ libGLU xorg.libXxf86vm ];
src = runCommandLocal "${pname}-src.zip"
rec {
outputHashMode = "recursive";
outputHashAlgo = "sha256";
outputHash = "0hq374n26mbcds8f1z644cvnh4h2rjdrbxxxbj4p34mx9b04ab28";
impureEnvVars = lib.fetchers.proxyImpureEnvVars;
nativeBuildInputs = [ curl ];
# ENV VARS
SSL_CERT_FILE = "${cacert}/etc/ssl/certs/ca-bundle.crt";
DOWNLOADID = "5efad1a052e8471989f662338d5247f1";
REFERID = "263d62f31cbb49e0868005059abcb0c9";
SITEURL = "https://www.blackmagicdesign.com/api/register/us/download/${DOWNLOADID}";
USERAGENT = builtins.concatStringsSep " " [
"User-Agent: Mozilla/5.0 (X11; Linux ${targetPlatform.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";
"state" = "Province of Utrecht";
"city" = "Utrecht";
"product" = "DaVinci Resolve";
};
} ''
RESOLVEURL=$(curl \
-s \
-H 'Host: www.blackmagicdesign.com' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Origin: https://www.blackmagicdesign.com' \
-H "$USERAGENT" \
-H 'Content-Type: application/json;charset=UTF-8' \
-H "Referer: https://www.blackmagicdesign.com/support/download/$REFERID/Linux" \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Accept-Language: en-US,en;q=0.9' \
-H 'Authority: www.blackmagicdesign.com' \
-H 'Cookie: _ga=GA1.2.1849503966.1518103294; _gid=GA1.2.953840595.1518103294' \
--data-ascii "$REQJSON" \
--compressed \
"$SITEURL")
curl \
--retry 3 --retry-delay 3 \
-H "Host: sw.blackmagicdesign.com" \
-H "Upgrade-Insecure-Requests: 1" \
-H "$USERAGENT" \
-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" \
-H "Accept-Language: en-US,en;q=0.9" \
--compressed \
"$RESOLVEURL" \
> $out
'';
# The unpack phase won't generate a directory
setSourceRoot = ''
sourceRoot=$PWD
'';
installPhase = ''
runHook preInstall
export HOME=$PWD/home
mkdir -p $HOME
mkdir -p $out
appimage-run ./DaVinci_Resolve_${version}_Linux.run -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
'';
}
);
in
buildFHSUserEnv {
name = "davinci-resolve";
targetPkgs = pkgs: with pkgs; [
librsvg
libGLU
libGL
xorg.libICE
xorg.libSM
xorg.libXxf86vm
xorg.libxcb
udev
opencl-headers
alsa-lib
xorg.libX11
xorg.libXext
expat
zlib
libuuid
bzip2
libtool
ocl-icd
glib
libarchive
xdg-utils # xdg-open needed to open URLs
python2
# currently they want python 3.6 which is EOL
#python3
];
runScript = "${bash}/bin/bash ${
writeText "davinci-wrapper"
''
export QT_XKB_CONFIG_ROOT="${xkeyboard_config}/share/X11/xkb"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${davinci}/libs
${davinci}/bin/resolve
''
}";
meta = with lib; {
description = "Professional Video Editing, Color, Effects and Audio Post";
homepage = "https://www.blackmagicdesign.com/products/davinciresolve/";
license = licenses.unfree;
maintainers = with maintainers; [ jshcmpbll ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,53 @@
{ 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.16.0";
namePrefix = "";
src = fetchFromGitLab {
owner = "rastersoft";
repo = "devedeng";
rev = version;
sha256 = "1xb7acjphvn4ya8fgjsvag5gzi9a6c2famfl0ffr8nhb9y8ig9mg";
};
# Temporary fix
# See https://github.com/NixOS/nixpkgs/issues/61578
# and https://github.com/NixOS/nixpkgs/issues/56943
strictDeps = false;
nativeBuildInputs = [
gettext wrapGAppsHook
# Temporary fix
# See https://github.com/NixOS/nixpkgs/issues/61578
# and https://github.com/NixOS/nixpkgs/issues/56943
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 ];
};
}

View file

@ -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 = "1.8.2";
src = fetchFromGitHub {
owner = "aramg";
repo = "droidcam";
rev = "v${version}";
sha256 = "sha256-AxJBpoiBnb+5Pq/h4giOYAeLlvOtAJT5sCwzPEKo7w4=";
};
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;
};
}

View file

@ -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 = "http://dvd-slideshow.sourceforge.net/wiki/Main_Page";
license = lib.licenses.gpl2;
platforms = lib.platforms.linux;
maintainers = [ lib.maintainers.robbinch ];
};
}

View file

@ -0,0 +1,40 @@
{ lib
, stdenv
, fetchurl
, imagemagick
, libdvdread
, libxml2
, freetype
, fribidi
, libpng
, zlib
, pkg-config
, flex
, bison
}:
stdenv.mkDerivation rec {
pname = "dvdauthor";
version = "0.7.1";
src = fetchurl {
url = "mirror://sourceforge/dvdauthor/dvdauthor-${version}.tar.gz";
sha256 = "1s8zqlim0s3hk5sbdsilip3qqh0yv05l1jwx49d9rsy614dv27sh";
};
buildInputs = [ libpng freetype libdvdread libxml2 zlib fribidi imagemagick flex bison ];
nativeBuildInputs = [ pkg-config ];
patches = [
./dvdauthor-0.7.1-automake-1.13.patch
./dvdauthor-0.7.1-mga-strndup.patch
./dvdauthor-imagemagick-0.7.0.patch
];
meta = with lib; {
description = "Tools for generating DVD files to be played on standalone DVD players";
homepage = "http://dvdauthor.sourceforge.net/";
license = licenses.gpl2;
platforms = platforms.linux ++ platforms.darwin;
};
}

View file

@ -0,0 +1,10 @@
--- dvdauthor/configure.ac~ 2013-01-04 08:27:40.713197029 +0800
+++ dvdauthor/configure.ac 2013-01-04 08:27:53.273525273 +0800
@@ -1,6 +1,6 @@
AC_INIT(DVDAuthor,0.7.1,dvdauthor-users@lists.sourceforge.net)
-AM_CONFIG_HEADER(src/config.h)
+AC_CONFIG_HEADERS(src/config.h)
AC_CONFIG_AUX_DIR(autotools)
AM_INIT_AUTOMAKE

View file

@ -0,0 +1,24 @@
Index: dvdauthor/src/dvdvml.l
===================================================================
--- dvdauthor/src/dvdvml.l
+++ dvdauthor/src/dvdvml.l 2014-09-14 19:36:05.098847465 +0000
@@ -19,6 +19,7 @@
* USA
*/
+#include "config.h"
#include "compat.h" /* needed for bool */
#include "dvdvm.h"
#include "dvdvmy.h"
Index: dvdauthor/src/dvdvmy.y
===================================================================
--- dvdauthor/src/dvdvmy.y
+++ dvdauthor/src/dvdvmy.y 2014-09-14 19:36:28.251618378 +0000
@@ -19,6 +19,7 @@
* USA
*/
+#include "config.h"
#include "compat.h" /* needed for bool */
#include "dvdvm.h"

View file

@ -0,0 +1,11 @@
--- dvdauthor/configure.ac.orig 2010-10-23 04:26:49.000000000 +0200
+++ dvdauthor/configure.ac 2010-10-24 14:37:45.489064778 +0200
@@ -31,7 +31,7 @@
usemagick=0
-AC_CHECK_PROGS(MAGICKCONFIG, [Magick-config])
+AC_CHECK_PROGS(MAGICKCONFIG, [MagickCore-config])
if test -n "$MAGICKCONFIG"; then
ac_save_CPPFLAGS="$CPPFLAGS"
ac_save_LIBS="$LIBS"

View file

@ -0,0 +1,28 @@
{ 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 = "http://dvdbackup.sourceforge.net/";
license = lib.licenses.gpl3Plus;
maintainers = [ lib.maintainers.bradediger ];
platforms = lib.platforms.linux;
};
}

View file

@ -0,0 +1,127 @@
{ lib
, stdenv
, fetchurl
, bison
, cdrtools
, docbook_xml_dtd_412
, docbook-xsl-nons
, dvdauthor
, dvdplusrwtools
, ffmpeg
, flex
, fontconfig
, gettext
, glib
, gobject-introspection
, libexif
, libjpeg
, pkg-config
, wrapGAppsHook
, wxGTK30-gtk3 # crash with wxGTK30 with GTK2 compat
, 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.1.2";
src = fetchurl {
url = "mirror://sourceforge/project/dvdstyler/dvdstyler/${version}/DVDStyler-${version}.tar.bz2";
sha256 = "03lsblqficcadlzkbyk8agh5rqcfz6y6dqvy9y866wqng3163zq4";
};
nativeBuildInputs = [
bison
docbook_xml_dtd_412
docbook-xsl-nons
flex
gettext
gobject-introspection
pkg-config
wrapGAppsHook
xmlto
zip
];
buildInputs = [
cdrtools
dvdauthor
dvdplusrwtools
ffmpeg
fontconfig
glib
libexif
libjpeg
wxSVG
wxGTK30-gtk3
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;
};
}

View file

@ -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" ];
};
}

View file

@ -0,0 +1,135 @@
{ 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
, 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
];
buildInputs = [
at-spi2-core
dbus
libepoxy
elfutils
gexiv2
glib
gobject-introspection
gst-plugins-base
gstreamer
gtk3
lcms2
libdatrie
libgphoto2
libgudev
libpeas
libraw
libselinux
libsepol
libthai
libunwind
libxkbcommon
orc
pcre
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 ];
};
}

View file

@ -0,0 +1,57 @@
{
"name": "epgstation-client",
"version": "2.6.20",
"private": true,
"scripts": {
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"watch": "vue-cli-service build --watch --mode development"
},
"dependencies": {
"@mdi/font": "6.5.95",
"aribb24.js": "1.8.8",
"axios": "0.24.0",
"eventemitter2": "6.4.5",
"hls.js": "1.1.2",
"inversify": "6.0.1",
"json-stable-stringify": "1.0.1",
"lodash": "4.17.21",
"material-design-icons-iconfont": "6.1.1",
"mpegts.js": "1.6.10",
"reflect-metadata": "0.1.13",
"resize-observer-polyfill": "1.5.1",
"roboto-fontface": "*",
"smoothscroll-polyfill": "0.4.4",
"socket.io-client": "4.3.2",
"typeface-roboto": "1.1.13",
"vue": "2.6.14",
"vue-class-component": "7.2.6",
"vue-property-decorator": "9.1.2",
"vue-router": "3.5.3",
"vuetify": "2.5.10",
"vuetify-datetime-picker": "2.1.1",
"@types/hls.js": "0.13.3",
"@types/json-stable-stringify": "1.0.33",
"@types/lodash": "4.14.178",
"@types/smoothscroll-polyfill": "0.3.1",
"@types/socket.io-client": "1.4.36",
"@typescript-eslint/eslint-plugin": "4.33.0",
"@typescript-eslint/parser": "4.33.0",
"@vue/cli-plugin-eslint": "4.5.12",
"@vue/cli-plugin-typescript": "4.5.13",
"@vue/cli-plugin-vuex": "4.5.13",
"@vue/cli-service": "4.5.13",
"@vue/eslint-config-prettier": "6.0.0",
"@vue/eslint-config-typescript": "7.0.0",
"eslint": "7.32.0",
"eslint-plugin-prettier": "3.4.1",
"eslint-plugin-vue": "7.20.0",
"prettier": "2.4.1",
"sass": "1.32.12",
"sass-loader": "10.2.0",
"typescript": "4.4.4",
"vue-cli-plugin-vuetify": "2.4.3",
"vue-template-compiler": "2.6.14",
"vuetify-loader": "1.7.3"
}
}

View file

@ -0,0 +1,139 @@
{ lib
, stdenv
, fetchFromGitHub
, gitUpdater
, writers
, makeWrapper
, bash
, nodejs
, nodePackages
, gzip
, jq
, yq
}:
let
# NOTE: use updateScript to bump the package version
pname = "EPGStation";
version = "2.6.20";
src = fetchFromGitHub {
owner = "l3tnun";
repo = "EPGStation";
rev = "v${version}";
sha256 = "K1cAvmqWEfS6EY4MKAtjXb388XLYHtouxNM70PWgFig=";
};
client = nodePackages.epgstation-client.override (drv: {
# FIXME: remove this option if possible
#
# Unsetting this option resulted NPM attempting to re-download packages.
dontNpmInstall = true;
meta = drv.meta // {
inherit (nodejs.meta) platforms;
};
});
server = nodePackages.epgstation.override (drv: {
inherit src;
# This is set to false to keep devDependencies at build time. Build time
# dependencies are pruned afterwards.
production = false;
buildInputs = (drv.buildInputs or [ ]) ++ [ bash ];
nativeBuildInputs = (drv.nativeBuildInputs or [ ]) ++ [
makeWrapper
];
preRebuild = ''
# Fix for not being able to connect to mysql using domain sockets.
patch -p1 < ${./use-mysql-over-domain-socket.patch}
# Workaround for https://github.com/svanderburg/node2nix/issues/275
sed -i -e "s|#!/usr/bin/env node|#! ${nodejs}/bin/node|" node_modules/node-gyp-build/bin.js
find . -name package-lock.json -delete
'';
postInstall = let
runtimeDeps = [ nodejs bash ];
in
''
mkdir -p $out/{bin,libexec,share/doc/epgstation,share/man/man1}
pushd $out/lib/node_modules/epgstation
cp -r ${client}/lib/node_modules/epgstation-client/node_modules client/node_modules
chmod -R u+w client/node_modules
npm run build
npm prune --production
pushd client
npm prune --production
popd
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@/${drv.meta.description}/g' ${./epgstation.1} \
| ${gzip}/bin/gzip > $out/share/man/man1/epgstation.1.gz
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 recorded thumbnail
ln -sfT /etc/epgstation config
ln -sfT /var/lib/epgstation data
ln -sfT /var/lib/epgstation/recorded recorded
ln -sfT /var/lib/epgstation/thumbnail thumbnail
makeWrapper ${nodejs}/bin/npm $out/bin/epgstation \
--chdir "$out/lib/node_modules/epgstation" \
--prefix PATH : ${lib.makeBinPath runtimeDeps} \
--set APP_ROOT_PATH "$out/lib/node_modules/epgstation"
popd
'';
# NOTE: this may take a while since it has to update all packages in
# nixpkgs.nodePackages
passthru.updateScript = import ./update.nix {
inherit lib;
inherit (src.meta) homepage;
inherit
pname
version
gitUpdater
writers
jq
yq;
};
# nodePackages.epgstation is a stub package to fetch npm dependencies and
# its meta.platforms is made empty to prevent users from installing it
# directly. This technique ensures epgstation can share npm packages with
# the rest of nixpkgs while still allowing us to heavily customize the
# build. It also allows us to provide devDependencies for the epgstation
# build process without doing the same for all the other node packages.
meta = drv.meta // {
inherit (nodejs.meta) platforms;
};
});
in
server // {
name = "${pname}-${version}";
meta = with lib; server.meta // {
maintainers = with maintainers; [ midchildan ];
# NOTE: updateScript relies on this being correct
position = toString ./default.nix + ":1";
};
}

View file

@ -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

View file

@ -0,0 +1,72 @@
{
"name": "epgstation",
"version": "2.6.20",
"description": "DTV Software in Japan.",
"repository": {
"type": "git",
"url": "git+https://github.com/l3tnun/EPGStation-V2.git"
},
"author": "l3tnun",
"license": "MIT",
"bugs": {
"url": "https://github.com/l3tnun/EPGStation-V2/issues"
},
"homepage": "https://github.com/l3tnun/EPGStation-V2#readme",
"dependencies": {
"arib-subtitle-timedmetadater": "4.0.9",
"aribts": "2.1.12",
"axios": "0.24.0",
"body-parser": "1.19.0",
"cors": "2.8.5",
"diskusage-ng": "1.0.2",
"express": "4.17.1",
"express-openapi": "9.3.0",
"file-type": "16.5.3",
"inversify": "5.1.1",
"js-yaml": "4.1.0",
"lodash": "4.17.21",
"log4js": "6.3.0",
"minimist": "1.2.5",
"mirakurun": "3.9.0-beta.26",
"mkdirp": "1.0.4",
"multer": "1.4.3",
"mysql": "2.18.1",
"openapi-types": "9.3.0",
"reflect-metadata": "0.1.13",
"socket.io": "4.3.1",
"source-map-support": "0.5.20",
"sqlite3": "5.0.2",
"swagger-ui-dist": "3.52.5",
"typeorm": "0.2.38",
"url-join": "4.0.1",
"@types/body-parser": "1.19.1",
"@types/express": "4.17.13",
"@types/file-type": "10.9.1",
"@types/js-yaml": "4.0.4",
"@types/lodash": "4.14.176",
"@types/minimist": "1.2.2",
"@types/mkdirp": "1.0.2",
"@types/mongodb": "4.0.6",
"@types/multer": "1.4.7",
"@types/node": "16.11.6",
"@types/socket.io": "3.0.1",
"@types/source-map-support": "0.5.4",
"@types/sqlite3": "3.1.7",
"@types/url-join": "4.0.1",
"@typescript-eslint/eslint-plugin": "4.33.0",
"@typescript-eslint/parser": "4.33.0",
"del": "6.0.0",
"eslint": "7.32.0",
"eslint-config-prettier": "8.3.0",
"eslint-plugin-prettier": "3.4.1",
"gulp": "4.0.2",
"gulp-eslint": "6.0.0",
"gulp-plumber": "1.2.1",
"gulp-sourcemaps": "3.0.0",
"gulp-typescript": "5.0.1",
"prettier": "2.4.1",
"ts-loader": "9.2.6",
"ts-node": "10.4.0",
"typescript": "4.4.4"
}
}

View file

@ -0,0 +1,63 @@
{ pname
, version
, homepage
, lib
, gitUpdater
, writers
, jq
, yq
}:
let
updater = gitUpdater {
inherit pname version;
attrPath = lib.toLower pname;
rev-prefix = "v";
};
updateScript = builtins.elemAt updater 0;
updateArgs = map (lib.escapeShellArg) (builtins.tail updater);
in writers.writeBash "update-epgstation" ''
set -euxo pipefail
# bump the version
${updateScript} ${lib.concatStringsSep " " updateArgs}
cd "${toString ./.}"
# Get the path to the latest source. Note that we can't just pass the value
# of epgstation.src directly because it'd be evaluated before we can run
# updateScript.
SRC="$(nix-build ../../../.. --no-out-link -A epgstation.src)"
if [[ "${version}" == "$(${jq}/bin/jq -r .version "$SRC/package.json")" ]]; then
echo "[INFO] Already using the latest version of ${pname}" >&2
exit
fi
# Regenerate package.json from the latest source.
${jq}/bin/jq '. + {
dependencies: (.dependencies + .devDependencies),
} | del(.devDependencies, .main, .scripts)' \
"$SRC/package.json" \
> package.json
${jq}/bin/jq '. + {
dependencies: (.dependencies + .devDependencies),
} | del(.devDependencies, .main, .scripts)' \
"$SRC/client/package.json" \
> client/package.json
# Regenerate node packages to update the pre-overriden epgstation derivation.
# This must come *after* package.json has been regenerated.
pushd ../../../development/node-packages
./generate.sh
popd
# Generate default streaming settings for the nixos module.
pushd ../../../../nixos/modules/services/video/epgstation
${yq}/bin/yq -j '{ urlscheme , stream }' \
"$SRC/config/config.yml.template" \
> streaming.json
# Fix generated output for EditorConfig compliance
printf '\n' >> streaming.json # rule: insert_final_newline
popd
''

View file

@ -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.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;

View file

@ -0,0 +1,23 @@
{ 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=";
};
vendorSha256 = "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 ];
};
}

View file

@ -0,0 +1,29 @@
{ lib
, buildPythonApplication
, fetchPypi
, ffmpeg
, ffmpeg-progress-yield
}:
buildPythonApplication rec {
pname = "ffmpeg-normalize";
version = "1.23.0";
src = fetchPypi {
inherit pname version;
sha256 = "sha256-DSBh3m7gGm5fWH47YWALlyhi4x6A2RcVrpuDDpXolSI=";
};
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 ];
};
}

View file

@ -0,0 +1,49 @@
{ lib, stdenv, fetchurl, openjdk17, makeWrapper, autoPatchelfHook
, zlib, libzen, libmediainfo, curlWithGnuTls, libmms, glib
}:
stdenv.mkDerivation rec {
pname = "filebot";
version = "4.9.6";
src = fetchurl {
url = "https://web.archive.org/web/20220305095926/https://get.filebot.net/filebot/FileBot_${version}/FileBot_${version}-portable.tar.xz";
sha256 = "sha256-3j0WmmamE9KUNwjOVZvrdFH5dS/9FHSdbLfcAsOzQOo=";
};
unpackPhase = "tar xvf $src";
nativeBuildInputs = [ makeWrapper autoPatchelfHook ];
buildInputs = [ zlib libzen libmediainfo curlWithGnuTls libmms glib ];
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'
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
'';
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 ];
license = licenses.unfreeRedistributable;
maintainers = with maintainers; [ gleber felschr ];
platforms = platforms.linux;
};
}

View file

@ -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"

View file

@ -0,0 +1,45 @@
{ lib
, mkDerivation
, fetchurl
, autoPatchelfHook
, hidapi
, readline
, qtsvg
, qtxmlpatterns
}:
mkDerivation rec {
pname = "flirc";
version = "3.24.3";
src = fetchurl {
url = "https://web.archive.org/web/20211021211803/http://apt.flirc.tv/arch/x86_64/flirc.latest.x86_64.tar.gz";
sha256 = "0p4pp7j70lbw6m25lmjg6ibc67r6jcy7qs3kki9f86ji1jvrxpga";
};
nativeBuildInputs = [ autoPatchelfHook ];
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 ];
license = licenses.unfree;
platforms = [ "x86_64-linux" ];
};
}

View file

@ -0,0 +1,45 @@
{ lib, fetchFromGitHub, stdenv
, ffmpeg, frei0r, sox, gtk3, python3, ladspaPlugins
, gobject-introspection, makeWrapper, wrapGAppsHook
}:
stdenv.mkDerivation rec {
pname = "flowblade";
version = "2.8.0.3";
src = fetchFromGitHub {
owner = "jliljebl";
repo = pname;
rev = "v${version}";
sha256 = "sha256-/EkI3qiceB5eKTVQnpG+z4e6yaE9hDtn6I+iN/J+h/g=";
};
buildInputs = [
ffmpeg frei0r sox gtk3 gobject-introspection 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 \
''${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 ];
};
}

View file

@ -0,0 +1,50 @@
{ stdenv, lib, fetchurl, appimageTools, makeWrapper, electron }:
stdenv.mkDerivation rec {
pname = "freetube";
version = "0.16.0";
src = fetchurl {
url = "https://github.com/FreeTubeApp/FreeTube/releases/download/v${version}-beta/freetube_${version}_amd64.AppImage";
sha256 = "sha256-G4lZ1lbNN8X9ocWhcuuNZGTZm9AUzuWKVm23YgsJwig=";
};
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
'';
meta = with lib; {
description = "An Open Source YouTube app for privacy";
homepage = "https://freetubeapp.io/";
license = licenses.agpl3Only;
maintainers = with maintainers; [ ryneeverett alyaeanyx ];
platforms = [ "x86_64-linux" ];
};
}

View file

@ -0,0 +1,43 @@
{ 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;
};
}

View file

@ -0,0 +1,33 @@
{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";
})
];
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;
};
}

View file

@ -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);
}

View file

@ -0,0 +1,36 @@
{ stdenv, lib, python3Packages, gtk3, gobject-introspection, ffmpeg, wrapGAppsHook }:
with python3Packages;
buildPythonApplication rec {
pname = "gnomecast";
version = "1.9.11";
src = fetchPypi {
inherit pname version;
sha256 = "4d8cd7a71f352137252c5a9ee13475bd67fb99594560ecff1efb0f718d8bbaac";
};
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;
};
}

View file

@ -0,0 +1,24 @@
{ lib, buildGoModule, fetchFromGitHub }:
buildGoModule rec {
pname = "go-chromecast";
version = "0.2.12";
src = fetchFromGitHub {
owner = "vishen";
repo = pname;
rev = "v${version}";
sha256 = "sha256-h8qWwMaEhXnj6ZSrKAXBVbrMR0je41EoOtFeN9XlCuk=";
};
vendorSha256 = "sha256-PpMLHuJR6irp+QHhzguwGtBy30HM7DR0tNGiwB07M5E=";
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 ];
};
}

View file

@ -0,0 +1,45 @@
{ lib, stdenv, fetchFromGitHub, pkg-config, zlib }:
stdenv.mkDerivation rec {
version = "2.0.0";
pname = "gpac";
src = fetchFromGitHub {
owner = "gpac";
repo = "gpac";
rev = "v${version}";
sha256 = "sha256-MIX32lSqf/lrz9240h4wMIQp/heUmwvDJz8WN08yf6c=";
};
postPatch = ''
substituteInPlace Makefile --replace 'dh_link' 'ln -s'
'';
# 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;
};
}

View file

@ -0,0 +1,50 @@
{ stdenv, lib, fetchgit, makeWrapper, pkg-config, cudatoolkit, glew, libX11
, libXcomposite, glfw, libpulseaudio, ffmpeg }:
stdenv.mkDerivation rec {
pname = "gpu-screen-recorder";
version = "1.0.0";
src = fetchgit {
url = "https://repo.dec05eba.com/gpu-screen-recorder";
rev = "36fd4516db06bcb192e49055319d1778bbed0322";
sha256 = "sha256-hYEHM4FOYcPmQ5Yxh520PKy8HiD+G0xv9hrn8SmA07w=";
};
nativeBuildInputs = [
pkg-config
makeWrapper
];
buildInputs = [
glew
libX11
libXcomposite
glfw
libpulseaudio
ffmpeg
];
postPatch = ''
substituteInPlace ./build.sh \
--replace '/opt/cuda/targets/x86_64-linux/include' '${cudatoolkit}/targets/x86_64-linux/include' \
--replace '/usr/lib64/libcuda.so' '${cudatoolkit}/targets/x86_64-linux/lib/stubs/libcuda.so'
'';
buildPhase = ''
./build.sh
'';
installPhase = ''
install -Dt $out/bin/ gpu-screen-recorder
wrapProgram $out/bin/gpu-screen-recorder --prefix LD_LIBRARY_PATH : /run/opengl-driver/lib
'';
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" ];
};
}

View file

@ -0,0 +1,38 @@
diff --git a/build.sh b/build.sh
index 05603db..8c38b31 100755
--- a/build.sh
+++ b/build.sh
@@ -2,5 +2,5 @@
dependencies="gtk+-3.0 x11 xrandr libpulse"
includes="$(pkg-config --cflags $dependencies)"
-libs="$(pkg-config --libs $dependencies)"
+libs="$(pkg-config --libs $dependencies) -ldl"
g++ -o gpu-screen-recorder-gtk -O2 src/main.cpp -s $includes $libs
diff --git a/src/main.cpp b/src/main.cpp
index ae2078f..9dcdce1 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -15,6 +15,7 @@
#include <pwd.h>
#include <libgen.h>
#include <functional>
+#include <dlfcn.h>
typedef struct {
Display *display;
@@ -830,7 +831,13 @@ static void audio_input_change_callback(GtkComboBox *widget, gpointer userdata)
}
static bool is_nv_fbc_installed() {
- return access("/usr/lib/libnvidia-fbc.so.1", F_OK) == 0 || access("/usr/local/lib/libnvidia-fbc.so.1", F_OK) == 0;
+ auto handle = dlopen("libnvidia-fbc.so.1", RTLD_LAZY);
+ if (handle) {
+ dlclose(handle);
+ return true;
+ } else {
+ return false;
+ }
}
static GtkWidget* create_common_settings_page(GtkStack *stack, GtkApplication *app) {

View file

@ -0,0 +1,46 @@
{ stdenv, lib, fetchgit, pkg-config, makeWrapper, gtk3, libX11, libXrandr
, libpulseaudio, gpu-screen-recorder }:
stdenv.mkDerivation rec {
pname = "gpu-screen-recorder-gtk";
version = "0.1.0";
src = fetchgit {
url = "https://repo.dec05eba.com/gpu-screen-recorder-gtk";
rev = "4c317abd0531f8e155fbbbcd32850bbeebbf2ead";
sha256 = "sha256-5W6qmUMP31ndRDxMHuQ/XnZysPQgaie0vVlMTzfODU4=";
};
patches = [ ./fix-nvfbc-check.patch ];
nativeBuildInputs = [
pkg-config
makeWrapper
];
buildInputs = [
gtk3
libX11
libXrandr
libpulseaudio
];
buildPhase = ''
./build.sh
'';
installPhase = ''
install -Dt $out/bin/ gpu-screen-recorder-gtk
install -Dt $out/share/applications/ gpu-screen-recorder-gtk.desktop
wrapProgram $out/bin/gpu-screen-recorder-gtk --prefix PATH : ${lib.makeBinPath [ gpu-screen-recorder ]}
'';
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" ];
};
}

View file

@ -0,0 +1,253 @@
# 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
# For tests
, testers
, runCommand
, fetchurl
# Main build tools
, pkg-config
, autoconf
, automake
, libtool
, m4
, xz
, python3
, numactl
, writeText
# Processing, video codecs, containers
, ffmpeg-full
, nv-codec-headers
, libogg
, x264
, x265
, libvpx
, libtheora
, dav1d
, zimg
# 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 ? null
, Foundation ? null
, libobjc ? null
, VideoToolbox ? null
# 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.5.1";
src = fetchFromGitHub {
owner = "HandBrake";
repo = "HandBrake";
rev = version;
sha256 = "1kk11zl1mk37d4cvbc75gfndmma7vy3vkp4gmkyl92kiz6zadhyy";
};
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-full
fontconfig
freetype
fribidi
harfbuzz
jansson
lame
libass
libbluray
libdvdcss
libdvdnav
libdvdread
libiconv
libjpeg_turbo
libogg
libopus
libsamplerate
libtheora
libvorbis
libvpx
libxml2
speex
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.isx86_32 || stdenv.isx86_64) "--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

View file

@ -0,0 +1,74 @@
{ lib
, fetchFromGitLab
, mkDerivation
, breeze-icons
, breeze-qt5
, cmake
, extra-cmake-modules
, ffmpeg-full
, kcodecs
, kconfig
, kcoreaddons
, kfilemetadata
, ki18n
, kiconthemes
, kio
, kio-extras
, kirigami2
, kxmlgui
, mpv
, pkg-config
, qqc2-desktop-style
, qtbase
, qtquickcontrols2
, qtwayland
, youtube-dl
}:
mkDerivation rec {
pname = "haruna";
version = "0.7.3";
src = fetchFromGitLab {
owner = "multimedia";
repo = "haruna";
rev = "v${version}";
sha256 = "sha256-pFrmTaRvsqxJw34VULzfjx2k56kJgkB96nJtai2D1wY=";
domain = "invent.kde.org";
};
buildInputs = [
breeze-icons
breeze-qt5
ffmpeg-full
kcodecs
kconfig
kcoreaddons
kfilemetadata
ki18n
kiconthemes
kio
kio-extras
kirigami2
kxmlgui
mpv
qqc2-desktop-style
qtbase
qtquickcontrols2
qtwayland
youtube-dl
];
nativeBuildInputs = [
cmake
extra-cmake-modules
pkg-config
];
meta = with lib; {
homepage = "https://github.com/g-fb/haruna";
description = "Open source video player built with Qt/QML and libmpv";
license = with licenses; [ bsd3 cc-by-40 gpl3Plus wtfpl ];
maintainers = with maintainers; [ jojosch ];
};
}

View file

@ -0,0 +1,31 @@
{ lib, stdenv, fetchurl, libhdhomerun, pkg-config, gtk2 }:
stdenv.mkDerivation rec {
pname = "hdhomerun-config-gui";
version = "20210224";
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 ];
};
}

View file

@ -0,0 +1,51 @@
{ stdenv, avahi-compat, cmake, fetchFromGitHub, flatbuffers, hidapi, lib, libcec
, libusb1, libX11, libxcb, libXrandr, mbedtls, mkDerivation, protobuf, python3
, qtbase, qtserialport, qtsvg, qtx11extras, wrapQtAppsHook }:
mkDerivation rec {
pname = "hyperion.ng";
version = "2.0.12";
src = fetchFromGitHub {
owner = "hyperion-project";
repo = pname;
rev = version;
sha256 = "sha256-J31QaWwGNhIpnZmWN9lZEI6fC0VheY5X8fGchQqtAlQ=";
};
buildInputs = [
avahi-compat
flatbuffers
hidapi
libcec
libusb1
libX11
libxcb
libXrandr
mbedtls
protobuf
python3
qtbase
qtserialport
qtsvg
qtx11extras
];
nativeBuildInputs = [ cmake wrapQtAppsHook ];
cmakeFlags = [
"-DCMAKE_BUILD_TYPE=Release"
"-DUSE_SYSTEM_MBEDTLS_LIBS=ON"
"-DUSE_SYSTEM_FLATBUFFERS_LIBS=ON"
"-DUSE_SYSTEM_PROTO_LIBS=ON"
];
meta = with lib; {
broken = (stdenv.isLinux && stdenv.isAarch64);
description = "Open Source Ambilight solution";
homepage = "https://github.com/hyperion-project/hyperion.ng";
license = licenses.mit;
maintainers = with maintainers; [ algram ];
platforms = platforms.unix;
};
}

View file

@ -0,0 +1,86 @@
{ lib
, stdenv
, fetchFromGitHub
, substituteAll
, cinnamon
, gettext
, gobject-introspection
, mpv
, python3
, wrapGAppsHook
}:
stdenv.mkDerivation rec {
pname = "hypnotix";
version = "2.6";
src = fetchFromGitHub {
owner = "linuxmint";
repo = "hypnotix";
rev = version;
hash = "sha256-9HWr8zjUuhj/GZdrt1WwpwYNLEl34S9IJ7ikGZBSw3s=";
};
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/share/hypnotix $out/share/hypnotix
'';
nativeBuildInputs = [
gettext
gobject-introspection
python3.pkgs.wrapPython
wrapGAppsHook
];
dontWrapGApps = true;
buildInputs = [
cinnamon.xapps
];
pythonPath = with python3.pkgs; [
imdbpy
pygobject3
requests
setproctitle
unidecode
xapp
];
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r usr/lib $out
cp -r usr/share $out
glib-compile-schemas $out/share/glib-2.0/schemas
runHook postInstall
'';
preFixup = ''
buildPythonPath "$out $pythonPath"
makeWrapper ${python3.interpreter} $out/bin/hypnotix \
--add-flags $out/lib/hypnotix/hypnotix.py \
--prefix PYTHONPATH : "$program_PYTHONPATH" \
''${gappsWrapperArgs[@]}
'';
meta = {
description = "IPTV streaming application";
homepage = "https://github.com/linuxmint/hypnotix";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ dotlambda ];
platforms = lib.platforms.linux;
};
}

View file

@ -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()

View file

@ -0,0 +1,32 @@
{ lib
, fetchurl
, stdenv
, undmg
}:
stdenv.mkDerivation rec {
pname = "iina";
version = "1.2.0";
src = fetchurl {
url = "https://github.com/iina/iina/releases/download/v${version}/IINA.v${version}.dmg";
sha256 = "sha256-kbh+gAVfCXoct6jJGXnetTAzFfIGdVLL5zh/SL/EJzY=";
};
nativeBuildInputs = [ undmg ];
sourceRoot = "IINA.app";
installPhase = ''
mkdir -p "$out/Applications/IINA.app"
cp -R . "$out/Applications/IINA.app"
'';
meta = with lib; {
homepage = "https://iina.io/";
description = "The modern media player for macOS";
platforms = platforms.darwin;
license = licenses.gpl3;
maintainers = with maintainers; [ arkivm ];
};
}

View file

@ -0,0 +1,45 @@
{ 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 = "http://imagination.sourceforge.net";
license = licenses.gpl3Only;
maintainers = with maintainers; [ austinbutler ];
platforms = platforms.linux;
};
}

View file

@ -0,0 +1,108 @@
{ 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
}:
mkDerivation rec {
pname = "jellyfin-media-player";
version = "1.6.1";
src = fetchFromGitHub {
owner = "jellyfin";
repo = "jellyfin-media-player";
rev = "v${version}";
sha256 = "sha256-iqwOv95JFxQ1j/9B+oBFAp7mD1/1g2EJYvvUKbrDQes=";
};
jmpDist = fetchzip {
url = "https://github.com/iwalton3/jellyfin-web-jmp/releases/download/jwc-10.7.3/dist.zip";
sha256 = "sha256-P7WEYbVvpaVLwMgqC2e8QtMOaJclg0bX78J1fdGzcCU=";
};
patches = [
# the webclient-files are not copied in the regular build script. Copy them just like the linux build
./fix-osx-resources.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 = [
"-DCMAKE_BUILD_TYPE=Release"
"-DQTROOT=${qtbase}"
"-GNinja"
];
preBuild = ''
# copy the webclient-files to the expected "dist" directory
mkdir -p dist
cp -a ${jmpDist}/* dist
'';
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 = [ "x86_64-linux" "x86_64-darwin" ];
maintainers = with maintainers; [ jojosch kranzes ];
mainProgram = "jellyfinmediaplayer";
};
}

View file

@ -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",

View file

@ -0,0 +1,15 @@
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 780c0d3..d9c2341 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -108,8 +108,8 @@ endif()
set(RESOURCE_ROOT .)
if(APPLE)
set(RESOURCE_ROOT Resources)
- add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DEST ${RESOURCE_ROOT}/web-client/desktop)
- add_resources(TARGET ${MAIN_TARGET} SOURCES ${CMAKE_SOURCE_DIR}/native/ DEST ${RESOURCE_ROOT}/web-client/extension)
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/../dist/ DESTINATION ${RESOURCE_ROOT}/web-client/desktop)
+ install(DIRECTORY ${CMAKE_SOURCE_DIR}/native/ DESTINATION ${RESOURCE_ROOT}/web-client/extension)
endif()
if(NOT APPLE)

View file

@ -0,0 +1,84 @@
{ lib
, buildPythonApplication
, fetchPypi
, jellyfin-apiclient-python
, jinja2
, mpv
, pillow
, pystray
, python-mpv-jsonipc
, pywebview
, tkinter
}:
buildPythonApplication rec {
pname = "jellyfin-mpv-shim";
version = "2.0.2";
src = fetchPypi {
inherit pname version;
sha256 = "yFFMsGbzMAKyXpD/vZelswYulTYe5WybjG5pD2RpLrk=";
};
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"
'';
# no tests
doCheck = false;
pythonImportsCheck = [ "jellyfin_mpv_shim" ];
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 ];
};
}

View file

@ -0,0 +1,41 @@
{ lib, stdenv
, fetchFromGitHub
, pkg-config
, curl
, mpv
, yajl
}:
stdenv.mkDerivation rec {
pname = "jftui";
version = "0.5.1";
src = fetchFromGitHub {
owner = "Aanok";
repo = pname;
rev = "v${version}";
sha256 = "sha256-/QVSywS0O+HZpwY9W3le3RK3OhCkmdLYMCGTyyBdsFw=";
};
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;
};
}

View file

@ -0,0 +1,50 @@
{ stdenv
, lib
, fetchFromGitLab
, kio
, cmake
, extra-cmake-modules
, libvlc
, 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
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;
};
}

View file

@ -0,0 +1,65 @@
{ 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 ];
# workaround https://github.com/NixOS/nixpkgs/issues/56943
strictDeps = false;
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 ];
};
}

View file

@ -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

View file

@ -0,0 +1,48 @@
{
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,"
'';
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; [ gpl2 lgpl2 fdl12 ];
homepage = "https://kmplayer.kde.org/";
maintainers = with maintainers; [ sander zraexy ];
};
}

View file

@ -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();

View file

@ -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")

View file

@ -0,0 +1,88 @@
From 620c3eb38f0dbea6e877e37e97508513e87a0732 Mon Sep 17 00:00:00 2001
From: Jeremy Fleischman <jeremyfleischman@gmail.com>
Date: Sun, 27 Mar 2022 00:44:52 -0700
Subject: [PATCH] Add new KODI_WEBSERVER_EXTRA_WHITELIST cmake var to allow
access to more directories
(This is a backport of
https://github.com/xbmc/xbmc/commit/a6dedce7ba1f03bdd83b019941d1e369a06f7888
to Kodi 19.4 Matrix)
This is useful for NixOS, which often ends up creating a `KODI_HOME`
with symlinks to other files (including the chorus2 interface). Kodi's
webserver cautiously refuses to follow these symlinks, and you end up
getting 404s rather than the web page.
See https://forum.kodi.tv/showthread.php?tid=366338&pid=3079493 for a
discussion of this on the Kodi forum.
---
CMakeLists.txt | 1 +
xbmc/CompileInfo.cpp.in | 5 +++++
xbmc/CompileInfo.h | 1 +
xbmc/utils/FileUtils.cpp | 6 +++++-
4 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2d5369798df23..d5ef6d9390ef0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -243,6 +243,7 @@ add_custom_command(OUTPUT ${CORE_BUILD_DIR}/xbmc/CompileInfo.cpp
-DAPP_BUILD_DATE=${APP_BUILD_DATE}
-DAPP_SHARED_LIBRARY_SUFFIX="${APP_SHARED_LIBRARY_SUFFIX}"
-Dprefix=${CMAKE_BINARY_DIR}/${CORE_BUILD_DIR}
+ -DKODI_WEBSERVER_EXTRA_WHITELIST="${KODI_WEBSERVER_EXTRA_WHITELIST}"
-P ${CMAKE_SOURCE_DIR}/cmake/scripts/common/GenerateVersionedFiles.cmake
DEPENDS ${CMAKE_SOURCE_DIR}/version.txt
export-files
diff --git a/xbmc/CompileInfo.cpp.in b/xbmc/CompileInfo.cpp.in
index f81fe77902236..4f19203a89cde 100644
--- a/xbmc/CompileInfo.cpp.in
+++ b/xbmc/CompileInfo.cpp.in
@@ -105,3 +105,8 @@ std::vector<std::string> CCompileInfo::GetAvailableWindowSystems()
{
return StringUtils::Split("@CORE_PLATFORM_NAME_LC@", ' ');
}
+
+const std::vector<std::string> CCompileInfo::GetWebserverExtraWhitelist()
+{
+ return StringUtils::Split("@KODI_WEBSERVER_EXTRA_WHITELIST@", ',');
+}
diff --git a/xbmc/CompileInfo.h b/xbmc/CompileInfo.h
index 553a0194ee77f..e2521324e6576 100644
--- a/xbmc/CompileInfo.h
+++ b/xbmc/CompileInfo.h
@@ -32,4 +32,5 @@ class CCompileInfo
static const char* GetVersionCode();
static std::vector<std::string> GetAvailableWindowSystems();
static std::vector<ADDON::RepoInfo> LoadOfficialRepoInfos();
+ static const std::vector<std::string> GetWebserverExtraWhitelist();
};
diff --git a/xbmc/utils/FileUtils.cpp b/xbmc/utils/FileUtils.cpp
index e51f3d631c256..fc717c9608098 100644
--- a/xbmc/utils/FileUtils.cpp
+++ b/xbmc/utils/FileUtils.cpp
@@ -6,6 +6,7 @@
* See LICENSES/README.md for more information.
*/
+#include "CompileInfo.h"
#include "FileUtils.h"
#include "ServiceBroker.h"
#include "guilib/GUIKeyboardFactory.h"
@@ -261,12 +262,15 @@ bool CFileUtils::CheckFileAccessAllowed(const std::string &filePath)
"/.ssh/",
};
// ALLOW kodi paths
- const std::vector<std::string> whitelist = {
+ std::vector<std::string> whitelist = {
CSpecialProtocol::TranslatePath("special://home"),
CSpecialProtocol::TranslatePath("special://xbmc"),
CSpecialProtocol::TranslatePath("special://musicartistsinfo")
};
+ auto kodiExtraWhitelist = CCompileInfo::GetWebserverExtraWhitelist();
+ whitelist.insert(whitelist.end(), kodiExtraWhitelist.begin(), kodiExtraWhitelist.end());
+
// image urls come in the form of image://... sometimes with a / appended at the end
// and can be embedded in a music or video file image://music@...
// strip this off to get the real file path

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchFromGitHub, requests, vfs-libarchive }:
buildKodiAddon rec {
pname = "a4ksubtitles";
namespace = "service.subtitles.a4ksubtitles";
version = "2.8.0";
src = fetchFromGitHub {
owner = "a4k-openproject";
repo = "a4kSubtitles";
rev = "${namespace}/${namespace}-${version}";
sha256 = "0fg5mcvxdc3hqybp1spy7d1nnqirwhcvrblbwksikym9m3qgw2m5";
};
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;
};
}

View file

@ -0,0 +1,23 @@
{ writeShellScript
, nix
, curl
, gzip
, xmlstarlet
, common-updater-scripts
}:
{ attrPath }:
let
url = "http://mirrors.kodi.tv/addons/matrix/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 ]

View file

@ -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;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, typing_extensions }:
buildKodiAddon rec {
pname = "arrow";
namespace = "script.module.arrow";
version = "1.0.3.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0xa16sb2hls59l4gsg1xwb1qbkhcvbykq02l05n5rcm0alg80l3l";
};
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;
};
}

View file

@ -0,0 +1,31 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript, dateutil, requests, xbmcswift2 }:
buildKodiAddon rec {
pname = "arteplussept";
namespace = "plugin.video.arteplussept";
version = "1.1.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
hash = "sha256-IYodi0Uz16Qg4MHCz/K06pEXblrsBxHD25fb6LrW8To=";
};
propagatedBuildInputs = [
dateutil
requests
xbmcswift2
];
passthru = {
updateScript = addonUpdateScript {
attrPath = "kodi.packages.arteplussept";
};
};
meta = with lib; {
homepage = "https://github.com/known-as-bmf/plugin.video.arteplussept";
description = "Watch videos available on Arte+7";
license = licenses.mit;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "certifi";
namespace = "script.module.certifi";
version = "2020.12.05+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1z49b8va7wdyr714c8ixb2sldi0igffcjj3xpbmga58ph0z985vy";
};
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;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "chardet";
namespace = "script.module.chardet";
version = "4.0.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1jsd165mb1b8jdan2jbjd3y3xa0xam2cxcccmwazkybpa0r6a7dj";
};
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;
};
}

View file

@ -0,0 +1,35 @@
{ lib, stdenv, fetchFromGitHub, toKodiAddon, addonDir }:
let
drv = stdenv.mkDerivation {
pname = "controller-topology-project";
version = "unstable-2022-01-22";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "controller-topology-project";
rev = "e2a9bac903f21b2acfeee374070cfc97d03aba2d";
sha256 = "sha256-o6uKxOjEYNAK27drvNOokOFPdjkOEnr49mBre9ycM0w=";
};
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

View file

@ -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/matrix/${namespace}/${namespace}-${version}.zip";
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;
};
}

View file

@ -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/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "026i5rx9rmxcc18ixp6qhbryqdl4pn7cbwqicrishivan6apnacd";
};
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;
};
}

View file

@ -0,0 +1,26 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "future";
namespace = "script.module.future";
version = "0.18.2+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "sha256-QBG7V70Dwmfq8ISILxGNvtmQT9fJp2e5gs2C9skRwIw=";
};
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;
};
}

View file

@ -0,0 +1,30 @@
{ lib, buildKodiAddon, fetchFromGitHub, fetchzip, dateutil, requests, routing, vfs-libarchive, archive_tool, youtube }:
buildKodiAddon rec {
pname = "iagl";
namespace = "plugin.program.iagl";
version = "3.0.5";
src = fetchFromGitHub {
owner = "zach-morris";
repo = "plugin.program.iagl";
rev = version;
sha256 = "sha256-Ha9wUHURPql6xew5bUd33DpgRt+8vwIHocxPopmXj4c=";
};
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;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "idna";
namespace = "script.module.idna";
version = "2.10.0+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "0pm86m8kh2p0brps3xzxcmmabvb4izkglzkj8dsn33br3vlc7cm7";
};
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;
};
}

View file

@ -0,0 +1,31 @@
{ stdenv, lib, rel, addonDir, buildKodiBinaryAddon, fetchFromGitHub, expat, glib, nspr, nss, gtest }:
buildKodiBinaryAddon rec {
pname = "inputstream-adaptive";
namespace = "inputstream.adaptive";
version = "19.0.3";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.adaptive";
rev = "${version}-${rel}";
sha256 = "sha256-YYIPPxM8zVIugqLz0YntVZt1N+dReH+7V1Lkeif2wIY=";
};
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;
};
}

View file

@ -0,0 +1,24 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, kodi, bzip2, zlib }:
buildKodiBinaryAddon rec {
pname = "inputstream-ffmpegdirect";
namespace = "inputstream.ffmpegdirect";
version = "19.0.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.ffmpegdirect";
rev = "${version}-${rel}";
sha256 = "sha256-yVMo3cRsIww1y0jGrqRag2Bc1x98+e86AHlnY1O9klE=";
};
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;
};
}

View file

@ -0,0 +1,24 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, openssl, rtmpdump, zlib }:
buildKodiBinaryAddon rec {
pname = "inputstream-rtmp";
namespace = "inputstream.rtmp";
version = "19.0.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = "inputstream.rtmp";
rev = "${version}-${rel}";
sha256 = "sha256-BNc9HJ4Yq1WTxTr7AUHBB9yDz8oefy2EtFRwVYVGcaY=";
};
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;
};
}

View file

@ -0,0 +1,25 @@
{ lib, buildKodiAddon, fetchzip, addonUpdateScript }:
buildKodiAddon rec {
pname = "inputstreamhelper";
namespace = "script.module.inputstreamhelper";
version = "0.5.10+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "FcOktwtOT7kDM+3y9qPDk3xU1qVeCduyAdUzebtJzv4=";
};
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;
};
}

View file

@ -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.7";
src = fetchFromGitHub {
owner = "jellyfin";
repo = "jellyfin-kodi";
rev = "v${version}";
sha256 = "06glhnpayldficvvhlkbxg7zizl2wqms66fnc3p63nm3y7mqa9dd";
};
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;
};
}

View file

@ -0,0 +1,22 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, tinyxml, udev }:
buildKodiBinaryAddon rec {
pname = namespace;
namespace = "peripheral.joystick";
version = "1.7.1";
src = fetchFromGitHub {
owner = "xbmc";
repo = namespace;
rev = "${version}-${rel}";
sha256 = "1dhj4afr9kj938xx70fq5r409mz6lbw4n581ljvdjj9lq7akc914";
};
extraBuildInputs = [ tinyxml udev ];
meta = with lib; {
description = "Binary addon for raw joystick input.";
platforms = platforms.all;
license = licenses.gpl2Only;
maintainers = teams.kodi.members;
};
}

View file

@ -0,0 +1,24 @@
{ lib, addonDir, buildKodiAddon, fetchzip, defusedxml, kodi-six }:
buildKodiAddon rec {
pname = "keymap";
namespace = "script.keymap";
version = "1.1.3+matrix.1";
src = fetchzip {
url = "https://mirrors.kodi.tv/addons/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "1icrailzpf60nw62xd0khqdp66dnr473m2aa9wzpmkk3qj1ay6jv";
};
propagatedBuildInputs = [
defusedxml
kodi-six
];
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;
};
}

View file

@ -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 ];
}

View file

@ -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/matrix/${namespace}/${namespace}-${version}.zip";
sha256 = "14m232p9hx925pbk8knsg994m1nbpa5278zmcrnfblh4z84gjv4x";
};
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;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, genesis-plus-gx }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-genplus";
namespace = "game.libretro.genplus";
version = "1.7.4.31";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.genplus";
rev = "${version}-${rel}";
sha256 = "0lcii32wzpswjjkwhv250l238g31akr66dhkbv8gj4v1i4z7hry8";
};
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;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, mgba }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-mgba";
namespace = "game.libretro.mgba";
version = "0.9.2.31";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.mgba";
rev = "${version}-${rel}";
sha256 = "sha256-eZLuNhLwMTtzpLGkymc9cLC83FQJWZ2ZT0iyz4sY4EA=";
};
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;
};
}

View file

@ -0,0 +1,31 @@
{ lib, rel, buildKodiBinaryAddon, fetchFromGitHub, libretro, snes9x }:
buildKodiBinaryAddon rec {
pname = "kodi-libretro-snes9x";
namespace = "game.libretro.snes9x";
version = "1.60.0.29";
src = fetchFromGitHub {
owner = "kodi-game";
repo = "game.libretro.snes9x";
rev = "${version}-${rel}";
sha256 = "1wyfkg4fncc604alnbaqk92fi1h80n7bwiqfkb8479x5517byab1";
};
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;
};
}

Some files were not shown because too many files have changed in this diff Show more