From 9fbbd3e71f2d7286e9ef1cbdbdea4020bd511308 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Tue, 17 Jun 2025 09:06:36 +0200 Subject: refactor(nix/package): Avoid the duplicated `package` name --- nix/package.nix | 144 ++++++++++++++++++++++++++++++++++++++++++++++++++++ package/package.nix | 144 ---------------------------------------------------- 2 files changed, 144 insertions(+), 144 deletions(-) create mode 100644 nix/package.nix delete mode 100644 package/package.nix diff --git a/nix/package.nix b/nix/package.nix new file mode 100644 index 0000000..f4d6eac --- /dev/null +++ b/nix/package.nix @@ -0,0 +1,144 @@ +# 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, + python3, + 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 = [ + 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 = let + collectDeps = pkg: let + next = pkg.propagatedBuildInputs or []; + in + [pkg] + ++ next + ++ (lib.flatten (builtins.map collectDeps next)); + + loadPythonDep = der: "${der}/lib/python${lib.versions.majorMinor python3.version}/site-packages"; + + pythonPath = builtins.concatStringsSep ":" (lib.lists.unique ( + builtins.map loadPythonDep ( + (collectDeps python3Packages.yt-dlp) + ++ [ + # HACK(@bpeetz): These packages are not picked up in the traversal up top. <2025-06-16> + python3Packages.chardet + ] + ) + )); + in '' + 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 \ + --set PYTHONPATH ${pythonPath} + ''; +}) diff --git a/package/package.nix b/package/package.nix deleted file mode 100644 index f4d6eac..0000000 --- a/package/package.nix +++ /dev/null @@ -1,144 +0,0 @@ -# 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, - python3, - 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 = [ - 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 = let - collectDeps = pkg: let - next = pkg.propagatedBuildInputs or []; - in - [pkg] - ++ next - ++ (lib.flatten (builtins.map collectDeps next)); - - loadPythonDep = der: "${der}/lib/python${lib.versions.majorMinor python3.version}/site-packages"; - - pythonPath = builtins.concatStringsSep ":" (lib.lists.unique ( - builtins.map loadPythonDep ( - (collectDeps python3Packages.yt-dlp) - ++ [ - # HACK(@bpeetz): These packages are not picked up in the traversal up top. <2025-06-16> - python3Packages.chardet - ] - ) - )); - in '' - 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 \ - --set PYTHONPATH ${pythonPath} - ''; -}) -- cgit 1.4.1