diff --git a/guix/import/google-chrome.scm b/guix/import/google-chrome.scm new file mode 100644 index 00000000..490a456e --- /dev/null +++ b/guix/import/google-chrome.scm @@ -0,0 +1,69 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2026 Anderson Torres + +;;; This file is not part of GNU Guix but requires this naming scheme +;;; so that the %chrome-updater is properly read when using +;;; `guix refresh -L$(pwd) google-chrome-canary' in nonguix root. + +(define-module (guix import google-chrome) + #:use-module (guix import json) + #:use-module (guix memoization) + #:use-module (guix packages) + #:use-module (guix upstream) + #:export (%google-chrome-updater)) + +(define (extract-google-chrome-version channel) + "Extract the most recent Google Chrome version from CHANNEL. + +CHANNEL can be stable, beta, canary and dev; dev corresponds to unstable." + (let* ((json-data-url + (string-append "https://versionhistory.googleapis.com/v1/" + "chrome/platforms/linux/channels/" + channel + "/versions/all/releases?" + "filter=endtime=none,fraction%3E=0.5&order_by=version%20desc")) + (json-data (json-fetch json-data-url)) + (release-data (assoc-ref json-data "releases")) + (release (vector-ref release-data 0)) + (version (assoc-ref release "version"))) + version)) + +(define (google-chrome-versions) + "Returns an alist of all Google Chrome versions." + (memoize + (lambda _ + (list + (cons "google-chrome-stable" (extract-google-chrome-version "stable")) + (cons "google-chrome-beta" (extract-google-chrome-version "beta")) + (cons "google-chrome-canary" (extract-google-chrome-version "canary")) + (cons "google-chrome-unstable" (extract-google-chrome-version "dev")))))) + +(define* (latest-release package #:key (version #f) partial-version?) + "Return an for the latest release of PACKAGE." + (let* ((name (package-name package)) + (version (or version + (assoc-ref ((google-chrome-versions)) name)))) + (upstream-source + (package name) + (version version) + (urls + (list (string-append + "https://dl.google.com/linux/chrome/deb/pool/main/g/" + name "/" name "_" version "-1_amd64.deb")))))) + +(define (google-chrome-package? package) + "Return true if PACKAGE is Google Chrome." + (member (package-name package) + (list "google-chrome-stable" + "google-chrome-beta" + "google-chrome-canary" + "google-chrome-unstable"))) + +(define %google-chrome-updater + (upstream-updater + (name 'google-chrome) + (description "Updater for Google Chrome packages") + (pred google-chrome-package?) + (import latest-release))) + +;;; google-chrome.scm ends here.