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:
@@ -1,7 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
{ pkgs, uv2nix ? null, pyproject-nix ? null, pyproject-build-systems ? null, ... }:
|
||||
{
|
||||
vulkanHDRLayer = pkgs.callPackage ./vulkan-hdr-layer {};
|
||||
tea-rbw = pkgs.callPackage ./tea-rbw {};
|
||||
app-launcher-server = pkgs.callPackage ./app-launcher-server {};
|
||||
claude-code = pkgs.callPackage ./claude-code {};
|
||||
sendspin-cli = pkgs.callPackage ./sendspin-cli { inherit uv2nix pyproject-nix pyproject-build-systems; };
|
||||
}
|
||||
|
||||
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