Subject: Re: [bug#73197] Status wip-julia-update (was Re: bug#73197: [PATCH] gnu: julia: Update to 1.9.3.)

From: [email-masked]
Date: Fri, 21 Feb 2025 00:10:02 +0100

Hi Simon,

As a follow-up, here's how nix uses the local depot.
It wraps julia by setting the following variable to subfolders of the "meta" derivation 

1. JULIA_DEPOT_PATH to ~/.julia and the local depot
home/alex/.julia:/nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/depot

2. JULIA_PROJECT_PATH to a custom project
/nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project

3. JULIA_LOAD_PATH to the Project.toml
@:/nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project/Project.toml:@v#.#:@stdlib
(not sure what the weird characters are about, like '@')

The depot itself has the following structure
- source code in clones/ with UUID
- compiled library in compiled
- source code in packages/ with package name (again !)

❯ tree /nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/depot/ -L 2
/nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/depot/
├── artifacts
│   └── Overrides.toml
├── clones
    ├── 944b1d66-785c-5afd-91f1-9de20f533193
    │   ├── LICENSE.md
    │   ├── Project.toml
    │   ├── README.md
    │   ├── src
    │   │   ├── CodecZlib.jl
    │   │   ├── compression.jl
    │   │   ├── decompression.jl
    │   │   └── libz.jl
    │   └── test
    │       ├── abra.gz
    │       ├── foo.txt.gz
    │       └── runtests.jl
│  ── [...]
|── compiled
|   └── v1.9
|       ├── CodecZlib
|       │   ├── 1TI30_fZ84u.ji
|       │   └── 1TI30_fZ84u.so
|       ├── [...]
├── logs
│   └── manifest_usage.toml
├── packages
│   ├── CodecZlib
|        └── Ndt0H
|          ├── LICENSE.md
|          ├── Project.toml
|          ├── README.md
|          ├── src
|          │   ├── CodecZlib.jl
|          │   ├── compression.jl
|          │   ├── decompression.jl
|          │   └── libz.jl
|          └── test
|              ├── abra.gz
|              ├── foo.txt.gz
|              └── runtests.jl
|      └── [...]
|   ├── registries
└── scratchspaces
    └── 44cfe95a-1eb2-52ea-b672-e2afdf69b78f

Finally, the project itself has a TOML file defining the package we want to install (in my case CSV) and the Manifest.toml for this package (I think)

❯ tree /nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project/
/nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project/
├── Manifest.toml
└── Project.toml

❯ cat /nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project/Project.toml
     [deps]
     CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b"

❯ head -n 10 /nix/store/ap871sp56qx74k4hz2nlnjvpys8pdh7j-julia-depot/project/Manifest.toml
     # This file is machine-generated - editing it directly is not advised

     julia_version = "1.9.4"
     manifest_format = "2.0"
     project_hash = "de8e0bb32b50d890eb0519dc7725e6a1f422aa74"

     [[deps.Artifacts]]
     uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"

     [[deps.Base64]]

Hope that helps,

Alexis