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