summaryrefslogtreecommitdiff
path: root/nongnu/packages
diff options
context:
space:
mode:
authorGiacomo Leidi <goodoldpaul@autistici.org>2022-11-06 01:28:31 +0100
committerJonathan Brielmaier <jonathan.brielmaier@web.de>2022-11-15 13:42:46 +0100
commitb861a09c94fec922c8109e567ea5720d3f1d0eff (patch)
treef7d66ca7518a5bdd033d95f7489e440d7b155658 /nongnu/packages
parent16b645772bf115de06b390cd7ec476a8f267d28a (diff)
nongnu: Add google-chrome-stable.
* nongnu/packages/chrome.scm: New file, (google-chrome-stable): new variable. Signed-off-by: Jonathan Brielmaier <jonathan.brielmaier@web.de>
Diffstat (limited to 'nongnu/packages')
-rw-r--r--nongnu/packages/chrome.scm197
1 files changed, 197 insertions, 0 deletions
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 <goodoldpaul@autistici.org>
+;;; Copyright © 2022 Mathieu Othacehe <m.othacehe@gmail.com>
+;;; Copyright © 2022 Jonathan Brielmaier <jonathan.brielmaier@web.de>
+;;;
+;;; 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 <http://www.gnu.org/licenses/>.
+
+(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"))