(import (json)
        (gnu packages)
        (guix packages)
        (guix import cran)
        (guix import utils)
        (srfi srfi-1)
        (ice-9 pretty-print))

(define %bad
  '("bioCancer"  ; needs visnetwork and diagrammer, which are full of JS
    "visNetwork"
    "DiagrammeR"
    ))

;; https://bioconductor.org/packages/json/3.13/bioc/packages.js
(define json
  (vector->list
   (call-with-input-file
       "/home/rekado/dev/gx/branches/master/packages.js.1"
     json->scm)))

(define all
  (map (compose car vector->list) json))

(define existing
  (fold-packages
   (lambda (pkg res)
     (if (eq? (package-build-system pkg)
              (@ (guix build-system r) r-build-system))
         (cons (or (and=> (package-properties pkg)
                          (lambda (prop)
                            (assoc-ref prop 'upstream-name)))
                   (string-drop (package-name pkg) 2))
               res)
         res))
   (list)))

(define missing
  (lset-difference string= all existing))

(define (import-from-bioc names)
  (append-map
   (lambda (name)
     (map package->definition
          (filter identity
                  (cran-recursive-import name #:repo 'bioconductor))))
   (remove (lambda (name) (member name %bad)) names)))

(pretty-print (import-from-bioc (take (drop missing 100) 10)))

Generated by Ricardo Wurmus using scpaste at Tue Sep 27 17:33:41 2022. CEST. (original)