195 lines
4.9 KiB
Nix
Raw Permalink Normal View History

2024-12-06 00:41:54 +08:00
{
lib,
fetchFromGitHub,
2025-03-29 18:50:32 +08:00
flutter329,
2024-12-06 00:41:54 +08:00
autoPatchelfHook,
makeDesktopItem,
copyDesktopItems,
alsa-lib,
libepoxy,
libpulseaudio,
libdrm,
2024-12-21 21:30:30 +03:00
libgbm,
2024-12-06 00:41:54 +08:00
buildGoModule,
2024-12-18 01:47:25 +08:00
stdenv,
mpv-unwrapped,
mpv,
mimalloc,
2025-02-08 08:43:58 +08:00
runCommand,
yq,
oneanime,
_experimental-update-script-combinators,
gitUpdater,
2024-12-06 00:41:54 +08:00
}:
2025-02-08 08:43:58 +08:00
2024-12-06 00:41:54 +08:00
let
libopencc = buildGoModule rec {
pname = "libopencc";
version = "1.0.0";
src = fetchFromGitHub {
owner = "Predidit";
repo = "open_chinese_convert_bridge";
2024-12-18 01:47:25 +08:00
tag = version;
2024-12-06 00:41:54 +08:00
hash = "sha256-kC5+rIBOcwn9POvQlKEzuYKKcbhuqVs+pFd4JSFgINQ=";
};
vendorHash = "sha256-ADODygC9VRCdeuxnkK4396yBny/ClRUdG3zAujPzpOM=";
buildPhase = ''
runHook preBuild
go build -buildmode=c-shared -o ./libopencc.so
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -Dm0755 ./libopencc.so $out/lib/libopencc.so
runHook postInstall
'';
meta = {
homepage = "https://github.com/Predidit/open_chinese_convert_bridge";
license = with lib.licenses; [ gpl3Plus ];
};
};
in
2025-03-29 18:50:32 +08:00
flutter329.buildFlutterApplication rec {
2024-12-06 00:41:54 +08:00
pname = "oneanime";
2025-06-12 16:38:50 +08:00
version = "1.4.1";
2024-12-06 00:41:54 +08:00
src = fetchFromGitHub {
owner = "Predidit";
repo = "oneAnime";
2024-12-18 01:47:25 +08:00
tag = version;
2025-06-12 16:38:50 +08:00
hash = "sha256-VZdqbdKxzfGlS27WUSvSR2x7wU8uYMkWRU9QvxW22uQ=";
2024-12-06 00:41:54 +08:00
};
pubspecLock = lib.importJSON ./pubspec.lock.json;
2025-02-08 08:43:58 +08:00
gitHashes =
let
2025-03-29 18:50:32 +08:00
media_kit-hash = "sha256-NTnEmU873mzB9YuD6hhRXKfF1WWGPjqvmvAH5ULayxI=";
2025-02-08 08:43:58 +08:00
in
{
flutter_open_chinese_convert = "sha256-uRPBBB5RUd8fiFaM8dg9Th2tvQYwnbsQrsiDSPMm5kk=";
media_kit = media_kit-hash;
media_kit_libs_android_video = media_kit-hash;
media_kit_libs_ios_video = media_kit-hash;
media_kit_libs_linux = media_kit-hash;
media_kit_libs_macos_video = media_kit-hash;
media_kit_libs_video = media_kit-hash;
media_kit_libs_windows_video = media_kit-hash;
media_kit_video = media_kit-hash;
};
2024-12-18 01:47:25 +08:00
customSourceBuilders = {
# unofficial media_kit_libs_linux
media_kit_libs_linux =
{ version, src, ... }:
stdenv.mkDerivation rec {
pname = "media_kit_libs_linux";
inherit version src;
inherit (src) passthru;
postPatch = ''
sed -i '/set(MIMALLOC "mimalloc-/,/add_custom_target/d' libs/linux/media_kit_libs_linux/linux/CMakeLists.txt
sed -i '/set(PLUGIN_NAME "media_kit_libs_linux_plugin")/i add_custom_target("MIMALLOC_TARGET" ALL DEPENDS ${mimalloc}/lib/mimalloc.o)' libs/linux/media_kit_libs_linux/linux/CMakeLists.txt
'';
installPhase = ''
runHook preInstall
cp -r . $out
runHook postInstall
'';
};
# unofficial media_kit_video
media_kit_video =
{ version, src, ... }:
stdenv.mkDerivation rec {
pname = "media_kit_video";
inherit version src;
inherit (src) passthru;
postPatch = ''
sed -i '/set(LIBMPV_ZIP_URL/,/if(MEDIA_KIT_LIBS_AVAILABLE)/{//!d; /set(LIBMPV_ZIP_URL/d}' media_kit_video/linux/CMakeLists.txt
sed -i '/if(MEDIA_KIT_LIBS_AVAILABLE)/i set(LIBMPV_HEADER_UNZIP_DIR "${mpv-unwrapped.dev}/include/mpv")' media_kit_video/linux/CMakeLists.txt
sed -i '/if(MEDIA_KIT_LIBS_AVAILABLE)/i set(LIBMPV_PATH "${mpv}/lib")' media_kit_video/linux/CMakeLists.txt
sed -i '/if(MEDIA_KIT_LIBS_AVAILABLE)/i set(LIBMPV_UNZIP_DIR "${mpv}/lib")' media_kit_video/linux/CMakeLists.txt
'';
installPhase = ''
runHook preInstall
cp -r . $out
runHook postInstall
'';
};
};
2024-12-06 00:41:54 +08:00
desktopItems = [
(makeDesktopItem {
name = "oneanime";
exec = "oneanime";
icon = "oneanime";
desktopName = "oneAnime";
})
];
nativeBuildInputs = [
autoPatchelfHook
copyDesktopItems
];
buildInputs = [
alsa-lib
libepoxy
libpulseaudio
libdrm
2024-12-21 21:30:30 +03:00
libgbm
2024-12-18 01:47:25 +08:00
mpv
2024-12-06 00:41:54 +08:00
];
postPatch = ''
substituteInPlace lib/pages/init_page.dart \
--replace-fail "lib/opencc.so" "${libopencc}/lib/libopencc.so"
'';
postInstall = ''
2025-02-08 08:43:58 +08:00
ln -snf ${mpv}/lib/libmpv.so.2 $out/app/oneanime/lib/libmpv.so.2
install -Dm0644 assets/images/logo/logo_android_2.png $out/share/pixmaps/oneanime.png
2024-12-06 00:41:54 +08:00
'';
2025-02-08 08:43:58 +08:00
passthru = {
pubspecSource =
runCommand "pubspec.lock.json"
{
nativeBuildInputs = [ yq ];
inherit (oneanime) src;
}
''
cat $src/pubspec.lock | yq > $out
'';
updateScript = _experimental-update-script-combinators.sequence [
(gitUpdater { })
(_experimental-update-script-combinators.copyAttrOutputToFile "oneanime.pubspecSource" ./pubspec.lock.json)
];
};
2024-12-06 00:41:54 +08:00
meta = {
description = "Anime1 third-party client with bullet screen";
homepage = "https://github.com/Predidit/oneAnime";
mainProgram = "oneanime";
license = with lib.licenses; [ gpl3Plus ];
maintainers = with lib.maintainers; [ ];
2024-12-18 01:47:25 +08:00
platforms = lib.platforms.linux;
2024-12-06 00:41:54 +08:00
};
}