nixos/doh-server: init
[NixPkgs.git] / pkgs / applications / audio / cmus / default.nix
blobd4fef58281d0123defc581b2aa15432c128d5fd5
2   config,
3   lib,
4   stdenv,
5   fetchFromGitHub,
6   ncurses,
7   pkg-config,
8   libiconv,
9   CoreAudio,
10   AudioUnit,
11   VideoToolbox,
13   alsaSupport ? stdenv.hostPlatform.isLinux,
14   alsa-lib ? null,
15   # simple fallback for everyone else
16   aoSupport ? !stdenv.hostPlatform.isLinux,
17   libao ? null,
18   jackSupport ? false,
19   libjack ? null,
20   samplerateSupport ? jackSupport,
21   libsamplerate ? null,
22   ossSupport ? false,
23   alsa-oss ? null,
24   pulseaudioSupport ? config.pulseaudio or false,
25   libpulseaudio ? null,
26   sndioSupport ? false,
27   sndio ? null,
28   mprisSupport ? stdenv.hostPlatform.isLinux,
29   systemd ? null,
31   # TODO: add these
32   #, artsSupport
33   #, roarSupport
34   #, sunSupport
35   #, waveoutSupport
37   cddbSupport ? true,
38   libcddb ? null,
39   cdioSupport ? true,
40   libcdio ? null,
41   libcdio-paranoia ? null,
42   cueSupport ? true,
43   libcue ? null,
44   discidSupport ? false,
45   libdiscid ? null,
46   ffmpegSupport ? true,
47   ffmpeg ? null,
48   flacSupport ? true,
49   flac ? null,
50   madSupport ? true,
51   libmad ? null,
52   mikmodSupport ? true,
53   libmikmod ? null,
54   modplugSupport ? true,
55   libmodplug ? null,
56   mpcSupport ? true,
57   libmpcdec ? null,
58   tremorSupport ? false,
59   tremor ? null,
60   vorbisSupport ? true,
61   libvorbis ? null,
62   wavpackSupport ? true,
63   wavpack ? null,
64   opusSupport ? true,
65   opusfile ? null,
67   aacSupport ? false,
68   faad2 ? null, # already handled by ffmpeg
69   mp4Support ? false,
70   mp4v2 ? null, # ffmpeg does support mp4 better
72 # not in nixpkgs
73 #, vtxSupport ? true, libayemu ? null
76 assert samplerateSupport -> jackSupport;
78 # vorbis and tremor are mutually exclusive
79 assert vorbisSupport -> !tremorSupport;
80 assert tremorSupport -> !vorbisSupport;
82 let
84   mkFlag =
85     b: f: dep:
86     if b then
87       {
88         flags = [ f ];
89         deps = [ dep ];
90       }
91     else
92       {
93         flags = [ ];
94         deps = [ ];
95       };
97   opts = [
98     # Audio output
99     (mkFlag alsaSupport "CONFIG_ALSA=y" alsa-lib)
100     (mkFlag aoSupport "CONFIG_AO=y" libao)
101     (mkFlag jackSupport "CONFIG_JACK=y" libjack)
102     (mkFlag samplerateSupport "CONFIG_SAMPLERATE=y" libsamplerate)
103     (mkFlag ossSupport "CONFIG_OSS=y" alsa-oss)
104     (mkFlag pulseaudioSupport "CONFIG_PULSE=y" libpulseaudio)
105     (mkFlag sndioSupport "CONFIG_SNDIO=y" sndio)
106     (mkFlag mprisSupport "CONFIG_MPRIS=y" systemd)
108     #(mkFlag artsSupport      "CONFIG_ARTS=y")
109     #(mkFlag roarSupport      "CONFIG_ROAR=y")
110     #(mkFlag sunSupport       "CONFIG_SUN=y")
111     #(mkFlag waveoutSupport   "CONFIG_WAVEOUT=y")
113     # Input file formats
114     (mkFlag cddbSupport "CONFIG_CDDB=y" libcddb)
115     (mkFlag cdioSupport "CONFIG_CDIO=y" [
116       libcdio
117       libcdio-paranoia
118     ])
119     (mkFlag cueSupport "CONFIG_CUE=y" libcue)
120     (mkFlag discidSupport "CONFIG_DISCID=y" libdiscid)
121     (mkFlag ffmpegSupport "CONFIG_FFMPEG=y" ffmpeg)
122     (mkFlag flacSupport "CONFIG_FLAC=y" flac)
123     (mkFlag madSupport "CONFIG_MAD=y" libmad)
124     (mkFlag mikmodSupport "CONFIG_MIKMOD=y" libmikmod)
125     (mkFlag modplugSupport "CONFIG_MODPLUG=y" libmodplug)
126     (mkFlag mpcSupport "CONFIG_MPC=y" libmpcdec)
127     (mkFlag tremorSupport "CONFIG_TREMOR=y" tremor)
128     (mkFlag vorbisSupport "CONFIG_VORBIS=y" libvorbis)
129     (mkFlag wavpackSupport "CONFIG_WAVPACK=y" wavpack)
130     (mkFlag opusSupport "CONFIG_OPUS=y" opusfile)
132     (mkFlag mp4Support "CONFIG_MP4=y" mp4v2)
133     (mkFlag aacSupport "CONFIG_AAC=y" faad2)
135     #(mkFlag vtxSupport    "CONFIG_VTX=y"     libayemu)
136   ];
139 stdenv.mkDerivation rec {
140   pname = "cmus";
141   version = "2.12.0";
143   src = fetchFromGitHub {
144     owner = "cmus";
145     repo = "cmus";
146     rev = "v${version}";
147     hash = "sha256-8hgibGtkiwzenMI9YImIApRmw2EzTwE6RhglALpUkp4=";
148   };
150   nativeBuildInputs = [ pkg-config ];
151   buildInputs =
152     [ ncurses ]
153     ++ lib.optionals stdenv.hostPlatform.isDarwin [
154       libiconv
155       CoreAudio
156       AudioUnit
157       VideoToolbox
158     ]
159     ++ lib.flatten (lib.concatMap (a: a.deps) opts);
161   prefixKey = "prefix=";
163   configureFlags = [
164     "CONFIG_WAV=y"
165     "HOSTCC=${stdenv.cc.targetPrefix}cc"
166   ] ++ lib.concatMap (a: a.flags) opts;
168   makeFlags = [ "LD=$(CC)" ];
170   meta = with lib; {
171     description = "Small, fast and powerful console music player for Linux and *BSD";
172     homepage = "https://cmus.github.io/";
173     license = licenses.gpl2;
174     maintainers = [ maintainers.oxij ];
175     platforms = platforms.linux ++ platforms.darwin;
176   };