diff options
Diffstat (limited to 'nixpkgs/pkgs/applications/networking/instant-messengers/rambox')
7 files changed, 224 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/bare.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/bare.nix new file mode 100644 index 000000000000..29ed30dd27f6 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/bare.nix @@ -0,0 +1,56 @@ +{ stdenv, fetchFromGitHub, fetchNodeModules, nodejs-8_x, ruby, sencha +, auth0ClientID, auth0Domain }: + +stdenv.mkDerivation rec { + name = "rambox-bare-${version}"; + version = "0.6.3"; + + src = fetchFromGitHub { + owner = "ramboxapp"; + repo = "community-edition"; + rev = version; + sha256 = "1ghk29d0x6i3j8b1b4xxgyf961lp17qsvvhnilnkh1nhmvxpwmw5"; + }; + + nativeBuildInputs = [ nodejs-8_x ruby sencha ]; + + node_modules = fetchNodeModules { + inherit src; + + nodejs = nodejs-8_x; + sha256 = "03h1kfiaflwbrvcd8v0bsymn7n2dxi3yj4pxkwcigqg4jgcf56k6"; + }; + + patches = [ ./isDev.patch ]; + + configurePhase = '' + echo 'var auth0Cfg = { clientID: "${auth0ClientID}", domain: "${auth0Domain}" };' > env.js + ln -s ${node_modules} node_modules + ''; + + buildPhase = '' + mkdir ../rambox-build + npm run sencha:compile:build + ''; + + installPhase = '' + mv ../rambox-build/ $out + + # https://github.com/saenzramiro/rambox/issues/1281 + echo '{"name": "rambox", "version": "${version}", "main": "electron/main.js"}' > $out/package.json + + # https://github.com/saenzramiro/rambox/issues/1282 + cp --parents ext/packages/ext-locale/build/ext-locale-*.js $out + + # Symbolic link causes `Uncaught Error: Cannot find module 'immutable'` + cp -r ${node_modules} $out/node_modules + ''; + + meta = with stdenv.lib; { + description = "Messaging and emailing app that combines common web applications into one"; + homepage = http://rambox.pro; + license = licenses.gpl3; + maintainers = with maintainers; [ gnidorah ]; + platforms = platforms.linux; + }; +} diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix new file mode 100644 index 000000000000..46157c2a35f3 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/default.nix @@ -0,0 +1,55 @@ +{ stdenv, newScope, makeWrapper +, wrapGAppsHook, gnome3, glib +, electron, xdg_utils, makeDesktopItem +, auth0ClientID ? "0spuNKfIGeLAQ_Iki9t3fGxbfJl3k8SU" +, auth0Domain ? "nixpkgs.auth0.com" }: + +let + callPackage = newScope self; + self = { + fetchNodeModules = callPackage ./fetchNodeModules.nix {}; + rambox-bare = callPackage ./bare.nix { + inherit auth0ClientID auth0Domain; + }; + sencha = callPackage ./sencha {}; + }; + desktopItem = makeDesktopItem rec { + name = "Rambox"; + exec = "rambox"; + icon = "${self.rambox-bare}/resources/Icon.png"; + desktopName = name; + genericName = "Rambox messenger"; + categories = "Network;"; + }; +in + +with self; + +stdenv.mkDerivation { + name = "rambox-${rambox-bare.version}"; + + nativeBuildInputs = [ makeWrapper wrapGAppsHook ]; + + buildInputs = [ glib gnome3.gsettings_desktop_schemas ]; + unpackPhase = ":"; + + dontWrapGApps = true; # we only want $gappsWrapperArgs here + + installPhase = '' + runHook preInstall + mkdir -p $out/share/applications + ln -s ${desktopItem}/share/applications/* $out/share/applications + runHook postInstall + ''; + + postFixup = '' + makeWrapper ${electron}/bin/electron $out/bin/rambox \ + --add-flags "${rambox-bare} --without-update" \ + "''${gappsWrapperArgs[@]}" \ + --prefix PATH : ${xdg_utils}/bin + ''; + + inherit (rambox-bare.meta // { + platforms = [ "i686-linux" "x86_64-linux" ]; + }); +} diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/fetchNodeModules.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/fetchNodeModules.nix new file mode 100644 index 000000000000..047890a932ca --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/fetchNodeModules.nix @@ -0,0 +1,26 @@ +{ stdenv, jq }: { src, nodejs, sha256 }: + +# Only npm >= 5.4.2 is deterministic, see: +# https://github.com/npm/npm/issues/17979#issuecomment-332701215 +assert stdenv.lib.versionAtLeast nodejs.version "8.9.0"; + +stdenv.mkDerivation { + name = "node_modules"; + + outputHashAlgo = "sha256"; + outputHash = sha256; + outputHashMode = "recursive"; + + nativeBuildInputs = [ jq nodejs ]; + + buildCommand = '' + cp -r ${src}/* . + HOME=. npm install --force --ignore-scripts --only=production + for f in $(find node_modules -name package.json); do + # https://github.com/npm/npm/issues/10393 + jq -S 'delpaths(keys | map(select(startswith("_")) | [.]))' $f > $f.tmp + mv $f.tmp $f + done + mv node_modules $out + ''; +} diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/isDev.patch b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/isDev.patch new file mode 100644 index 000000000000..b918144c7662 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/isDev.patch @@ -0,0 +1,14 @@ +https://github.com/saenzramiro/rambox/issues/1280 + +diff -urNZ a/electron/main.js b/electron/main.js +--- a/electron/main.js 2017-11-02 14:58:06.085127616 +0000 ++++ b/electron/main.js 2017-11-02 14:58:18.316887679 +0000 +@@ -8,7 +8,7 @@ + // Configuration + const Config = require('electron-config'); + // Development +-const isDev = require('electron-is-dev'); ++const isDev = false; + // Updater + const updater = require('./updater'); + // File System diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/bare.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/bare.nix new file mode 100644 index 000000000000..efecebe169e9 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/bare.nix @@ -0,0 +1,43 @@ +{ stdenv, fetchurl, gzip, which, unzip, jdk }: + +let + version = "6.6.0.13"; + srcs = { + i686-linux = fetchurl { + url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-i386.sh.zip"; + sha256 = "15b197108b49mf0afpihkh3p68lxm7580zz2w0xsbahglnvhwyfz"; + }; + x86_64-linux = fetchurl { + url = "https://cdn.sencha.com/cmd/${version}/no-jre/SenchaCmd-${version}-linux-amd64.sh.zip"; + sha256 = "1cxhckmx1802p9qiw09cgb1v5f30wcvnrwkshmia8p8n0q47lpp4"; + }; + }; +in + +stdenv.mkDerivation rec { + inherit version; + + name = "sencha-bare-${version}"; + src = srcs.${stdenv.hostPlatform.system}; + + nativeBuildInputs = [ gzip which unzip ]; + buildInputs = [ jdk ]; + + sourceRoot = "."; + + configurePhase = '' + substituteAll ${./response.varfile} response.varfile + ''; + + installPhase = '' + ./SenchaCmd*.sh -q -dir $out -varfile response.varfile + # disallow sencha writing into /nix/store/repo + echo "repo.local.dir=$TMP/repo" >> $out/sencha.cfg + rm $out/shell-wrapper.sh $out/Uninstaller + ''; + + meta = with stdenv.lib; { + license = licenses.unfree; + platforms = attrNames srcs; + }; +} diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/default.nix b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/default.nix new file mode 100644 index 000000000000..1ca04a9e1686 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/default.nix @@ -0,0 +1,17 @@ +{ stdenv, callPackage, makeWrapper }: + +let + sencha-bare = callPackage ./bare.nix {}; +in + +stdenv.mkDerivation { + name = "sencha-${sencha-bare.version}"; + + nativeBuildInputs = [ makeWrapper ]; + + unpackPhase = ":"; + + installPhase = '' + makeWrapper ${sencha-bare}/sencha $out/bin/sencha + ''; +} diff --git a/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/response.varfile b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/response.varfile new file mode 100644 index 000000000000..0ff6f0a30d50 --- /dev/null +++ b/nixpkgs/pkgs/applications/networking/instant-messengers/rambox/sencha/response.varfile @@ -0,0 +1,13 @@ +addToPath$Integer=1 +parentDir=. +sys.adminRights$Boolean=false +sys.component.148$Boolean=true +sys.component.157$Boolean=true +sys.component.26$Boolean=true +sys.component.30$Boolean=true +sys.component.90$Boolean=true +sys.component.91$Boolean=true +sys.component.92$Boolean=true +sys.component.94$Boolean=true +sys.installationDir=@out@ +sys.languageId=en \ No newline at end of file |