python3Packages.pywikibot: init at 9.5.0 (#333068)
[NixPkgs.git] / pkgs / by-name / mu / music-assistant / package.nix
blobaccdd06710cc865231a6c035ae964df8ced2f580
1 { lib
2 , python3
3 , fetchFromGitHub
4 , ffmpeg-headless
5 , nixosTests
6 , substituteAll
7 , providers ? [ ]
8 }:
10 let
11   python = python3.override {
12     self = python;
13     packageOverrides = self: super: {
14       music-assistant-frontend = self.callPackage ./frontend.nix { };
15     };
16   };
18   providerPackages = (import ./providers.nix).providers;
19   providerNames = lib.attrNames providerPackages;
20   providerDependencies = lib.concatMap (provider: (providerPackages.${provider} python.pkgs)) providers;
22   pythonPath = python.pkgs.makePythonPath providerDependencies;
25 python.pkgs.buildPythonApplication rec {
26   pname = "music-assistant";
27   version = "2.3.2";
28   pyproject = true;
30   src = fetchFromGitHub {
31     owner = "music-assistant";
32     repo = "server";
33     rev = "refs/tags/${version}";
34     hash = "sha256-q71LczFsJAvZaWCQg4Lgzg2XX4XDFvA3x255Re00D9Q=";
35   };
37   patches = [
38     (substituteAll {
39       src = ./ffmpeg.patch;
40       ffmpeg = "${lib.getBin ffmpeg-headless}/bin/ffmpeg";
41       ffprobe = "${lib.getBin ffmpeg-headless}/bin/ffprobe";
42     })
43   ];
45   postPatch = ''
46     substituteInPlace pyproject.toml \
47       --replace-fail "0.0.0" "${version}"
48   '';
50   build-system = with python.pkgs; [
51     setuptools
52   ];
54   dependencies = with python.pkgs; [
55     aiohttp
56     mashumaro
57     orjson
58   ] ++ optional-dependencies.server;
60   optional-dependencies = with python.pkgs; {
61     server = [
62       aiodns
63       aiofiles
64       aiohttp
65       aiorun
66       aiosqlite
67       asyncio-throttle
68       brotli
69       certifi
70       colorlog
71       cryptography
72       eyed3
73       faust-cchardet
74       ifaddr
75       mashumaro
76       memory-tempfile
77       music-assistant-frontend
78       orjson
79       pillow
80       python-slugify
81       shortuuid
82       unidecode
83       xmltodict
84       zeroconf
85     ];
86   };
88   nativeCheckInputs = with python.pkgs; [
89     aiojellyfin
90     pytest-aiohttp
91     pytest-cov-stub
92     pytestCheckHook
93     syrupy
94     pytest-timeout
95   ]
96   ++ lib.flatten (lib.attrValues optional-dependencies);
98   pytestFlagsArray = [
99     # blocks in setup
100     "--deselect=tests/server/providers/jellyfin/test_init.py::test_initial_sync"
101   ];
103   pythonImportsCheck = [ "music_assistant" ];
105   passthru = {
106     inherit
107       python
108       pythonPath
109       providerPackages
110       providerNames
111     ;
112     tests = nixosTests.music-assistant;
113   };
115   meta = with lib; {
116     changelog = "https://github.com/music-assistant/server/releases/tag/${version}";
117     description = "Music Assistant is a music library manager for various music sources which can easily stream to a wide range of supported players";
118     longDescription = ''
119       Music Assistant is a free, opensource Media library manager that connects to your streaming services and a wide
120       range of connected speakers. The server is the beating heart, the core of Music Assistant and must run on an
121       always-on device like a Raspberry Pi, a NAS or an Intel NUC or alike.
122     '';
123     homepage = "https://github.com/music-assistant/server";
124     license = licenses.asl20;
125     maintainers = with maintainers; [ hexa ];
126     mainProgram = "mass";
127   };