From 33b6a1720d21da785c1b53430c169fbc19714a4a Mon Sep 17 00:00:00 2001 From: toonn Date: Wed, 17 Jul 2019 00:09:19 +0200 Subject: [PATCH 1/2] wire-desktop: expand meta Added a `longDescription` and `downloadPage`. Also added myself to `maintainers`. I fixed up the `license` because it's actually GPLv3 *or later*. Note that terms and conditions apply though I don't feel like they violate the GPL-ness of the code. --- .../wire-desktop/default.nix | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix index f2ae27e2c7da..358dc19e60c2 100644 --- a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix @@ -94,10 +94,22 @@ stdenv.mkDerivation rec { ''; meta = with stdenv.lib; { - description = "A modern, secure messenger"; + description = "A modern, secure messenger for everyone"; + longDescription = '' + Wire Personal is a secure, privacy-friendly messenger. It combines useful + and fun features, audited security, and a beautiful, distinct user + interface. It does not require a phone number to register and chat. + + * End-to-end encrypted chats, calls, and files + * Crystal clear voice and video calling + * File and screen sharing + * Timed messages and chats + * Synced across your phone, desktop and tablet + ''; homepage = https://wire.com/; - license = licenses.gpl3; - maintainers = with maintainers; [ worldofpeace ]; platforms = [ "x86_64-linux" ]; + downloadPage = https://wire.com/download/; + license = licenses.gpl3Plus; + maintainers = with maintainers; [ toonn worldofpeace ]; }; } From 4665e883b26bee9ca4d351a4a1f6abf0e36cfb25 Mon Sep 17 00:00:00 2001 From: toonn Date: Wed, 17 Jul 2019 00:09:29 +0200 Subject: [PATCH 2/2] wire-desktop: Add darwin support Wire Desktop is available for linux, mac os and windows. I figured adding darwin support would be cromulent. Note that the versions don't align 100%, this is how it's released upstream. I refactored the derivation to seperate all the linux-specific parts. I also sorted the dependencies and grouped them. The changes were based on the derivation for electron. I changed the construction from calling `mkDerivation` on a conditional merger of two sets by moving the `mkDerivation` calls into the conditional and up to the local bindings for `linux` and `darwin`. This required moving `pname` and `meta` up to local bindings. --- .../wire-desktop/default.nix | 193 ++++++++++-------- 1 file changed, 105 insertions(+), 88 deletions(-) diff --git a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix index 358dc19e60c2..3792c91ea91b 100644 --- a/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix +++ b/pkgs/applications/networking/instant-messengers/wire-desktop/default.nix @@ -1,97 +1,29 @@ -{ stdenv, fetchurl, dpkg, makeDesktopItem, libuuid, gtk3, atk, cairo, pango -, gdk_pixbuf, glib, freetype, fontconfig, dbus, libnotify, libX11, xorg, libXi -, libXcursor, libXdamage, libXrandr, libXcomposite, libXext, libXfixes -, libXrender, libXtst, libXScrnSaver, nss, nspr, alsaLib, cups, expat, udev -, xdg_utils, hunspell, pulseaudio, pciutils, at-spi2-atk +{ stdenv, fetchurl, makeDesktopItem + +, alsaLib, at-spi2-atk, atk, cairo, cups, dbus, dpkg, expat, fontconfig +, freetype, gdk_pixbuf, glib, gtk3, hunspell, libX11, libXScrnSaver +, libXcomposite, libXcursor, libXdamage, libXext, libXfixes, libXi, libXrandr +, libXrender, libXtst, libnotify, libuuid, nspr, nss, pango, pciutils +, pulseaudio, udev, xdg_utils, xorg + +, cpio, xar }: let - rpath = stdenv.lib.makeLibraryPath [ - alsaLib - atk - cairo - cups - dbus - expat - fontconfig - freetype - gdk_pixbuf - glib - gtk3 - at-spi2-atk - hunspell - libuuid - libnotify - libX11 - libXcomposite - libXcursor - libXdamage - libXext - libXfixes - libXi - libXrandr - libXrender - libXScrnSaver - libXtst - nspr - nss - pango - pciutils - pulseaudio - stdenv.cc.cc - udev - xdg_utils - xorg.libxcb - ]; + inherit (stdenv.hostPlatform) system; -in - -stdenv.mkDerivation rec { pname = "wire-desktop"; - version = "3.9.2895"; - src = fetchurl { - url = "https://wire-app.wire.com/linux/debian/pool/main/Wire-${version}_amd64.deb"; - sha256 = "0wrn95m64j4b7ym44h9zawq13kg4m12aixlyyzp56bfyczmjq4a5"; - }; + version = { + "x86_64-linux" = "3.9.2895"; + "x86_64-darwin" = "3.9.2943"; + }.${system}; - desktopItem = makeDesktopItem { - name = "wire-desktop"; - exec = "wire-desktop %U"; - icon = "wire-desktop"; - comment = "Secure messenger for everyone"; - desktopName = "Wire Desktop"; - genericName = "Secure messenger"; - categories = "Network;InstantMessaging;Chat;VideoConference"; - }; - - dontBuild = true; - dontPatchELF = true; - dontConfigure = true; - - nativeBuildInputs = [ dpkg ]; - unpackPhase = "dpkg-deb -x $src ."; - installPhase = '' - mkdir -p "$out" - cp -R "opt" "$out" - cp -R "usr/share" "$out/share" - - chmod -R g-w "$out" - - # Patch wire-desktop - patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ - --set-rpath "${rpath}:$out/opt/Wire" \ - "$out/opt/Wire/wire-desktop" - - # Symlink to bin - mkdir -p "$out/bin" - ln -s "$out/opt/Wire/wire-desktop" "$out/bin/wire-desktop" - - # Desktop file - mkdir -p "$out/share/applications" - cp "${desktopItem}/share/applications/"* "$out/share/applications" - ''; + sha256 = { + "x86_64-linux" = "0wrn95m64j4b7ym44h9zawq13kg4m12aixlyyzp56bfyczmjq4a5"; + "x86_64-darwin" = "1y1bzsjmjrj518q29xfx6gg1nhdbaz7y5hzaqrp241az6plp090k"; + }.${system}; meta = with stdenv.lib; { description = "A modern, secure messenger for everyone"; @@ -107,9 +39,94 @@ stdenv.mkDerivation rec { * Synced across your phone, desktop and tablet ''; homepage = https://wire.com/; - platforms = [ "x86_64-linux" ]; downloadPage = https://wire.com/download/; license = licenses.gpl3Plus; maintainers = with maintainers; [ toonn worldofpeace ]; + platforms = [ "x86_64-darwin" "x86_64-linux" ]; }; -} + + linux = stdenv.mkDerivation rec { + inherit pname version meta; + + src = fetchurl { + url = "https://wire-app.wire.com/linux/debian/pool/main/" + + "Wire-${version}_amd64.deb"; + inherit sha256; + }; + + desktopItem = makeDesktopItem { + name = "wire-desktop"; + exec = "wire-desktop %U"; + icon = "wire-desktop"; + comment = "Secure messenger for everyone"; + desktopName = "Wire Desktop"; + genericName = "Secure messenger"; + categories = "Network;InstantMessaging;Chat;VideoConference"; + }; + + dontBuild = true; + dontPatchELF = true; + dontConfigure = true; + + nativeBuildInputs = [ dpkg ]; + rpath = stdenv.lib.makeLibraryPath [ + alsaLib at-spi2-atk atk cairo cups dbus expat fontconfig freetype + gdk_pixbuf glib gtk3 hunspell libX11 libXScrnSaver libXcomposite + libXcursor libXdamage libXext libXfixes libXi libXrandr libXrender + libXtst libnotify libuuid nspr nss pango pciutils pulseaudio + stdenv.cc.cc udev xdg_utils xorg.libxcb + ]; + + unpackPhase = "dpkg-deb -x $src ."; + + installPhase = '' + mkdir -p "$out" + cp -R "opt" "$out" + cp -R "usr/share" "$out/share" + chmod -R g-w "$out" + + # Patch wire-desktop + patchelf --set-interpreter "$(cat $NIX_CC/nix-support/dynamic-linker)" \ + --set-rpath "${rpath}:$out/opt/Wire" \ + "$out/opt/Wire/wire-desktop" + + # Symlink to bin + mkdir -p "$out/bin" + ln -s "$out/opt/Wire/wire-desktop" "$out/bin/wire-desktop" + + # Desktop file + mkdir -p "$out/share/applications" + cp "${desktopItem}/share/applications/"* "$out/share/applications" + ''; + }; + + darwin = stdenv.mkDerivation rec { + inherit pname version meta; + + src = fetchurl { + url = "https://github.com/wireapp/wire-desktop/releases/download/" + + "macos%2F${version}/Wire.pkg"; + inherit sha256; + }; + + buildInputs = [ cpio xar ]; + + unpackPhase = '' + xar -xf $src + cd com.wearezeta.zclient.mac.pkg + ''; + + + buildPhase = '' + cat Payload | gunzip -dc | cpio -i + ''; + + installPhase = '' + mkdir -p $out/Applications + cp -r Wire.app $out/Applications + ''; + }; + +in if stdenv.isDarwin + then darwin + else linux