nixpkgs/pkgs/applications/networking/dropbox/default.nix
Charles Strahan 8f9a2f1358
dropbox: fix tray menu with StatusNotifierItem trays
If dropbox can't load libappindicator, it will fallback to using the old
xembed protocol. If you (or your Desktop Environment) are running
something like KDE's XEmbed SNI Proxy, then you'll at least see an icon,
but clicking the icon won't give you menu.

Adding libappindicator to the env allows dropbox to fully integrate with
contemporary status trays, while still falling back to xembed if the
required DBus service is not present.
2019-06-03 05:57:15 -04:00

86 lines
2.4 KiB
Nix

{ stdenv, lib, buildFHSUserEnv, writeScript, makeDesktopItem }:
let platforms = [ "i686-linux" "x86_64-linux" ]; in
assert lib.elem stdenv.hostPlatform.system platforms;
# Dropbox client to bootstrap installation.
# The client is self-updating, so the actual version may be newer.
let
version = "73.4.118";
arch = {
"x86_64-linux" = "x86_64";
"i686-linux" = "x86";
}.${stdenv.hostPlatform.system};
installer = "https://clientupdates.dropboxstatic.com/dbx-releng/client/dropbox-lnx.${arch}-${version}.tar.gz";
in
let
desktopItem = makeDesktopItem {
name = "dropbox";
exec = "dropbox";
comment = "Sync your files across computers and to the web";
desktopName = "Dropbox";
genericName = "File Synchronizer";
categories = "Network;FileTransfer;";
startupNotify = "false";
};
in
buildFHSUserEnv {
name = "dropbox";
targetPkgs = pkgs: with pkgs; with xorg; [
libICE libSM libX11 libXcomposite libXdamage libXext libXfixes libXrender
libXxf86vm libxcb xkeyboardconfig
curl dbus firefox-bin fontconfig freetype gcc glib gnutar libxml2 libxslt
procps zlib mesa libxshmfence libpthreadstubs libappindicator
];
extraInstallCommands = ''
mkdir -p "$out/share/applications"
cp "${desktopItem}/share/applications/"* $out/share/applications
'';
runScript = writeScript "install-and-start-dropbox" ''
export BROWSER=firefox
set -e
do_install=
if ! [ -d "$HOME/.dropbox-dist" ]; then
do_install=1
else
installed_version=$(cat "$HOME/.dropbox-dist/VERSION")
latest_version=$(printf "${version}\n$installed_version\n" | sort -rV | head -n 1)
if [ "x$installed_version" != "x$latest_version" ]; then
do_install=1
fi
fi
if [ -n "$do_install" ]; then
installer=$(mktemp)
# Dropbox is not installed.
# Download and unpack the client. If a newer version is available,
# the client will update itself when run.
curl '${installer}' >"$installer"
pkill dropbox || true
rm -fr "$HOME/.dropbox-dist"
tar -C "$HOME" -x -z -f "$installer"
rm "$installer"
fi
exec "$HOME/.dropbox-dist/dropboxd" "$@"
'';
meta = with lib; {
description = "Online stored folders (daemon version)";
homepage = http://www.dropbox.com/;
license = licenses.unfree;
maintainers = with maintainers; [ ttuegel ];
platforms = [ "i686-linux" "x86_64-linux" ];
};
}