@ -1,11 +1,58 @@
{ stdenv , lib , browser , makeDesktopItem , makeWrapper , plugins , gst_plugins , libs , gtk_modules
, browserName , desktopName , nameSuffix , icon , libtrick ? true
{ stdenv , lib , makeDesktopItem , makeWrapper , config
## various stuff that can be plugged in
, gnash , flashplayer , hal-flash
, MPlayerPlugin , gecko_mediaplayer , gst_all , xorg , libpulseaudio , libcanberra
, supportsJDK , jrePlugin , icedtea_web
, trezor-bridge , bluejeans , djview4
, google_talk_plugin , fribid , gnome3 /* . g n o m e _ s h e l l */
} :
## configurability of the wrapper itself
browser :
{ browserName ? ( lib . head ( lib . splitString " - " browser . name ) ) # name of the executable
, name ? ( browserName + " - " + ( builtins . parseDrvName browser . name ) . version )
, desktopName ? # browserName with first letter capitalized
( lib . toUpper ( lib . substring 0 1 browserName ) + lib . substring 1 ( -1 ) browserName )
, nameSuffix ? " "
, icon ? browserName , libtrick ? true
} :
let p = builtins . parseDrvName browser . name ; in
let
cfg = stdenv . lib . attrByPath [ browserName ] { } config ;
enableAdobeFlash = cfg . enableAdobeFlash or false ;
enableGnash = cfg . enableGnash or false ;
jre = cfg . jre or false ;
icedtea = cfg . icedtea or false ;
plugins =
assert ! ( enableGnash && enableAdobeFlash ) ;
assert ! ( jre && icedtea ) ;
( [ ]
++ lib . optional enableGnash gnash
++ lib . optional enableAdobeFlash flashplayer
++ lib . optional ( cfg . enableDjvu or false ) ( djview4 )
++ lib . optional ( cfg . enableMPlayer or false ) ( MPlayerPlugin browser )
++ lib . optional ( cfg . enableGeckoMediaPlayer or false ) gecko_mediaplayer
++ lib . optional ( supportsJDK && jre && jrePlugin ? mozillaPlugin ) jrePlugin
++ lib . optional icedtea icedtea_web
++ lib . optional ( cfg . enableGoogleTalkPlugin or false ) google_talk_plugin
++ lib . optional ( cfg . enableFriBIDPlugin or false ) fribid
++ lib . optional ( cfg . enableGnomeExtensions or false ) gnome3 . gnome_shell
++ lib . optional ( cfg . enableTrezor or false ) trezor-bridge
++ lib . optional ( cfg . enableBluejeans or false ) bluejeans
) ;
libs = [ gst_all . gstreamer gst_all . gst-plugins-base ]
++ lib . optionals ( cfg . enableQuakeLive or false )
( with xorg ; [ stdenv . cc libX11 libXxf86dga libXxf86vm libXext libXt alsaLib zlib ] )
++ lib . optional ( enableAdobeFlash && ( cfg . enableAdobeFlashDRM or false ) ) hal-flash
++ lib . optional ( config . pulseaudio or false ) libpulseaudio ;
gst-plugins = with gst_all ; [ gst-plugins-base gst-plugins-good gst-plugins-bad gst-plugins-ugly gst-ffmpeg ] ;
gtk_modules = [ libcanberra ] ;
in
stdenv . mkDerivation {
name = " ${ p . name } - w i t h - p l u g i n s - ${ p . version } " ;
inherit name ;
desktopItem = makeDesktopItem {
name = browserName ;
@ -26,7 +73,7 @@ stdenv.mkDerivation {
] ;
} ;
buildInputs = [ makeWrapper ] ++ gst_ plugins ;
buildInputs = [ makeWrapper ] ++ gst- plugins ;
buildCommand = ''
if [ ! - x " ${ browser } / b i n / ${ browserName } " ]
@ -82,11 +129,15 @@ stdenv.mkDerivation {
libs = map ( x : x + " / l i b " ) libs ++ map ( x : x + " / l i b 6 4 " ) libs ;
gtk_modules = map ( x : x + x . gtkModule ) gtk_modules ;
meta = {
passthru = { unwrapped = browser ; } ;
meta = browser . meta // {
description =
browser . meta . description
+ " ( w i t h p l u g i n s : "
+ lib . concatStrings ( lib . intersperse " , " ( map ( x : x . name ) plugins ) )
+ " ) " ;
hydraPlatforms = [ ] ;
priority = ( browser . meta . priority or 0 ) - 1 ; # prefer wrapper over the package
} ;
}