about summary refs log tree commit diff
path: root/gn
diff options
context:
space:
mode:
authorEfraim Flashner2023-09-19 12:55:31 +0300
committerEfraim Flashner2023-09-19 12:59:33 +0300
commitf1b32a21b7c45e3b974ecb543d845c2246339367 (patch)
tree1e135254225e8bb01a3ce519752d08ddd41684c9 /gn
parent1e16fe6c90c88cb0a22716a2f9fe04b9a67981d1 (diff)
downloadguix-bioinformatics-f1b32a21b7c45e3b974ecb543d845c2246339367.tar.gz
Update pluto notebook service and julia packages
Diffstat (limited to 'gn')
-rw-r--r--gn/packages/julia.scm755
-rw-r--r--gn/services/pluto.scm27
2 files changed, 670 insertions, 112 deletions
diff --git a/gn/packages/julia.scm b/gn/packages/julia.scm
index aa163bf..a00244f 100644
--- a/gn/packages/julia.scm
+++ b/gn/packages/julia.scm
@@ -36,8 +36,7 @@
                       (commit commit)))
                 (file-name (git-file-name name version))
                 (sha256
-                 (base32 "0lm9yhk0mq5cvvkcbsgcjc1y7fzhr8qz2nxn38cy1zdxd8vfknsx"))
-                (patches (search-patches "julia-visuals-remove-manifests.diff"))))
+                 (base32 "0lm9yhk0mq5cvvkcbsgcjc1y7fzhr8qz2nxn38cy1zdxd8vfknsx"))))
       (build-system julia-build-system)
       (arguments
        `(#:tests? #f    ; no test suite
@@ -53,6 +52,7 @@
            (replace 'install
              (lambda* (#:key outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
+                 (mkdir-p (string-append out "/bin"))
                  ;; Copied from the Dockerfile.
                  (for-each
                   (lambda (file)
@@ -64,12 +64,6 @@
                         "runsliderserver.sh"
                         "notebooks"
                         "Project.toml")))))
-           (add-after 'install 'skip-julia-cairomakie
-             (lambda* (#:key outputs #:allow-other-keys)
-               (with-directory-excursion
-                 (string-append (assoc-ref outputs "out") "/notebooks")
-                 (delete-file "bayes.jl")
-                 (delete-file "disease-testing.jl"))))
            (add-after 'install 'wrap-program
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
@@ -77,11 +71,15 @@
                  (wrap-script (string-append out "/runpluto.sh")
                   `("PATH" ":" prefix (,(string-append (assoc-ref inputs "julia") "/bin")
                                         ,(string-append (assoc-ref inputs "coreutils") "/bin")))
+                  `("JULIA_LOAD_PATH" ":" prefix (,(getenv "JULIA_LOAD_PATH"))))
+                 (wrap-script (string-append out "/runsliderserver.sh")
+                  `("PATH" ":" prefix (,(string-append (assoc-ref inputs "julia") "/bin")
+                                        ,(string-append (assoc-ref inputs "coreutils") "/bin")))
                   `("JULIA_LOAD_PATH" ":" prefix (,(getenv "JULIA_LOAD_PATH")))))))
            (add-after 'install 'create-runpluto
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
-                 (with-output-to-file (string-append out "/runpluto")
+                 (with-output-to-file (string-append out "/bin/runpluto")
                    (lambda ()
                      (format #t "#!~a --no-auto-compile
 !#
@@ -102,53 +100,64 @@
                              (getenv "JULIA_LOAD_PATH")
                              (dirname (search-input-file inputs "/bin/yes"))
                              (search-input-file inputs "/bin/julia"))))
-                   (chmod (string-append out "/runpluto") #o555))))
+                   (chmod (string-append out "/bin/runpluto") #o555))))
            (add-after 'install 'create-runsliderserver
              (lambda* (#:key inputs outputs #:allow-other-keys)
                (let ((out (assoc-ref outputs "out")))
-                 (with-output-to-file (string-append out "/runsliderserver")
+                 (with-output-to-file (string-append out "/bin/runsliderserver")
                    (lambda ()
                      (format #t "#!~a --no-auto-compile
 !#
 (setenv \"JULIA_LOAD_PATH\" \"~a\")
 (setenv \"PATH\" \"~a\")
-(zero? (system*
-         \"~a\"
-         \"--optimize=0\"
-         \"-e\" \"import PlutoSliderServer;
-         PlutoSliderServer.run_directory(
-            \\\"~a/notebooks/\\\",
-            SliderServer_port=4343,
-            SliderServer_host=\\\"0.0.0.0\\\")\"))\n"
+;; First initialise or update the julia registry:
+(zero? (system* \"~a\"
+                \"--optimize=0\"
+                ;; Used by L1-penalty.jl:
+                ;; \"-e\" \"import Pkg; Pkg.add(\\\"PlotlyBase\\\")\"
+                \"-e\" \"import Pkg; Pkg.update()\"))
+(zero? (system* \"~a\"
+                \"--optimize=0\"
+                \"-e\" \"import PlutoSliderServer;
+                PlutoSliderServer.run_directory(
+                   \\\"~a/notebooks/\\\",
+                   SliderServer_port=4343,
+                   SliderServer_host=\\\"0.0.0.0\\\")\"))\n"
                              (search-input-file inputs "/bin/guile")
                              (getenv "JULIA_LOAD_PATH")
                              (dirname (search-input-file inputs "/bin/yes"))
                              (search-input-file inputs "/bin/julia")
+                             (search-input-file inputs "/bin/julia")
                              out)))
-                   (chmod (string-append out "/runsliderserver") #o555))))
+                   (chmod (string-append out "/bin/runsliderserver") #o555))))
            (replace 'precompile
              (lambda _
                (invoke "julia" "-e" "\"import Pkg; Pkg.instantiate(); Pkg.status(); Pkg.precompile()\""))))))
 
+      #;
       (propagated-inputs
+        ;; This doesn't seem to actually be used anywhere
        `(;; from setup.py
          ("python-jupyter-server-proxy"
           ,(@ (gn packages python) python-jupyter-server-proxy-1))))
 
       (inputs
+       ;; Ideally we'd use more of these packages, but we end up downloading
+       ;; most of them anyway when the service starts, so we've commented them
+       ;; out for now.
        (list ;julia-cairomakie           ; 0.8.13
-             julia-distributions        ; 0.25.76
+             ;julia-distributions        ; 0.25.76
              ;julia-interactiveutils    ; stdlib
-             julia-latexstrings         ; 1.3.0
+             ;julia-latexstrings         ; 1.3.0
              ;julia-markdown            ; stdlib
-             julia-optim                ; 1.7.2
-             julia-plots                ; 1.35.3
-             julia-pluto                ; 0.19.11
+             ;julia-optim                ; 1.7.2
+             ;julia-plots                ; 1.35.3
+             ;julia-pluto                ; 0.19.11
              julia-plutosliderserver    ; *
-             julia-plutoui              ; 0.7.46
-             julia-prettytables         ; 2.1.0
-             julia-quadgk               ; 2.5.0
-             julia-roots                ; 2.0.3
+             ;julia-plutoui              ; 0.7.46
+             ;julia-prettytables         ; 2.1.0
+             ;julia-quadgk               ; 2.5.0
+             ;julia-roots                ; 2.0.3
              (@ (gnu packages guile) guile-3.0)))   ; for wrap-script
       (home-page "https://github.com/sens/visuals")
       (synopsis "Visualizations using Pluto.jl notebooks")
@@ -339,25 +348,35 @@ distributed computing.")
          (base32 "0nqlnkh8grxfm8d1mivi7dnrvb31bznj9s540a10d2v396ikfggn"))))
     (build-system julia-build-system)
     (arguments
-     `(#:tests? #f))        ; Some failed tests
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-tests
+           (lambda _
+             ;; Something about logpdf fails in both of these test sets.
+             (substitute* "test/multivariate/dirichlet.jl"
+               (("\\@testset \"_logpdf\" begin")
+                "@testset \"_logpdf\" begin return;"))
+             (substitute* "test/univariate/discrete/negativebinomial.jl"
+               ;; The negative numbers something something wrong in logpdf.
+               (("0, 10, 42, -1, -5, -13") "0, 10, 42")))))))
     (propagated-inputs
-     `(("julia-chainrulescore" ,julia-chainrulescore)
-       ("julia-densityinterface" ,julia-densityinterface)
-       ("julia-fillarrays" ,julia-fillarrays)
-       ("julia-pdmats" ,julia-pdmats)
-       ("julia-quadgk" ,julia-quadgk)
-       ("julia-specialfunctions" ,julia-specialfunctions)
-       ("julia-statsbase" ,julia-statsbase)
-       ("julia-statsfuns" ,julia-statsfuns)))
+     (list julia-chainrulescore     ; 1
+           julia-densityinterface   ; 0.4
+           julia-fillarrays         ; 0.9 .. 0.13
+           julia-pdmats             ; 0.10, 0.11
+           julia-quadgk             ; 2
+           julia-specialfunctions   ; 1.2, 2
+           julia-statsbase          ; 0.32, 0.33
+           julia-statsfuns))        ; 0.9.15, 1
     (native-inputs
-     `(("julia-calculus" ,julia-calculus)
-       ("julia-chainrulestestutils" ,julia-chainrulestestutils)
-       ("julia-finitedifferences" ,julia-finitedifferences)
-       ("julia-forwarddiff" ,julia-forwarddiff)
-       ("julia-json" ,julia-json)
-       ("julia-offsetarrays" ,julia-offsetarrays)
-       ("julia-stablerngs" ,julia-stablerngs)
-       ("julia-staticarrays" ,julia-staticarrays)))
+     (list julia-calculus
+           julia-chainrulestestutils
+           julia-finitedifferences
+           julia-forwarddiff
+           julia-json
+           julia-offsetarrays
+           julia-stablerngs
+           julia-staticarrays))
     (home-page "https://github.com/JuliaStats/Distributions.jl")
     (synopsis "Probability distributions and associated functions")
     (description "Julia package for probability distributions and associated
@@ -471,6 +490,26 @@ do the users of your packages!")
     (description "This package provides a wrapper for the git library.")
     (license license:expat)))
 
+(define-public julia-glob
+  (package
+    (name "julia-glob")
+    (version "1.3.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/vtjnash/Glob.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "05yp7ba3y3pfibs0hy2sp61phb5b6x7aacsjc93i3lz6wmlpj0jx"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/vtjnash/Glob.jl")
+    (synopsis "Posix-compliant file name pattern matching")
+    (description "This implementation of Glob is based on the IEEE Std 1003.1,
+2004 Edition (Open Group Base Specifications Issue 6) for fnmatch and glob.")
+    (license license:expat)))
+
 (define-public julia-terminalloggers
   (package
     (name "julia-terminalloggers")
@@ -689,56 +728,227 @@ densities and objects associated with a density in Julia.")
     (build-system julia-build-system)
     (arguments
      `(#:tests? #f  ; for now
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'adjust-tests
+           (lambda _
+             ;; Decrease the number of tests we're running.
+             (substitute* "test/runtests.jl"
+               ((".*VisualRegressionTests.*") "")
+               ((".*pgfplotsx.*") "")
+               ((".*plotlyjs.*") "")
+               ))))
        ))
     (propagated-inputs
-     (list
-       ;julia-contour
-       julia-ffmpeg
-       julia-fixedpointnumbers
-       julia-gr
-       julia-geometrybasics
-       julia-jlfzf
-       julia-json
-       ;julia-latexify
-       julia-measures
-       julia-nanmath
-       julia-plotthemes
-       julia-plotutils
-       julia-recipesbase
-       julia-recipespipeline
-       julia-reexport
-       julia-relocatablefolders
-       julia-requires
-       julia-scratch
-       julia-showoff
-       julia-snoopprecompile
-       julia-statsbase
-       julia-unicodefun
-       julia-unzip))
+     (list julia-contour
+           julia-ffmpeg
+           julia-fixedpointnumbers
+           julia-gr
+           julia-geometrybasics
+           julia-jlfzf
+           julia-json
+           ;julia-latexify
+           julia-measures
+           julia-nanmath
+           julia-plotthemes
+           julia-plotutils
+           julia-recipesbase
+           julia-recipespipeline
+           julia-reexport
+           julia-relocatablefolders
+           julia-requires
+           julia-scratch
+           julia-showoff
+           julia-snoopprecompile
+           julia-statsbase
+           julia-unicodefun
+           julia-unzip))
     (native-inputs
-     (list
-       ;julia-distributions
-       julia-fileio
-       ;julia-gtk
-       ;julia-hdf5
-       julia-imagemagick
-       ;julia-images
-       julia-offsetarrays
-       ;julia-pgfplotsx
-       ;julia-plotlyjs
-       ;julia-rdatasets
-       julia-stablerngs
-       julia-staticarrays
-       ;julia-statsplots
-       julia-testimages
-       ;julia-unicodeplots
-       ;julia-visualregressiontests
-       ))
+     (list julia-aqua
+           julia-colors
+           ;julia-conda
+           julia-distributions
+           julia-fileio
+           julia-filepathsbase
+           ;julia-gaston
+           julia-geometrybasics
+           ;julia-gtk
+           ;julia-hdf5
+           julia-imagemagick
+           ;julia-images
+           ;julia-inspectdr
+           julia-offsetarrays
+           ;julia-pgfplotsx
+           ;julia-plotlybase
+           ;julia-plotlyjs
+           ;julia-plotlykaleido
+           julia-pycall
+           julia-pyplot
+           ;julia-rdatasets
+           julia-sentinelarrays
+           julia-stablerngs
+           julia-staticarrays
+           ;julia-statsplots
+           julia-testimages
+           julia-unicodeplots
+           julia-unitful
+           ;julia-visualregressiontests
+           ))
     (home-page "http://docs.juliaplots.org/")
     (synopsis "Powerful convenience for Julia visualizations and data analysis")
     (description "Plots is a plotting API and toolset.")
     (license license:expat)))
 
+(define-public julia-contour
+  (package
+    (name "julia-contour")
+    (version "0.5.7")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGeometry/Contour.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0ai6lh5ap9qxhqm2k1pnkfbpm4b95d3v7izhyvrr9cxwbxfjv3vn"))))
+    (build-system julia-build-system)
+    (arguments `(#:tests? #f)) ;; FIX ME
+    (propagated-inputs
+     (list julia-staticarrays))
+    (native-inputs
+     (list julia-offsetarrays
+           julia-statsbase))
+    (home-page "https://github.com/JuliaGeometry/Contour.jl")
+    (synopsis "Calculating contour curves for 2D scalar fields in Julia")
+    (description "This package provides a generic implementation of the
+@url{https://en.wikipedia.org/wiki/Marching_squares, marching squares}
+algorithm for tracing contour curves on a scalar 2D field.")
+    (license license:expat)))
+
+(define-public julia-unicodeplots
+  (package
+    (name "julia-unicodeplots")
+    (version "2.12.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaPlots/UnicodePlots.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0plkczznx1297m1lviczkm4873yl29anr5csgyhh9vnvyf1606y2"))))
+    (build-system julia-build-system)
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'adjust-tests
+             (lambda _
+               ;; It is unclear why these tests fail and why some
+               ;; have a suprise dependency on AstroIO (from FileIO)
+               (substitute* "test/runtests.jl"
+                 ((".*tst_world_age.*") "")
+                 ((".*tst_io.*") "")
+                 ((".*tst_densityplot.*") ""))
+               (substitute* "test/tst_canvas.jl"
+                 ((".*HeatmapCanvas, \"heatmap\".*") ""))
+               (substitute* "test/tst_histogram.jl"
+                 (("testset.*keyword.*" all)
+                  (string-append all " return;\n"))
+                 (("testset.*vertical\".*" all)
+                  (string-append all " return;\n")))
+               (substitute* "test/tst_barplot.jl"
+                 (("testset.*maximum.*" all)
+                  (string-append all " return;\n")))
+               (substitute* "test/tst_spy.jl"
+                 (("testset.*parameters.*" all)
+                  (string-append all " return;\n")))
+               (substitute* "test/tst_boxplot.jl"
+                 (("testset.*default.*" all)
+                  (string-append all " return;\n"))
+                 (("testset.*scaling.*" all)
+                  (string-append all " return;\n")))
+               (substitute* "test/tst_volume.jl"
+                 (("testset.*cube.*" all)
+                  (string-append all " return;\n"))))))))
+    (propagated-inputs
+     (list julia-colortypes
+           julia-contour
+           julia-crayons
+           julia-fileio
+           julia-freetypeabstraction
+           julia-lazymodules
+           julia-marchingcubes
+           julia-nanmath
+           julia-staticarrays
+           julia-statsbase
+           julia-unitful))
+    (native-inputs
+     (list julia-colortypes
+           julia-imagemagick
+           julia-referencetests
+           julia-stablerngs))
+    (home-page "https://github.com/JuliaPlots/UnicodePlots.jl")
+    (synopsis "Unicode-based scientific plotting for working in the terminal")
+    (description "Advanced Unicode plotting library designed for use in Julia's REPL.")
+    (license license:expat)))
+
+(define-public julia-lazymodules
+  (package
+    (name "julia-lazymodules")
+    (version "0.3.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/johnnychen94/LazyModules.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "11xz0aw5w338pka9jf3r7mfhgm98fnqzsky5ig9z7b996z0m7lpk"))))
+    (build-system julia-build-system)
+    (native-inputs
+     (list julia-colors
+           julia-offsetarrays))
+    (home-page "https://github.com/johnnychen94/LazyModules.jl")
+    (synopsis "Lazily load Julia modules")
+    (description "This package provides package developers an alternative
+option to delay package loading until used. If some dependency is not used,
+then users don't need to pay for its latency.")
+    (license license:expat)))
+
+(define-public julia-marchingcubes
+  (package
+    (name "julia-marchingcubes")
+    (version "0.1.8")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGeometry/MarchingCubes.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "14k47lz33j0fiashykf2a8ayiv482k5jkgw0iircw55mdkdrnxc3"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f))    ; Maybe later
+    (propagated-inputs
+     (list julia-precompiletools
+           julia-staticarrays))
+    #;
+    (native-inputs
+     (list julia-benchmarktools
+           julia-geometrybasics
+           julia-meshes
+           julia-plyio))
+    (home-page "https://github.com/JuliaGeometry/MarchingCubes.jl")
+    (synopsis "Efficient Implementation of Marching Cubes' Cases with Topological Guarantees")
+    (description "Julia port of Efficient Implementation of Marching Cubes' Cases with Topological Guarantees.")
+    (license license:expat)))
+
 (define-public julia-snoopprecompile
   (package
     (name "julia-snoopprecompile")
@@ -769,6 +979,187 @@ densities and objects associated with a density in Julia.")
 precompile code needed by your package, particularly on Julia 1.8 and higher.")
     (license license:expat)))
 
+(define-public julia-snoopcompile
+  (package
+    (name "julia-snoopcompile")
+    (version "1.7.2")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/timholy/SnoopCompile.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1xy0y5s7q980fl0kygvjbmn74i3sjpzbizsgvis70gd2fibz80h7"))))
+    (build-system julia-build-system)
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'adjust-test-suite
+             (lambda _
+               ;; This module fails to load its dependencies in the 'check phase.
+               (substitute* "test/runtests.jl"
+                 ((".*snoopi\\.jl.*") ""))
+               (substitute* "test/snoopi.jl"
+                 (("testset \"snoopi\" begin")
+                  "testset \"snoopi\" begin return")))))))
+    (propagated-inputs
+     (list julia-snoopcompileanalysis
+           julia-snoopcompilebot
+           julia-snoopcompilecore))
+    (native-inputs
+     (list
+       ;julia-jld
+       ;julia-matlang
+       ))
+    (home-page "https://timholy.github.io/SnoopCompile.jl/dev/")
+    (synopsis "Making packages work faster with more extensive precompilation")
+    (description "SnoopCompile observes the Julia compiler, causing it to
+record the functions and argument types it's compiling.  From these lists of
+methods, you can generate lists of @code{precompile} directives that may reduce
+the latency between loading packages.")
+    (license license:expat)))
+
+(define-public julia-snoopcompileanalysis
+  (package/inherit julia-snoopcompile
+    (name "julia-snoopcompileanalysis")
+    (arguments
+     (list
+       #:tests? #f      ; No test folder
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "SnoopCompileAnalysis"))))))
+    (propagated-inputs
+     (list julia-cthulhu
+           julia-orderedcollections))
+    (native-inputs '())
+    ))
+
+(define-public julia-snoopcompilebot
+  (package/inherit julia-snoopcompile
+    (name "julia-snoopcompilebot")
+    (arguments
+     (list
+       #:tests? #f      ; Tests to be run in SnoopCompile.jl
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "SnoopCompileBot"))))))
+    (propagated-inputs
+     (list julia-filepathsbase
+           julia-snoopcompileanalysis
+           julia-snoopcompilecore
+           julia-yaml))
+    (native-inputs '())
+    ))
+
+(define-public julia-snoopcompilecore
+  (package/inherit julia-snoopcompile
+    (name "julia-snoopcompilecore")
+    (arguments
+     (list
+       #:tests? #f      ; No test folder
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "SnoopCompileCore"))))))
+    (propagated-inputs '())
+    (native-inputs '())
+    ))
+
+(define-public julia-cthulhu
+  (package
+    (name "julia-cthulhu")
+    (version "1.6.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaDebug/Cthulhu.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1ziax1378kvyzikm4cigg4mq44r085zczqa0mkcbw5g36gcma6qi"))))
+    (build-system julia-build-system)
+    (arguments
+     `(#:tests? #f))        ; Skip for now
+    (propagated-inputs
+     (list julia-codetracking
+           julia-foldingtrees))
+    (native-inputs
+     (list julia-staticarrays))
+    (home-page "https://github.com/JuliaDebug/Cthulhu.jl")
+    (synopsis "Slow descent into madness")
+    (description "Cthulhu can help you debug type inference issues by
+recursively showing the @code{code_typed} output until you find the exact point
+where inference gave up, messed up, or did something unexpected.  Using the
+Cthulhu interface you can debug type inference problems faster.")
+    (license license:expat)))
+
+(define-public julia-codetracking
+  (package
+    (name "julia-codetracking")
+    (version "1.3.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/timholy/CodeTracking.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0j6mclc7y1vpib5chj3hkabz9zbmdl76jgcr7314f5kbrdqjybbi"))))
+    (build-system julia-build-system)
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'adjust-test-suite
+             (lambda _
+               (substitute* "test/runtests.jl"
+                 (("test pkgfiles\\(\"Color")
+                  "test_skip pkgfiles\(\"Color")))))))
+    (home-page "https://github.com/timholy/CodeTracking.jl")
+    (synopsis "It's editing-time, do you know where your methods are?")
+    (description "CodeTracking can be thought of as an extension of Julia's
+InteractiveUtils library. It provides an interface for obtaining:
+@enumerate
+@item the strings and expressions of method definitions
+@item the method signatures at a specific file & line number
+@item location information for \"dynamic\" code that might have moved since it
+was first loaded
+@item a list of files that comprise a particular package.@end enumerate")
+    (license license:expat)))
+
+(define-public julia-foldingtrees
+  (package
+    (name "julia-foldingtrees")
+    (version "1.2.1")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaCollections/FoldingTrees.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1q3w44z1h9j22ykdwwgl8qdm9621m0qqwz4wd2rs2aj0921pdmm4"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-abstracttrees))
+    (home-page "https://github.com/JuliaCollections/FoldingTrees.jl")
+    (synopsis "Dynamic tree structure with control over the accessibility of node children")
+    (description "FoldingTrees implements a dynamic tree structure in which
+some nodes may be \"folded,\" i.e., marked to avoid descent among that node's
+children.  It also supports interactive text menus based on folding trees.")
+    (license license:expat)))
+
 (define-public julia-jlfzf
   (package
     (name "julia-jlfzf")
@@ -1133,6 +1524,192 @@ native to Julia.  Use it with the @code{@@bind} macro in Pluto.")
      (list julia-bufferedstreams
            julia-json))))
 
+;; TODO: Unbundle fonts, more?
+(define-public julia-makie
+  (package
+    (name "julia-makie")
+    (version "0.17.13")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/MakieOrg/Makie.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0s9rkfmshl3nz82zkgia6fxmfhz4v26ixam6ybqw8swlshdfijrd"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list ;julia-animations
+           ;julia-colorbrewer
+           julia-colorschemes
+           julia-colortypes
+           julia-colors
+           julia-contour
+           julia-distributions
+           julia-docstringextensions
+           julia-ffmpeg
+           julia-fileio
+           julia-fixedpointnumbers
+           julia-formatting
+           julia-freetype
+           julia-freetypeabstraction
+           julia-geometrybasics
+           ;julia-gridlayout
+           ;julia-imageio
+           julia-intervalsets
+           ;julia-isoband
+           ;julia-kerneldensity
+           julia-latexstrings
+           julia-makiecore
+           ;julia-match
+           ;julia-mathtexengine
+           julia-observables
+           julia-offsetarrays
+           ;julia-packing
+           julia-plotutils
+           ;julia-polygonops
+           julia-relocatablefolders
+           julia-showoff
+           ;julia-signeddistancefields
+           julia-statsbase
+           julia-statsfuns
+           julia-structarrays
+           julia-unicodefun))
+    (home-page "https://docs.makie.org/stable")
+    (synopsis "Interactive data visualizations and plotting in Julia")
+    (description "Makie is a data visualization ecosystem for the Julia
+programming language.")
+    (license license:expat)))
+
+(define-public julia-makiecore
+  (package/inherit julia-makie
+    (name "julia-makiecore")
+    (version "0.4.0")       ; Same source, different version
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "MakieCore"))))))
+    (propagated-inputs
+     (list julia-observables))
+    (synopsis "Backend core for Makie")))
+
+(define-public julia-cairomakie
+  (package/inherit julia-makie
+    (name "julia-cairomakie")
+    (version "0.8.13")      ; Same source, different version
+    (arguments
+     (list
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-after 'unpack 'chdir
+             (lambda _
+               (chdir "CairoMakie"))))))
+    (propagated-inputs
+     (list ;julia-cairo
+           julia-colors
+           ;julia-fftw
+           julia-fileio
+           julia-freetype
+           julia-geometrybasics
+           julia-makie))
+    (synopsis "Cairo Backend for Makie")))
+
+(define-public julia-freetype
+  (package
+    (name "julia-freetype")
+    (version "4.1.0")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGraphics/FreeType.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "08kf1x1c7gvllds1ryv6zwy9ai85p50a509ndlcjrkiw31i612m8"))))
+    (build-system julia-build-system)
+    (propagated-inputs
+     (list julia-cenum
+           julia-freetype2-jll))
+    (home-page "https://github.com/JuliaGraphics/FreeType.jl")
+    (synopsis "FreeType 2 bindings for Julia")
+    (description "This package provides FreeType bindings for Julia.")
+    (license license:zlib)))
+
+(define-public julia-freetypeabstraction
+  (package
+    (name "julia-freetypeabstraction")
+    (version "0.9.9")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGraphics/FreeTypeAbstraction.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "0zqpwysvxjqh5lmsz7lysgyid7xnis23rr0xzn3fwxlncka7dbyl"))
+        (snippet
+         #~(begin
+             (use-modules (guix build utils))
+             ;; Also find fonts in Guix environments.
+             (substitute* "src/findfonts.jl"
+               (("\"/usr/share/fonts\"," all)
+                (string-append all "\n            "
+                               "\"/run/current-system/profile/share/fonts\","
+                               "\n            "
+                               "joinpath(get(ENV, \"GUIX_ENVIRONMENT\", homedir()),"
+                               "\"share/fonts\"),"
+                               "\n            "
+                               "joinpath(get(ENV, \"GUIX_PROFILE\", homedir()),"
+                               "\"share/fonts\"),") ))))))
+    (build-system julia-build-system)
+    (arguments
+     (list
+       #:tests? #f          ; Can't skip the one test as needed
+       #:phases
+       #~(modify-phases %standard-phases
+           (add-before 'check 'skip-findfont-test
+             (lambda _
+               (substitute* "test/runtests.jl"
+                 ;; Can't make this find font-dejavu
+                 (("@test findfont\\(font") "@test_skip findfont(font")))))))
+    (propagated-inputs
+     (list julia-colorvectorspace
+           julia-colors
+           julia-freetype
+           julia-geometrybasics))
+    (home-page "https://github.com/JuliaGraphics/FreeTypeAbstraction.jl")
+    (synopsis "Julian abstraction layer over FreeType.jl")
+    (description
+     "This package provides an abstraction layer over the FreeType Julia module.")
+    (license license:expat)))
+
+;; ready to upstream
+(define-public julia-observables
+  (package
+    (name "julia-observables")
+    (version "0.5.4")
+    (source
+      (origin
+        (method git-fetch)
+        (uri (git-reference
+               (url "https://github.com/JuliaGizmos/Observables.jl")
+               (commit (string-append "v" version))))
+        (file-name (git-file-name name version))
+        (sha256
+         (base32 "1l0rk60nrwwgcifqs72x76z9dv1kq6rvcbhy63kp27yqfsx6c20s"))))
+    (build-system julia-build-system)
+    (home-page "https://github.com/JuliaGizmos/Observables.jl")
+    (synopsis "Observable ref")
+    (description "This package provides the @code{Observable}s type in Julia,
+which are like @code{Ref}s but you can listen to changes.")
+    (license license:expat)))
+
 (define-public julia-simplebufferstream
   (package
     (name "julia-simplebufferstream")
@@ -2066,7 +2643,7 @@ that still support Julia versions older than 1.6.")
        ("julia-fileio" ,julia-fileio)
        ;("julia-imagefiltering" ,julia-imagefiltering)
        ("julia-imagemagick" ,julia-imagemagick)
-       ;("julia-quartzimageio" ,julia-quartzimageio)
+       ;("julia-quartzimageio" ,julia-quartzimageio)    ; for macOS
        ("julia-requires" ,julia-requires)))
     ;(native-inputs
     ; `(;("julia-gtk" ,julia-gtk)
diff --git a/gn/services/pluto.scm b/gn/services/pluto.scm
index 64e82ac..420e2cf 100644
--- a/gn/services/pluto.scm
+++ b/gn/services/pluto.scm
@@ -43,33 +43,14 @@
                (requirement '(networking))
                (modules '((gnu build shepherd)
                           (gnu system file-systems)))
-               #;
-               (start #~(make-forkexec-constructor/container
-                          ;(list #$(file-append package "/runpluto.sh") #$port)
-                          ;(list #$(file-append package "/runpluto"))
-                          (list #$(file-append package "/runsliderservice"))
-                          #:log-file "/var/log/pluto.log"
-                          #:user "julia"
-                          #:group "julia"
-                          ;; This prevents the service from using /root as $HOME.
-                          #:environment-variables '()
-                          #:mappings (list (file-system-mapping
-                                             (source "/home/jovyan")
-                                             (target source)
-                                             (writable? #t))
-                                           (file-system-mapping
-                                             (source "/etc/ssl")
-                                             (target source)))))
                (start #~(make-forkexec-constructor
-                          ;(list #$(file-append package "/runpluto.sh") #$port)
-                          ;(list #$(file-append package "/runpluto"))
-                          '(#$(file-append package "/runsliderservice"))
+                          '(#$(file-append package "/bin/runsliderserver"))
                           #:log-file "/var/log/pluto.log"
                           #:user "julia"
                           #:group "julia"
-                          ;; This prevents the service from using /root as $HOME.
-                          ;#:environment-variables '()
-                          ))
+                          #:environment-variables
+                          (list "SSL_CERT_DIR=/etc/ssl/certs"
+                                "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt")))
                (stop  #~(make-kill-destructor))))))))
 
 (define pluto-service-type