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.
92 lines
2.1 KiB
Nix
92 lines
2.1 KiB
Nix
{ 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;
|
|
};
|
|
}
|