# yt - A fully featured command line YouTube client # # Copyright (C) 2024 Benedikt Peetz # SPDX-License-Identifier: GPL-3.0-or-later # # This file is part of Yt. # # You should have received a copy of the License along with this program. # If not, see . { lib, rustPlatform, installShellFiles, # buildInputs mpv-unwrapped, python3Packages, ffmpeg, openssl, libffi, # NativeBuildInputs makeWrapper, llvmPackages_latest, glibc, sqlite, fd, pkg-config, SDL2, # Passthru tree-sitter-yts, }: rustPlatform.buildRustPackage (finalAttrs: { pname = "yt"; inherit ((builtins.fromTOML (builtins.readFile ../Cargo.toml)).workspace.package) version ; src = lib.cleanSourceWith { src = lib.cleanSource ./..; filter = name: type: (type == "directory") || (builtins.elem (builtins.baseNameOf name) [ "Cargo.toml" "Cargo.lock" "mkdb.sh" "help.str" "raw_error_warning.txt" ]) || (lib.strings.hasSuffix ".rs" (builtins.baseNameOf name)) || (lib.strings.hasSuffix ".h" (builtins.baseNameOf name)) || (lib.strings.hasSuffix ".sql" (builtins.baseNameOf name)); }; nativeBuildInputs = [ installShellFiles makeWrapper sqlite fd pkg-config ]; buildInputs = [ python3Packages.yt-dlp mpv-unwrapped.dev ffmpeg openssl libffi ]; checkInputs = [ # Needed for the tests in `libmpv2` SDL2 ]; env = let clang_version = lib.versions.major llvmPackages_latest.clang-unwrapped.version; in { # Needed for the compile time sqlite checks. DATABASE_URL = "sqlite://database.sqlx"; # Required by yt_dlp FFMPEG_LOCATION = "${lib.getExe ffmpeg}"; # Needed for the libmpv2. C_INCLUDE_PATH = "${glibc.dev}/include"; LIBCLANG_INCLUDE_PATH = "${llvmPackages_latest.clang-unwrapped.lib}/lib/clang/${clang_version}/include"; LIBCLANG_PATH = "${llvmPackages_latest.clang-unwrapped.lib}/lib/libclang.so"; }; doCheck = true; prePatch = '' # Generate the sqlite db, so that we can run the comp-time sqlite checks. bash ./scripts/mkdb.sh ''; passthru = { inherit tree-sitter-yts; }; cargoLock = { lockFile = ../Cargo.lock; outputHashes = { "ruff_python_ast-0.0.0" = "sha256-/CVpNBOBpvQhz7X80nUHC2x7ZxxCJH8O0WAABJKEriA="; "rustpython-0.4.0" = "sha256-hsWqLRiqA0pUNFkHPwvu+Myh5a3p/VXotkPq5ZexqaQ="; "rustpython-doc-0.3.0" = "sha256-34ERuLFKzUD9Xmf1zlafe42GLWZfUlw17ejf/NN6yH4="; }; }; postInstall = '' installShellCompletion --cmd yt \ --bash <(COMPLETE=bash $out/bin/yt) \ --fish <(COMPLETE=fish $out/bin/yt) \ --zsh <(COMPLETE=zsh $out/bin/yt) # NOTE: We cannot clear the path, because we need access to the $EDITOR. <2025-04-04> wrapProgram $out/bin/yt \ --prefix PATH : ${lib.makeBinPath finalAttrs.buildInputs} \ --set YTDLP_NO_PLUGINS 1 ''; })