Add sendspin-cli package with Python dependencies
Integrate sendspin-cli as a custom package using python3.withPackages. Packages aiosendspin from GitHub since it's only available in nixpkgs-unstable. Includes all required dependencies: aiohttp, av, numpy, qrcode, readchar, rich, sounddevice, and native libraries (portaudio, ffmpeg). Adds uv2nix flake inputs for future migration when sendspin-cli adds a uv.lock file.
This commit is contained in:
91
packages/sendspin-cli/default.nix
Normal file
91
packages/sendspin-cli/default.nix
Normal file
@@ -0,0 +1,91 @@
|
||||
{ pkgs
|
||||
, lib
|
||||
, fetchFromGitHub
|
||||
, uv2nix ? null
|
||||
, pyproject-nix ? null
|
||||
, pyproject-build-systems ? null
|
||||
}:
|
||||
|
||||
# Simple package build
|
||||
# Note: uv2nix would be ideal but requires uv.lock which sendspin-cli doesn't have yet
|
||||
let
|
||||
# Package aiosendspin from GitHub since it's only in nixpkgs-unstable
|
||||
aiosendspin = pkgs.python312Packages.buildPythonPackage rec {
|
||||
pname = "aiosendspin";
|
||||
version = "1.2.0";
|
||||
pyproject = true;
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Sendspin";
|
||||
repo = "aiosendspin";
|
||||
rev = version;
|
||||
sha256 = "sha256-3vTEfXeFqouPswRKST/9U7yg9ah7J9m2KAMoxaBZNR0=";
|
||||
};
|
||||
|
||||
build-system = with pkgs.python312Packages; [
|
||||
hatchling
|
||||
setuptools
|
||||
];
|
||||
|
||||
dependencies = with pkgs.python312Packages; [
|
||||
aiohttp
|
||||
av
|
||||
mashumaro
|
||||
orjson
|
||||
pillow
|
||||
zeroconf
|
||||
];
|
||||
|
||||
pythonImportsCheck = [ "aiosendspin" ];
|
||||
|
||||
meta = {
|
||||
description = "Async Python implementation of the Sendspin Protocol";
|
||||
homepage = "https://github.com/Sendspin-Protocol/aiosendspin";
|
||||
license = lib.licenses.asl20;
|
||||
};
|
||||
};
|
||||
|
||||
python = pkgs.python312.withPackages (ps: with ps; [
|
||||
# Core dependencies from pyproject.toml
|
||||
aiosendspin
|
||||
av
|
||||
numpy
|
||||
qrcode
|
||||
readchar
|
||||
rich
|
||||
sounddevice
|
||||
setuptools
|
||||
]);
|
||||
in
|
||||
pkgs.stdenv.mkDerivation rec {
|
||||
pname = "sendspin-cli";
|
||||
version = "0.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Sendspin";
|
||||
repo = "sendspin-cli";
|
||||
rev = "main";
|
||||
sha256 = "sha256-z8ieaDHv4C6WNLpPGybhcfB+E6Jj/rCc7zSRpL6vdk0=";
|
||||
};
|
||||
|
||||
buildInputs = [ python pkgs.portaudio pkgs.ffmpeg ];
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin $out/lib
|
||||
cp -r sendspin $out/lib/
|
||||
cat > $out/bin/sendspin <<EOF
|
||||
#!/bin/sh
|
||||
export PYTHONPATH="$out/lib:\$PYTHONPATH"
|
||||
export LD_LIBRARY_PATH="${pkgs.portaudio}/lib:${pkgs.ffmpeg}/lib:\$LD_LIBRARY_PATH"
|
||||
exec ${python}/bin/python3 -m sendspin.cli "\$@"
|
||||
EOF
|
||||
chmod +x $out/bin/sendspin
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Synchronized audio player for Sendspin servers";
|
||||
homepage = "https://github.com/Sendspin/sendspin-cli";
|
||||
license = lib.licenses.asl20;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user