diff --git a/nongnu/packages/chrome.scm b/nongnu/packages/chrome.scm new file mode 100644 index 0000000..4e094be --- /dev/null +++ b/nongnu/packages/chrome.scm @@ -0,0 +1,197 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2022 Giacomo Leidi +;;; Copyright © 2022 Mathieu Othacehe +;;; Copyright © 2022 Jonathan Brielmaier +;;; +;;; This file is not part of GNU Guix. +;;; +;;; GNU Guix is free software; you can redistribute it and/or modify it +;;; under the terms of the GNU General Public License as published by +;;; the Free Software Foundation; either version 3 of the License, or (at +;;; your option) any later version. +;;; +;;; GNU Guix is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;; GNU General Public License for more details. +;;; +;;; You should have received a copy of the GNU General Public License +;;; along with GNU Guix. If not, see . + +(define-module (nongnu packages chrome) + #:use-module (gnu packages base) + #:use-module (gnu packages compression) + #:use-module (gnu packages cups) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages databases) + #:use-module (gnu packages gcc) + #:use-module (gnu packages gl) + #:use-module (gnu packages glib) + #:use-module (gnu packages gnome) + #:use-module (gnu packages gtk) + #:use-module (gnu packages linux) + #:use-module (gnu packages nss) + #:use-module (gnu packages xdisorg) + #:use-module (gnu packages xml) + #:use-module (gnu packages xorg) + #:use-module (guix download) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix build-system gnu) + #:use-module (nonguix build-system binary) + #:use-module (nonguix licenses) + #:use-module (ice-9 string-fun)) + +(define-public (make-google-chrome repo version hash) + (let* ((name (string-append "google-chrome-" repo)) + (appname (if (string=? repo "stable") + "chrome" + (string-replace-substring name "google-" "")))) + (package + (name name) + (version version) + (source (origin + (method url-fetch) + (uri + (string-append + "https://dl.google.com/linux/chrome/deb/pool/main/g/" + name "/" name "_" version "-1_amd64.deb")) + (sha256 + (base32 hash)))) + (build-system binary-build-system) + (arguments + (list + ;; almost 300MB, faster to download and build from Google servers + #:substitutable? #f + #:patchelf-plan + #~(let ((patchelf-inputs + '("alsa-lib" "at-spi2-atk" "at-spi2-core" "atk" "cairo" "cups" + "dbus" "expat" "fontconfig-minimal" "gcc" "gdk-pixbuf" "glib" + "gtk" "libdrm" "libnotify" "libsecret" "libx11" "libxcb" + "libxcomposite" "libxcursor" "libxdamage" "libxext" "libxfixes" + "libxi" "libxkbcommon" "libxkbfile" "libxrandr" "libxrender" + "libxtst" "mesa" "nspr" "pango" "zlib")) + (path (string-append "opt/google/" #$appname "/"))) + (map (lambda (file) + (cons (string-append path file) (list patchelf-inputs))) + '("chrome" + "chrome-sandbox" + "chrome_crashpad_handler" + "nacl_helper" + "libEGL.so" + "libGLESv2.so"))) + #:install-plan + #~'(("opt/" "/share") + ("usr/share/" "/share")) + #:phases + #~(modify-phases %standard-phases + (add-after 'unpack 'unpack-deb + (lambda* (#:key inputs #:allow-other-keys) + (invoke "ar" "x" #$source) + (invoke "rm" "-v" "control.tar.xz" + "debian-binary" + (string-append "google-chrome-" #$repo "_" + #$version + "-1_amd64.deb")) + (invoke "tar" "xf" "data.tar.xz") + (invoke "rm" "-vrf" "data.tar.xz" "etc"))) + (add-before 'install 'patch-assets + ;; Many thanks to + ;; https://github.com/NixOS/nixpkgs/blob/master/pkgs/applications/networking/browsers/google-chrome/default.nix + (lambda _ + (let* ((bin (string-append #$output "/bin")) + (share (string-append #$output "/share")) + (opt "./opt") + (usr/share "./usr/share") + (old-exe (string-append "/opt/google/" #$appname "/google-" #$appname)) + (exe (string-append bin "/google-" #$appname))) + ;; This allows us to override CHROME_WRAPPER later. + (substitute* (string-append opt "/google/" #$appname "/google-" #$appname) + (("CHROME_WRAPPER") "WRAPPER")) + (substitute* (string-append usr/share "/applications/google-" #$appname ".desktop") + (("^Exec=.*") (string-append "Exec=" exe "\n"))) + (substitute* (string-append usr/share "/gnome-control-center/default-apps/google-" #$appname ".xml") + ((old-exe) exe)) + (substitute* (string-append usr/share "/menu/google-" #$appname ".menu") + (("/opt") share) + ((old-exe) exe)) + #t))) + (add-after 'install 'install-wrapper + (lambda _ + (let* ((bin (string-append #$output "/bin")) + (exe (string-append bin "/google-" #$appname)) + (share (string-append #$output "/share")) + (chrome-target (string-append share "/google/" #$appname "/google-" #$appname))) + (mkdir-p bin) + (symlink chrome-target exe) + (wrap-program exe + `("FONTCONFIG_PATH" ":" prefix + (,(string-join + (list + (string-append #$(this-package-input "fontconfig-minimal") "/etc/fonts") + #$output) + ":"))) + `("LD_LIBRARY_PATH" ":" prefix + (,(string-join + (list + (string-append #$(this-package-input "nss") "/lib/nss") + (string-append #$(this-package-input "eudev") "/lib") + (string-append #$(this-package-input "gcc") "/lib") + (string-append #$(this-package-input "mesa") "/lib") + (string-append #$(this-package-input "libxkbfile") "/lib") + (string-append #$(this-package-input "zlib") "/lib") + (string-append #$(this-package-input "libsecret") "/lib") + (string-append #$(this-package-input "sqlcipher") "/lib") + (string-append #$(this-package-input "libnotify") "/lib") + (string-append #$(this-package-input "libdrm") "/lib") + (string-append #$(this-package-input "pipewire") "/lib") + #$output) + ":"))) + '("CHROME_WRAPPER" = (#$appname))))))))) + (native-inputs (list tar)) + (inputs + (list alsa-lib + at-spi2-atk + at-spi2-core + atk + cairo + cups + dbus + eudev + expat + fontconfig + `(,gcc "lib") + glib + gtk + libdrm + libnotify + librsvg + libsecret + libx11 + libxcb + libxcomposite + libxcursor + libxdamage + libxext + libxfixes + libxi + libxkbcommon + libxkbfile + libxrandr + libxrender + libxtst + mesa + nspr + nss + pango + pipewire-0.3 + sqlcipher + zlib)) + (synopsis "Freeware web browser") + (supported-systems '("x86_64-linux")) + (description "Google Chrome is a cross-platform web browser developed by Google.") + (home-page "https://www.google.com/chrome/") + (license (nonfree "https://www.google.com/intl/en/chrome/terms/"))))) + +(define-public google-chrome-stable + (make-google-chrome "stable" "107.0.5304.68" "1x9svz5s8fm2zhnpzjpqckzfp37hjni3nf3pm63rwnvbd06y48ja"))