Merge pull request #112335 from lovesegfault/firefox-no-flash

treewide: cleanup Adobe Flash Player
This commit is contained in:
Bernardo Meurer 2021-02-09 01:35:24 +00:00 committed by GitHub
commit c83a3d6fa7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 41 additions and 463 deletions

View file

@ -138,11 +138,11 @@
</programlisting>
</para>
<para>
For a more useful example, try the following. This configuration only allows unfree packages named flash player and visual studio code:
For a more useful example, try the following. This configuration only allows unfree packages named roon-server and visual studio code:
<programlisting>
{
allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"flashplayer"
"roon-server"
"vscode"
];
}

View file

@ -241,7 +241,7 @@ rec {
/* Return a singleton list or an empty list, depending on a boolean
value. Useful when building lists with optional elements
(e.g. `++ optional (system == "i686-linux") flashplayer').
(e.g. `++ optional (system == "i686-linux") firefox').
Type: optional :: bool -> a -> [a]

View file

@ -479,6 +479,21 @@ self: super:
thinkfan documentation</link> before updating.
</para>
</listitem>
<listitem>
<para>
Adobe Flash Player support has been dropped from the tree. In particular,
the following packages no longer support it:
<itemizedlist>
<listitem><simpara><package>chromium</package></simpara></listitem>
<listitem><simpara><package>firefox</package></simpara></listitem>
<listitem><simpara><package>qt48</package></simpara></listitem>
<listitem><simpara><package>qt5.qtwebkit</package></simpara></listitem>
</itemizedlist>
Additionally, packages <package>flashplayer</package> and
<package>hal-flash</package> were removed along with the
<varname>services.flashpolicyd</varname> module.
</para>
</listitem>
</itemizedlist>
</section>

View file

@ -651,7 +651,6 @@
./services/networking/fireqos.nix
./services/networking/firewall.nix
./services/networking/flannel.nix
./services/networking/flashpolicyd.nix
./services/networking/freenet.nix
./services/networking/freeradius.nix
./services/networking/gale.nix

View file

@ -71,6 +71,7 @@ with lib;
(mkRemovedOptionModule [ "services" "seeks" ] "")
(mkRemovedOptionModule [ "services" "venus" ] "The corresponding package was removed from nixpkgs.")
(mkRemovedOptionModule [ "services" "flashpolicyd" ] "The flashpolicyd module has been removed. Adobe Flash Player is deprecated.")
# Do NOT add any option renames here, see top of the file
];

View file

@ -1,86 +0,0 @@
{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.services.flashpolicyd;
flashpolicyd = pkgs.stdenv.mkDerivation {
name = "flashpolicyd-0.6";
src = pkgs.fetchurl {
name = "flashpolicyd_v0.6.zip";
url = "https://download.adobe.com/pub/adobe/devnet/flashplayer/articles/socket_policy_files/flashpolicyd_v0.6.zip";
sha256 = "16zk237233npwfq1m4ksy4g5lzy1z9fp95w7pz0cdlpmv0fv9sm3";
};
buildInputs = [ pkgs.unzip pkgs.perl ];
installPhase = "mkdir $out; cp -pr * $out/; chmod +x $out/*/*.pl";
};
flashpolicydWrapper = pkgs.writeScriptBin "flashpolicyd"
''
#! ${pkgs.runtimeShell}
exec ${flashpolicyd}/Perl_xinetd/in.flashpolicyd.pl \
--file=${pkgs.writeText "flashpolixy.xml" cfg.policy} \
2> /dev/null
'';
in
{
###### interface
options = {
services.flashpolicyd = {
enable = mkOption {
type = types.bool;
default = false;
description =
''
Whether to enable the Flash Policy server. This is
necessary if you want Flash applications to make
connections to your server.
'';
};
policy = mkOption {
type = types.lines;
default =
''
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
'';
description = "The policy to be served. The default is to allow connections from any domain to any port.";
};
};
};
###### implementation
config = mkIf cfg.enable {
services.xinetd.enable = true;
services.xinetd.services = singleton
{ name = "flashpolicy";
port = 843;
unlisted = true;
server = "${flashpolicydWrapper}/bin/flashpolicyd";
};
};
}

View file

@ -2,7 +2,6 @@
, replace, fetchurl, zip, unzip, jq, xdg-utils, writeText
## various stuff that can be plugged in
, flashplayer, hal-flash
, ffmpeg, xorg, alsaLib, libpulseaudio, libcanberra-gtk2, libglvnd, libnotify
, gnome3/*.gnome-shell*/
, browserpass, chrome-gnome-shell, uget-integrator, plasma5Packages, bukubrow, pipewire
@ -47,28 +46,31 @@ let
assert forceWayland -> (browser ? gtk3); # Can only use the wayland backend if gtk3 is being used
let
enableAdobeFlash = cfg.enableAdobeFlash or false;
ffmpegSupport = browser.ffmpegSupport or false;
gssSupport = browser.gssSupport or false;
alsaSupport = browser.alsaSupport or false;
pipewireSupport = browser.pipewireSupport or false;
# FIXME: This should probably be an assertion now?
plugins =
let
removed = lib.filter (a: builtins.hasAttr a cfg) [
"enableVLC"
"enableDjvu"
"enableMPlayer"
"jre"
"icedtea"
"enableGoogleTalkPlugin"
"enableFriBIDPlugin"
"enableBluejeans"
"enableAdobeFlash"
"enableAdobeReader"
"enableBluejeans"
"enableDjvu"
"enableFriBIDPlugin"
"enableGoogleTalkPlugin"
"enableMPlayer"
"enableVLC"
"icedtea"
"jre"
];
in if removed != []
then throw "Your configuration mentions ${lib.concatMapStringsSep ", " (p: browserName + "." + p) removed}. All plugin related options, except for the adobe flash player, have been removed, since Firefox from version 52 onwards no longer supports npapi plugins (see https://support.mozilla.org/en-US/kb/npapi-plugins)."
else lib.optional enableAdobeFlash flashplayer;
in if removed != [] then
throw "Your configuration mentions ${lib.concatMapStringsSep ", " (p: browserName + "." + p) removed}. All plugin related options have been removed, since Firefox from version 52 onwards no longer supports npapi plugins (see https://support.mozilla.org/en-US/kb/npapi-plugins)."
else
[]
;
nativeMessagingHosts =
([ ]
@ -88,7 +90,6 @@ let
++ lib.optional useGlvnd libglvnd
++ 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 true) libpulseaudio
++ lib.optional alsaSupport alsaLib
++ pkcs11Modules;

View file

@ -1,147 +0,0 @@
{ stdenv
, lib
, fetchurl
, alsaLib
, atk
, bzip2
, cairo
, curl
, expat
, fontconfig
, freetype
, gdk-pixbuf
, glib
, glibc
, graphite2
, gtk2
, harfbuzz
, libICE
, libSM
, libX11
, libXau
, libXcomposite
, libXcursor
, libXdamage
, libXdmcp
, libXext
, libXfixes
, libXi
, libXinerama
, libXrandr
, libXrender
, libXt
, libXxf86vm
, libdrm
, libffi
, libglvnd
, libpng
, libvdpau
, libxcb
, libxshmfence
, nspr
, nss
, pango
, pcre
, pixman
, zlib
, unzip
, debug ? false
/* you have to add ~/mm.cfg :
TraceOutputFileEnable=1
ErrorReportingEnable=1
MaxWarnings=1
in order to read the flash trace at ~/.macromedia/Flash_Player/Logs/flashlog.txt
Then FlashBug (a FireFox plugin) shows the log as well
*/
}:
let
arch =
if stdenv.hostPlatform.system == "x86_64-linux" then
"x86_64"
else if stdenv.hostPlatform.system == "i686-linux" then
"i386"
else throw "Flash Player is not supported on this platform";
lib_suffix =
if stdenv.hostPlatform.system == "x86_64-linux" then
"64"
else
"";
in
stdenv.mkDerivation rec {
pname = "flashplayer";
version = "32.0.0.465";
src = fetchurl {
url =
if debug then
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_npapi_linux_debug.${arch}.tar.gz"
else
"https://fpdownload.adobe.com/get/flashplayer/pdc/${version}/flash_player_npapi_linux.${arch}.tar.gz";
sha256 =
if debug then
if arch == "x86_64" then
"04p70zc4y7k1klsxa70ngl7g5q6pf2n4018r7d5n6wg2961mjk3y"
else
"1avslj2ssp9fcvygcc8f578gpj3bbbpvap4ssr7ag6xn6mh15adw"
else
if arch == "x86_64" then
"0dbccg7ijlr9wdjkh6chbw0q1qchycbi1a313hrrc613k3djw3x9"
else
"1mhbkb2d6ky1xlgx55yip1l9kh5nq35jjbbm6hf6ckai146j3dr7";
};
nativeBuildInputs = [ unzip ];
sourceRoot = ".";
dontStrip = true;
dontPatchELF = true;
preferLocalBuild = true;
installPhase = ''
mkdir -p $out/lib/mozilla/plugins
cp -pv libflashplayer.so $out/lib/mozilla/plugins
mkdir -p $out/bin
cp -pv usr/bin/flash-player-properties $out/bin
mkdir -p $out/lib${lib_suffix}/kde4
cp -pv usr/lib${lib_suffix}/kde4/kcm_adobe_flash_player.so $out/lib${lib_suffix}/kde4
patchelf --set-rpath "$rpath" \
$out/lib/mozilla/plugins/libflashplayer.so \
$out/lib${lib_suffix}/kde4/kcm_adobe_flash_player.so
patchelf \
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
--set-rpath "$rpath" \
$out/bin/flash-player-properties
'';
passthru = {
mozillaPlugin = "/lib/mozilla/plugins";
};
rpath = lib.makeLibraryPath
[ stdenv.cc.cc
alsaLib atk bzip2 cairo curl expat fontconfig freetype gdk-pixbuf glib
glibc graphite2 gtk2 harfbuzz libICE libSM libX11 libXau libXcomposite
libXcursor libXdamage libXdmcp libXext libXfixes libXi libXinerama
libXrandr libXrender libXt libXxf86vm libdrm libffi libglvnd libpng
libvdpau libxcb libxshmfence nspr nss pango pcre pixman zlib
];
meta = {
description = "Adobe Flash Player browser plugin";
homepage = "http://www.adobe.com/products/flashplayer/";
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ taku0 ];
platforms = [ "x86_64-linux" "i686-linux" ];
};
}

View file

@ -1,106 +0,0 @@
{ stdenv
, lib
, fetchurl
, alsaLib
, atk
, bzip2
, cairo
, curl
, expat
, fontconfig
, freetype
, gdk-pixbuf
, glib
, glibc
, graphite2
, gtk2
, harfbuzz
, libICE
, libSM
, libX11
, libXau
, libXcomposite
, libXcursor
, libXdamage
, libXdmcp
, libXext
, libXfixes
, libXi
, libXinerama
, libXrandr
, libXrender
, libXt
, libXxf86vm
, libdrm
, libffi
, libglvnd
, libpng
, libvdpau
, libxcb
, libxshmfence
, nspr
, nss
, pango
, pcre
, pixman
, zlib
, unzip
, debug ? false
}:
stdenv.mkDerivation {
pname = "flashplayer-standalone";
version = "32.0.0.465";
src = fetchurl {
url =
if debug then
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux_debug.x86_64.tar.gz"
else
"https://fpdownload.macromedia.com/pub/flashplayer/updaters/32/flash_player_sa_linux.x86_64.tar.gz";
sha256 =
if debug then
"1ija3z5bxg0ppx9r237cxs1cdrhk6pia2kcxbrm6y30kvzrd3nqs"
else
"1hwnvwph7p3nfv2xf7kjw3zdpb546dsia0cmhzg81z016fi7lgw8";
};
nativeBuildInputs = [ unzip ];
sourceRoot = ".";
dontStrip = true;
dontPatchELF = true;
preferLocalBuild = true;
installPhase = ''
mkdir -p $out/bin
cp -pv flashplayer${lib.optionalString debug "debugger"} $out/bin
patchelf \
--set-interpreter $(cat $NIX_CC/nix-support/dynamic-linker) \
--set-rpath "$rpath" \
$out/bin/flashplayer${lib.optionalString debug "debugger"}
'';
rpath = lib.makeLibraryPath
[ stdenv.cc.cc
alsaLib atk bzip2 cairo curl expat fontconfig freetype gdk-pixbuf glib
glibc graphite2 gtk2 harfbuzz libICE libSM libX11 libXau libXcomposite
libXcursor libXdamage libXdmcp libXext libXfixes libXi libXinerama
libXrandr libXrender libXt libXxf86vm libdrm libffi libglvnd libpng
libvdpau libxcb libxshmfence nspr nss pango pcre pixman zlib
];
meta = {
description = "Adobe Flash Player standalone executable";
homepage = "https://www.adobe.com/support/flashplayer/debug_downloads.html";
license = lib.licenses.unfree;
maintainers = with lib.maintainers; [ taku0 ];
platforms = [ "x86_64-linux" ];
# Application crashed with an unhandled SIGSEGV
# Not on all systems, though. Video driver problem?
broken = false;
};
}

View file

@ -5,8 +5,7 @@
, libtiff, glib, icu, libmysqlclient, postgresql, sqlite, perl, coreutils, libXi
, alsaLib
, libGLSupported ? lib.elem stdenv.hostPlatform.system lib.platforms.mesaPlatforms
, flashplayerFix ? false, gdk-pixbuf
, gtkStyle ? stdenv.hostPlatform == stdenv.buildPlatform, gtk2
, gtkStyle ? stdenv.hostPlatform == stdenv.buildPlatform, gtk2, gdk-pixbuf
, gnomeStyle ? false, libgnomeui, GConf, gnome_vfs
, developerBuild ? false
, docs ? false
@ -108,10 +107,6 @@ stdenv.mkDerivation rec {
libgnomeui = libgnomeui.out;
gnome_vfs = gnome_vfs.out;
}))
++ lib.optional flashplayerFix (substituteAll {
src = ./dlopen-webkit-nsplugin.diff;
gtk = gtk2.out;
})
++ lib.optional stdenv.isAarch64 (fetchpatch {
url = "https://src.fedoraproject.org/rpms/qt/raw/ecf530486e0fb7fe31bad26805cde61115562b2b/f/qt-aarch64.patch";
sha256 = "1fbjh78nmafqmj7yk67qwjbhl3f6ylkp6x33b1dqxfw9gld8b3gl";

View file

@ -1,52 +0,0 @@
diff --git a/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp b/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp
index 19941d6..0ec15e2 100644
--- a/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp
+++ b/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginPackageQt.cpp
@@ -121,7 +121,7 @@ static void initializeGtk(QLibrary* module = 0)
}
}
- QLibrary library(QLatin1String("libgtk-x11-2.0.so.0"));
+ QLibrary library(QLatin1String("@gtk@/lib/libgtk-x11-2.0"), 0);
if (library.load()) {
typedef void *(*gtk_init_check_ptr)(int*, char***);
gtk_init_check_ptr gtkInitCheck = (gtk_init_check_ptr)library.resolve("gtk_init_check");
diff --git a/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginViewQt.cpp b/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginViewQt.cpp
index 2fe69d1..b658e4a 100644
--- a/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginViewQt.cpp
+++ b/src/3rdparty/webkit/Source/WebCore/plugins/qt/PluginViewQt.cpp
@@ -857,7 +857,7 @@ static Display *getPluginDisplay()
// support gdk based plugins (like flash) that use a different X connection.
// The code below has the same effect as this one:
// Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
- QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
+ QLibrary library(QLatin1String("@gtk@/lib/libgdk-x11-2.0"), 0);
if (!library.load())
return 0;
diff --git a/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp b/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
index 2c9b465..56b3074 100644
--- a/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
+++ b/src/3rdparty/webkit/Source/WebKit2/Shared/Plugins/Netscape/x11/NetscapePluginModuleX11.cpp
@@ -42,7 +42,7 @@ namespace WebKit {
#if PLATFORM(QT)
static void initializeGTK()
{
- QLibrary library(QLatin1String("libgtk-x11-2.0.so.0"));
+ QLibrary library(QLatin1String("@gtk@/lib/libgtk-x11-2.0"), 0);
if (library.load()) {
typedef void *(*gtk_init_check_ptr)(int*, char***);
gtk_init_check_ptr gtkInitCheck = reinterpret_cast<gtk_init_check_ptr>(library.resolve("gtk_init_check"));
diff --git a/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp b/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
index b8c8f2a..e7f4dc5 100644
--- a/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
+++ b/src/3rdparty/webkit/Source/WebKit2/WebProcess/Plugins/Netscape/x11/NetscapePluginX11.cpp
@@ -54,7 +54,7 @@ static Display *getPluginDisplay()
// The code below has the same effect as this one:
// Display *gdkDisplay = gdk_x11_display_get_xdisplay(gdk_display_get_default());
- QLibrary library(QLatin1String("libgdk-x11-2.0"), 0);
+ QLibrary library(QLatin1String("@gtk@/lib/libgdk-x11-2.0"), 0);
if (!library.load())
return 0;

View file

@ -1,10 +1,9 @@
{ qtModule, stdenv, lib, fetchurl
, qtbase, qtdeclarative, qtlocation, qtmultimedia, qtsensors, qtwebchannel
, fontconfig, gtk2, libwebp, libxml2, libxslt
, fontconfig, libwebp, libxml2, libxslt
, sqlite, systemd, glib, gst_all_1, cmake
, bison, flex, gdb, gperf, perl, pkg-config, python2, ruby
, darwin
, flashplayerFix ? false
}:
let
@ -58,12 +57,6 @@ qtModule {
++ optional stdenv.cc.isGNU "-Wno-class-memaccess"
# with clang this warning blows the log over Hydra's limit
++ optional stdenv.isDarwin "-Wno-inconsistent-missing-override"
++ optionals flashplayerFix
[
''-DNIXPKGS_LIBGTK2="${getLib gtk2}/lib/libgtk-x11-2.0"''
# this file used to exist in gdk_pixbuf?
''-DNIXPKGS_LIBGDK2="${getLib gtk2}/lib/libgdk-x11-2.0"''
]
++ optional (!stdenv.isDarwin) ''-DNIXPKGS_LIBUDEV="${getLib systemd}/lib/libudev"'';
doCheck = false; # fails 13 out of 13 tests (ctest)

View file

@ -1,29 +0,0 @@
{ lib, stdenv, fetchurl, autoconf, automake, dbus, glib, libtool, pkg-config, udisks2 }:
stdenv.mkDerivation {
name = "hal-flash-0.3.3";
src = fetchurl {
url = "https://github.com/cshorler/hal-flash/archive/v0.3.3.tar.gz";
sha256 = "0dw9bx190mrh0dycw4rfvfmwwvh2sgypffr99nfnr36b38jrd6y6";
};
nativeBuildInputs = [ pkg-config ];
buildInputs = [ autoconf automake dbus glib libtool udisks2 ];
preConfigure = "libtoolize && aclocal && autoconf && automake --add-missing";
meta = with lib; {
homepage = "https://github.com/cshorler/hal-flash";
description = "libhal stub library to satisfy the Flash Player DRM requirements";
longDescription =
''
Stub library based loosely upon libhal.[ch] from the hal-0.5.14
package. Provides the minimum necessary functionality to enable
libflashplayer.so/libadobecp.so to play back DRM content.
'';
license = with licenses; [ afl21 gpl2 ];
maintainers = with maintainers; [ malyn ];
platforms = platforms.linux;
};
}

View file

@ -66,7 +66,7 @@ let
# {pkgs, ...}:
# {
# allowUnfree = false;
# allowUnfreePredicate = (x: pkgs.lib.hasPrefix "flashplayer-" x.name);
# allowUnfreePredicate = (x: pkgs.lib.hasPrefix "vscode" x.name);
# }
allowUnfreePredicate = config.allowUnfreePredicate or (x: false);

View file

@ -178,6 +178,9 @@ mapAliases ({
firestr = throw "firestr has been removed."; # added 2019-12-08
fish-foreign-env = throw "fish-foreign-env has been replaced with fishPlugins.foreign-env"; # added 2020-12-29, modified 2021-01-10
flameGraph = flamegraph; # added 2018-04-25
flashplayer = throw "flashplayer has been removed as Adobe Flash Player is now deprecated."; # added 2021-02-07
flashplayer-standalone = throw "flashplayer-standalone has been removed as Adobe Flash Player is now deprecated."; # added 2021-02-07
flashplayer-standalone-debugger = throw "flashplayer-standalone-debugger has been removed as Adobe Flash Player is now deprecated."; # added 2021-02-07
flink_1_5 = throw "flink_1_5 was removed, use flink instead"; # added 2021-01-25
flutter-beta = throw "Non-stable versions of Flutter have been removed. You can use flutterPackages.mkFlutter to generate a package for other Flutter versions."; # added 2020-01-15
flutter-dev = throw "Non-stable versions of Flutter have been removed. You can use flutterPackages.mkFlutter to generate a package for other Flutter versions."; # added 2020-01-15
@ -261,6 +264,7 @@ mapAliases ({
gupnp_igd = gupnp-igd; # added 2018-02-25
gupnptools = gupnp-tools; # added 2015-12-19
gutenberg = zola; # added 2018-11-17
hal-flash = throw "hal-flash has been removed as Adobe Flash Player is now deprecated."; # added 2021-02-07
heimdalFull = heimdal; # added 2018-05-01
hepmc = hepmc2; # added 2019-08-05
hexen = throw "hexen (SDL port) has been removed: abandoned by upstream."; # added 2019-12-11

View file

@ -5017,8 +5017,6 @@ in
haste-client = callPackage ../tools/misc/haste-client { };
hal-flash = callPackage ../os-specific/linux/hal-flash { };
hal-hardware-analyzer = libsForQt5.callPackage ../applications/science/electronics/hal-hardware-analyzer { };
half = callPackage ../development/libraries/half { };
@ -22249,14 +22247,6 @@ in
flameshot = libsForQt5.callPackage ../tools/misc/flameshot { };
flashplayer = callPackage ../applications/networking/browsers/mozilla-plugins/flashplayer (config.flashplayer or {});
flashplayer-standalone = callPackage ../applications/networking/browsers/mozilla-plugins/flashplayer/standalone.nix (config.flashplayer or {});
flashplayer-standalone-debugger = flashplayer-standalone.override {
debug = true;
};
fluxbox = callPackage ../applications/window-managers/fluxbox { };
fme = callPackage ../applications/misc/fme {