]> git.immae.eu Git - perso/Immae/Config/Nix.git/blame - pkgs/mpd_0_21/default.nix
Upgrade nixos
[perso/Immae/Config/Nix.git] / pkgs / mpd_0_21 / default.nix
CommitLineData
65e64925
IB
1{ stdenv, fetchFromGitHub, meson, ninja, pkgconfig, glib, systemd, boost, darwin
2# Inputs
3, curl, libmms, libnfs, samba
4# Archive support
5, bzip2, zziplib
6# Codecs
7, audiofile, faad2, ffmpeg, flac, fluidsynth, game-music-emu
8, libmad, libmikmod, mpg123, libopus, libvorbis, lame
9# Filters
10, libsamplerate
11# Outputs
12, alsaLib, libjack2, libpulseaudio, libshout
13# Misc
14, icu, sqlite, avahi, dbus, pcre, libgcrypt, expat
15# Services
16, yajl
17# Client support
18, mpd_clientlib
19# Tag support
20, libid3tag
21}:
22
23let
65e64925 24 lib = stdenv.lib;
65e64925
IB
25
26 featureDependencies = {
27 # Storage plugins
28 udisks = [ dbus ];
29 webdav = [ curl expat ];
30 # Input plugins
31 curl = [ curl ];
32 mms = [ libmms ];
33 nfs = [ libnfs ];
34 smbclient = [ samba ];
35 # Archive support
36 bzip2 = [ bzip2 ];
37 zzip = [ zziplib ];
38 # Decoder plugins
39 audiofile = [ audiofile ];
40 faad = [ faad2 ];
41 ffmpeg = [ ffmpeg ];
42 flac = [ flac ];
43 fluidsynth = [ fluidsynth ];
44 gme = [ game-music-emu ];
45 mad = [ libmad ];
46 mikmod = [ libmikmod ];
47 mpg123 = [ mpg123 ];
48 opus = [ libopus ];
49 vorbis = [ libvorbis ];
50 # Encoder plugins
51 vorbisenc = [ libvorbis ];
52 lame = [ lame ];
53 # Filter plugins
54 libsamplerate = [ libsamplerate ];
55 # Output plugins
56 alsa = [ alsaLib ];
57 jack = [ libjack2 ];
58 pulse = [ libpulseaudio ];
59 shout = [ libshout ];
60 # Commercial services
61 qobuz = [ curl libgcrypt yajl ];
62 soundcloud = [ curl yajl ];
63 tidal = [ curl yajl ];
64 # Client support
65 libmpdclient = [ mpd_clientlib ];
66 # Tag support
67 id3tag = [ libid3tag ];
68 # Misc
69 dbus = [ dbus ];
70 expat = [ expat ];
71 icu = [ icu ];
72 pcre = [ pcre ];
73 sqlite = [ sqlite ];
5400b9b6 74 syslog = [ ];
65e64925
IB
75 systemd = [ systemd ];
76 yajl = [ yajl ];
77 zeroconf = [ avahi dbus ];
78 };
79
80 run = { features ? null }:
81 let
65e64925
IB
82 # Disable platform specific features if needed
83 # using libmad to decode mp3 files on darwin is causing a segfault -- there
84 # is probably a solution, but I'm disabling it for now
5400b9b6
IB
85 platformMask = lib.optionals stdenv.isDarwin [ "mad" "pulse" "jack" "nfs" "smbclient" ]
86 ++ lib.optionals (!stdenv.isLinux) [ "alsa" "systemd" "syslog" ];
87
88 knownFeatures = builtins.attrNames featureDependencies;
89 platformFeatures = lib.subtractLists platformMask knownFeatures;
90
91 features_ = if (features == null )
92 then platformFeatures
93 else
94 let unknown = lib.subtractLists knownFeatures features; in
95 if (unknown != [])
96 then throw "Unknown feature(s): ${lib.concatStringsSep " " unknown}"
97 else
98 let unsupported = lib.subtractLists platformFeatures features; in
99 if (unsupported != [])
100 then throw "Feature(s) ${lib.concatStringsSep " " unsupported} are not supported on ${stdenv.hostPlatform.system}"
101 else features;
65e64925
IB
102
103 in stdenv.mkDerivation rec {
5400b9b6
IB
104 pname = "mpd";
105 version = "0.21.21";
65e64925
IB
106
107 src = fetchFromGitHub {
108 owner = "MusicPlayerDaemon";
109 repo = "MPD";
110 rev = "v${version}";
5400b9b6 111 sha256 = "0ysyjlmmfm1y5jqyv83bs9p7zqr9pgj1hmdq2b7kx9kridclbnng";
65e64925
IB
112 };
113
114 buildInputs = [ glib boost ]
115 ++ (lib.concatLists (lib.attrVals features_ featureDependencies))
5400b9b6 116 ++ lib.optionals stdenv.isDarwin [ darwin.apple_sdk.frameworks.AudioToolbox darwin.apple_sdk.frameworks.AudioUnit ];
65e64925
IB
117
118 nativeBuildInputs = [ meson ninja pkgconfig ];
119
120 enableParallelBuilding = true;
121
5400b9b6 122 mesonAutoFeatures = "disabled";
65e64925 123 mesonFlags =
5400b9b6
IB
124 map (x: "-D${x}=enabled") features_
125 ++ map (x: "-D${x}=disabled") (lib.subtractLists features_ knownFeatures)
126 ++ lib.optional (builtins.elem "zeroconf" features_)
65e64925 127 "-Dzeroconf=avahi"
5400b9b6 128 ++ lib.optional (builtins.elem "systemd" features_)
65e64925
IB
129 "-Dsystemd_system_unit_dir=etc/systemd/system";
130
131 meta = with stdenv.lib; {
132 description = "A flexible, powerful daemon for playing music";
5400b9b6 133 homepage = "https://www.musicpd.org/";
65e64925 134 license = licenses.gpl2;
5400b9b6 135 maintainers = with maintainers; [ astsmtl ehmry fpletz tobim ];
65e64925
IB
136 platforms = platforms.unix;
137
138 longDescription = ''
139 Music Player Daemon (MPD) is a flexible, powerful daemon for playing
140 music. Through plugins and libraries it can play a variety of sound
141 files while being controlled by its network protocol.
142 '';
143 };
144 };
145in
146{
147 mpd = run { };
148 mpd-small = run { features = [
5400b9b6 149 "webdav" "curl" "mms" "bzip2" "zzip"
65e64925 150 "audiofile" "faad" "flac" "gme" "mad"
5400b9b6
IB
151 "mpg123" "opus" "vorbis" "vorbisenc"
152 "lame" "libsamplerate" "shout"
153 "libmpdclient" "id3tag" "expat" "pcre"
154 "yajl" "sqlite"
65e64925 155 "soundcloud" "qobuz" "tidal"
5400b9b6
IB
156 ] ++ lib.optionals stdenv.isLinux [
157 "alsa" "systemd" "syslog"
158 ] ++ lib.optionals (!stdenv.isDarwin) [
159 "mad" "jack" "nfs"
65e64925 160 ]; };
5400b9b6 161 mpdWithFeatures = run;
65e64925 162}