summaryrefslogtreecommitdiff
path: root/guix/import/firefox.scm
blob: 7bcaf07e4f4c463563c39f10a0a4d5fb3f0cc4fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>

;;; 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 <upstream-source> 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.