diff --git a/guix/import/firefox.scm b/guix/import/firefox.scm new file mode 100644 index 00000000..7bcaf07e --- /dev/null +++ b/guix/import/firefox.scm @@ -0,0 +1,47 @@ +;;; SPDX-License-Identifier: GPL-3.0-or-later +;;; Copyright © 2025 Nicolas Graves + +;;; This file is not part of GNU Guix but requires this naming scheme +;;; so that the %firefox-updater is properly read when using +;;; `guix refresh -L$(pwd) firefox' in nonguix root. + +(define-module (guix import firefox) + #:use-module (guix import json) + #:use-module (guix memoization) + #:use-module (guix packages) + #:use-module (guix upstream) + #:export (%firefox-updater)) + +(define firefox-json-url "https://product-details.mozilla.org/1.0/firefox_versions.json") + +(define firefox-versions + (memoize + (lambda _ + (let ((alist (json-fetch firefox-json-url))) + (list (cons "firefox" (assoc-ref alist "LATEST_FIREFOX_VERSION")) + (cons "firefox-esr" (assoc-ref alist "FIREFOX_ESR"))))))) + +(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 (firefox-versions) name)))) + (upstream-source + (package name) + (version version) + (urls + (list (string-append "https://archive.mozilla.org/pub/firefox/releases/" + version "/source/firefox-" + version ".source.tar.xz")))))) + +(define (firefox-package? package) + "Return true if PACKAGE is Firefox." + (member (package-name package) (list "firefox" "firefox-esr"))) + +(define %firefox-updater + (upstream-updater + (name 'firefox) + (description "Updater for Firefox packages") + (pred firefox-package?) + (import latest-release))) + +;;; firefox.scm ends here.