evcc: 0.131.4 -> 0.131.5
[NixPkgs.git] / pkgs / by-name / yt / yt-dlp / package.nix
blobc3149189b538fe002803702df53df1c5acfd7d0d
2   lib,
3   python3Packages,
4   fetchPypi,
5   ffmpeg-headless,
6   rtmpdump,
7   atomicparsley,
8   atomicparsleySupport ? true,
9   ffmpegSupport ? true,
10   rtmpSupport ? true,
11   withAlias ? false, # Provides bin/youtube-dl for backcompat
12   update-python-libraries,
15 python3Packages.buildPythonApplication rec {
16   pname = "yt-dlp";
17   # The websites yt-dlp deals with are a very moving target. That means that
18   # downloads break constantly. Because of that, updates should always be backported
19   # to the latest stable release.
20   version = "2024.11.4";
21   pyproject = true;
23   src = fetchPypi {
24     inherit version;
25     pname = "yt_dlp";
26     hash = "sha256-7SBMG2G8Vj4TREd2bRqzQxc1QHmeE+u5U+iHzn3PaGU=";
27   };
29   build-system = with python3Packages; [
30     hatchling
31   ];
33   # expose optional-dependencies, but provide all features
34   dependencies = lib.flatten (lib.attrValues optional-dependencies);
36   optional-dependencies = {
37     default = with python3Packages; [
38       brotli
39       certifi
40       mutagen
41       pycryptodomex
42       requests
43       urllib3
44       websockets
45     ];
46     curl-cffi = [ python3Packages.curl-cffi ];
47     secretstorage = with python3Packages; [
48       cffi
49       secretstorage
50     ];
51   };
53   pythonRelaxDeps = [ "websockets" ];
55   # Ensure these utilities are available in $PATH:
56   # - ffmpeg: post-processing & transcoding support
57   # - rtmpdump: download files over RTMP
58   # - atomicparsley: embedding thumbnails
59   makeWrapperArgs =
60     let
61       packagesToBinPath =
62         [ ]
63         ++ lib.optional atomicparsleySupport atomicparsley
64         ++ lib.optional ffmpegSupport ffmpeg-headless
65         ++ lib.optional rtmpSupport rtmpdump;
66     in
67     lib.optionals (packagesToBinPath != [ ]) [
68       ''--prefix PATH : "${lib.makeBinPath packagesToBinPath}"''
69     ];
71   setupPyBuildFlags = [
72     "build_lazy_extractors"
73   ];
75   # Requires network
76   doCheck = false;
78   postInstall = lib.optionalString withAlias ''
79     ln -s "$out/bin/yt-dlp" "$out/bin/youtube-dl"
80   '';
82   passthru.updateScript = [
83     update-python-libraries
84     (toString ./.)
85   ];
87   meta = with lib; {
88     homepage = "https://github.com/yt-dlp/yt-dlp/";
89     description = "Command-line tool to download videos from YouTube.com and other sites (youtube-dl fork)";
90     longDescription = ''
91       yt-dlp is a youtube-dl fork based on the now inactive youtube-dlc.
93       youtube-dl is a small, Python-based command-line program
94       to download videos from YouTube.com and a few more sites.
95       youtube-dl is released to the public domain, which means
96       you can modify it, redistribute it or use it however you like.
97     '';
98     changelog = "https://github.com/yt-dlp/yt-dlp/blob/HEAD/Changelog.md";
99     license = licenses.unlicense;
100     maintainers = with maintainers; [
101       mkg20001
102       SuperSandro2000
103     ];
104     mainProgram = "yt-dlp";
105   };