slint-lsp: 1.9.1 -> 1.9.2 (#375714)
[NixPkgs.git] / pkgs / applications / audio / quodlibet / default.nix
blobee2b4f8a842bd0b423f82f4e6f89f3cb267ac36e
2   lib,
3   fetchFromGitHub,
4   tag ? "",
6   # build time
7   gettext,
8   gobject-introspection,
9   wrapGAppsHook3,
11   # runtime
12   adwaita-icon-theme,
13   gdk-pixbuf,
14   glib,
15   glib-networking,
16   gtk3,
17   gtksourceview,
18   kakasi,
19   keybinder3,
20   libappindicator-gtk3,
21   libmodplug,
22   librsvg,
23   libsoup_3,
25   # optional features
26   withDbusPython ? false,
27   withMusicBrainzNgs ? false,
28   withPahoMqtt ? false,
29   withPypresence ? false,
30   withSoco ? false,
32   # backends
33   withGstPlugins ? withGstreamerBackend,
34   withGstreamerBackend ? true,
35   gst_all_1,
36   withXineBackend ? true,
37   xine-lib,
39   # tests
40   dbus,
41   glibcLocales,
42   hicolor-icon-theme,
43   python3,
44   xvfb-run,
47 python3.pkgs.buildPythonApplication {
48   pname = "quodlibet${tag}";
49   version = "4.6.0-unstable-2024-08-08";
50   pyproject = true;
52   outputs = [
53     "out"
54     "doc"
55   ];
57   src = fetchFromGitHub {
58     owner = "quodlibet";
59     repo = "quodlibet";
60     rev = "3dcf31dfc8db9806d1f73a47fdabc950d35ded1d";
61     hash = "sha256-8qWuxTvMF6ksDkbZ6wRLPCJK1cSqgGMPac/ht6qVpnA=";
62   };
64   patches = [ ./fix-gdist-python-3.12.patch ];
66   build-system = [ python3.pkgs.setuptools ];
68   nativeBuildInputs =
69     [
70       gettext
71       gobject-introspection
72       wrapGAppsHook3
73     ]
74     ++ (with python3.pkgs; [
75       sphinx-rtd-theme
76       sphinxHook
77     ]);
79   buildInputs =
80     [
81       adwaita-icon-theme
82       gdk-pixbuf
83       glib
84       glib-networking
85       gtk3
86       gtksourceview
87       kakasi
88       keybinder3
89       libappindicator-gtk3
90       libmodplug
91       libsoup_3
92     ]
93     ++ lib.optionals (withXineBackend) [ xine-lib ]
94     ++ lib.optionals (withGstreamerBackend) (
95       with gst_all_1;
96       [
97         gst-plugins-base
98         gstreamer
99       ]
100       ++ lib.optionals (withGstPlugins) [
101         gst-libav
102         gst-plugins-bad
103         gst-plugins-good
104         gst-plugins-ugly
105       ]
106     );
108   dependencies =
109     with python3.pkgs;
110     [
111       feedparser
112       gst-python
113       mutagen
114       pycairo
115       pygobject3
116     ]
117     ++ lib.optionals withDbusPython [ dbus-python ]
118     ++ lib.optionals withMusicBrainzNgs [ musicbrainzngs ]
119     ++ lib.optionals withPahoMqtt [ paho-mqtt ]
120     ++ lib.optionals withPypresence [ pypresence ]
121     ++ lib.optionals withSoco [ soco ];
123   nativeCheckInputs =
124     [
125       dbus
126       gdk-pixbuf
127       glibcLocales
128       hicolor-icon-theme
129       xvfb-run
130     ]
131     ++ (with python3.pkgs; [
132       polib
133       pytest
134       pytest-xdist
135     ]);
137   pytestFlags =
138     [
139       # missing translation strings in potfiles
140       "--deselect=tests/test_po.py::TPOTFILESIN::test_missing"
141       # require networking
142       "--deselect=tests/plugin/test_covers.py::test_live_cover_download"
143       "--deselect=tests/test_browsers_iradio.py::TInternetRadio::test_click_add_station"
144       # upstream does actually not enforce source code linting
145       "--ignore=tests/quality"
146     ]
147     ++ lib.optionals (withXineBackend || !withGstPlugins) [
148       "--ignore=tests/plugin/test_replaygain.py"
149     ];
151   env.LC_ALL = "en_US.UTF-8";
153   preCheck = ''
154     export GDK_PIXBUF_MODULE_FILE=${librsvg}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache
155     export HOME=$(mktemp -d)
156     export XDG_DATA_DIRS="$out/share:${gtk3}/share/gsettings-schemas/${gtk3.name}:$XDG_ICON_DIRS:$XDG_DATA_DIRS"
157   '';
159   checkPhase = ''
160     runHook preCheck
162     xvfb-run -s '-screen 0 1920x1080x24' \
163       dbus-run-session --config-file=${dbus}/share/dbus-1/session.conf \
164       pytest $pytestFlags
166     runHook postCheck
167   '';
169   preFixup = lib.optionalString (kakasi != null) ''
170     gappsWrapperArgs+=(--prefix PATH : ${kakasi}/bin)
171   '';
173   meta = with lib; {
174     description = "GTK-based audio player written in Python, using the Mutagen tagging library";
175     longDescription = ''
176       Quod Libet is a GTK-based audio player written in Python, using
177       the Mutagen tagging library. It's designed around the idea that
178       you know how to organize your music better than we do. It lets
179       you make playlists based on regular expressions (don't worry,
180       regular searches work too). It lets you display and edit any
181       tags you want in the file. And it lets you do this for all the
182       file formats it supports. Quod Libet easily scales to libraries
183       of thousands (or even tens of thousands) of songs. It also
184       supports most of the features you expect from a modern media
185       player, like Unicode support, tag editing, Replay Gain, podcasts
186       & internet radio, and all major audio formats.
187     '';
188     homepage = "https://quodlibet.readthedocs.io/en/latest";
189     license = licenses.gpl2Plus;
190     maintainers = with maintainers; [
191       coroa
192       pbogdan
193     ];
194   };