From 09d469f64aafbff1ce1e98e562dfcce12cc07d37 Mon Sep 17 00:00:00 2001 From: Anderson Torres Date: Fri, 16 Jan 2026 14:28:10 -0300 Subject: import: Add %google-chrome-updater. * guix/import/google-chrome.scm: New file. Signed-off-by: Hilton Chain Co-authored-by: Hilton Chain --- guix/import/google-chrome.scm | 69 +++++++++++++++++++++++++++++++++++++++++++ nongnu/packages/chrome.scm | 4 +-- 2 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 guix/import/google-chrome.scm diff --git a/guix/import/google-chrome.scm b/guix/import/google-chrome.scm new file mode 100644 index 0000000..6746930 --- /dev/null +++ b/guix/import/google-chrome.scm @@ -0,0 +1,69 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2026 Anderson Torres +;;; Copyright © 2026 Hilton Chain +;;; +;;; This file is not part of GNU Guix but requires this naming scheme so that +;;; the %google-chrome-updater is properly read when used in Nonguix root: +;;; +;;; guix refresh -t google-chrome -L$(pwd) google-chrome-{stable,beta,unstable,canary} + +(define-module (guix import google-chrome) + #:use-module (ice-9 textual-ports) + #:use-module (srfi srfi-1) + #:use-module (guix http-client) + #:use-module (guix memoization) + #:use-module (guix packages) + #:use-module (guix upstream) + #:export (%google-chrome-updater)) + +(define http-fetch* + ;; Like http-fetch, but memoized and returning the body as a string. + (memoize (lambda args + (call-with-port (apply http-fetch args) get-string-all)))) + +(define %google-chrome-control-file-url + "https://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages") + +(define (collect-package-and-version port) + (define (extract-package-or-version str) + ;; "Package: google-chrome-beta" => "google-chrome-beta" + (second (string-split str #\space))) + + (let loop ((line (get-line port)) + (result '())) + (if (eof-object? line) + result + (let ((next-line (get-line port))) + (loop next-line + (if (string-prefix? "Package:" line) + (cons (cons (extract-package-or-version line) + (extract-package-or-version next-line)) + result) + result)))))) + +(define* (latest-release package #:key (version #f) partial-version?) + "Return an for the latest-release of PACKAGE." + (let* ((file (http-fetch* %google-chrome-control-file-url)) + (versions (call-with-input-string file collect-package-and-version)) + (name (package-name package)) + (version (or version (assoc-ref 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 "_amd64.deb")))))) + +(define (google-chrome-package? package) + "Return #t if PACKAGE is Google Chrome." + (string-prefix? "google-chrome-" (package-name package))) + +(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. diff --git a/nongnu/packages/chrome.scm b/nongnu/packages/chrome.scm index 0074ee8..cdaec57 100644 --- a/nongnu/packages/chrome.scm +++ b/nongnu/packages/chrome.scm @@ -136,6 +136,8 @@ (home-page "https://www.google.com/chrome/") (license (nonfree "https://www.google.com/intl/en/chrome/terms/"))))) +;; See also (guix import google-chrome) for the `guix refresh' updater. +;; ;; Available versions can be here: https://chromereleases.googleblog.com ;; The following has a nicer representation: https://deb.pkgs.org/apps/google-amd64/ ;; @@ -152,8 +154,6 @@ ;; Yet another (From AUR scripts): ;; https://dl.google.com/linux/chrome/deb/dists/stable/main/binary-amd64/Packages ;; This link provides a Debian-like control file containing most recent versions. -;; -;; TODO: write a nice importer for this in Scheme. (define-public google-chrome-stable (package -- cgit v1.2.3