I hope your proposed fixes make all of this go away:
info: downloading installer
Welcome to Julia!
This will download and install the official Julia Language distribution
and its version manager Juliaup.
Juliaup will be installed into the Juliaup home directory, located at:
/Users/lewis/.juliaup
The julia, juliaup and other commands will be added to
Juliaup's bin directory, located at:
/Users/lewis/.juliaup/bin
This path will then be added to your PATH environment variable by
modifying the profile files located at:
/Users/lewis/.zshrc
Julia will look for a new version of Juliaup itself every 1440 minutes when you start julia.
You can uninstall at any time with juliaup self uninstall and these
changes will be reverted.
✔ Do you want to install with these default configuration choices? · Customize installation
✔ Enter the folder where you want to install Juliaup · /Users/lewis/.juliaup
? Do you want to add the Julia binaries to your PATH by manipulating various she✔ Do you want to add the Julia binaries to your PATH by manipulating various shell startup scripts? · yes
✔ Do you want to add channel specific symlinks? · no
? Enter minutes between check for new version at julia startup, use 0 to disable✔ Enter minutes between check for new version at julia startup, use 0 to disable · 1440
? Enter minutes between check for new version by a background task, use 0 to dis✔ Enter minutes between check for new version by a background task, use 0 to disable · 0
Juliaup will be installed into the Juliaup home directory, located at:
/Users/lewis/.juliaup
The julia, juliaup and other commands will be added to
Juliaup's bin directory, located at:
/Users/lewis/.juliaup/bin
This path will then be added to your PATH environment variable by
modifying the profile files located at:
/Users/lewis/.zshrc
Julia will look for a new version of Juliaup itself every 1440 minutes when you start julia.
✔ Do you want to install with these custom configuration choices? · Proceed with installation
Now installing Juliaup
Checking for new Julia versions
Installing Julia 1.11.5+0.aarch64.apple.darwin14
Checking standard library notarization............................................................done.
Configured the default Julia version to be 'release'.
Julia was successfully installed on your system.
Depending on which shell you are using, run one of the following
commands to reload the PATH environment variable:
. /Users/lewis/.zshrc
This is what I call a technical install and you essentially made the same point that curling to a shell is not a good way.
I would also recommend a symlink directly to the currently chosen Julia version’s binary.
This also seems a bit dodgy:
# >>> juliaup initialize >>>
# !! Contents within this block are managed by juliaup !!
path=('/Users/lewis/.juliaup/bin' $path)
export PATH
# <<< juliaup initialize <<<
After success, none of these options to juliaup are particularly friendly:
juliaup
The Julia Version Manager
Usage: juliaup <COMMAND>
Commands:
default Set the default Julia version
add Add a specific Julia version or channel to your system. Access via `julia +{channel}` e.g. `julia +1.6`
link Link an existing Julia binary to a custom channel name
list List all available channels
override Manage directory overrides
update Update all or a specific channel to the latest Julia version
remove Remove a Julia version from your system
status Show all installed Julia versions
gc Garbage collect uninstalled Julia versions
config Juliaup configuration
self Manage this juliaup installation
completions Generate tab-completion scripts for your shell
help Print this message or the help of the given subcommand(s)
Options:
-h, --help Print help
-V, --version Print version
To launch a specific Julia version, use `julia +{channel}` e.g. `julia +1.6`.
Entering just `julia` uses the default channel set via `juliaup default`.
The above works because juliaup puts the symlink in its own directory where it has appropriate permissions and doesn’t mess with symlinks in other places and that’s a good thing. But, it seems to rely on putting juliaup at the front of the path list:
echo $PATH
/Users/lewis/.juliaup/bin:/Users/lewis/.local/bin:/Users/lewis/nim-2.0.8/bin:/Users/lewis/.nimble/bin:/Library/Frameworks/Python.framework/Versions/3.12/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/TeX/texbin
This is the observed breakage for the LSP server in Sublime Text AFTER explicitly setting the path to the Julia binary reported by which julia
:
The julia server has crashed 5 times in the last 180 seconds.
You can try to Restart it or you can choose Cancel to disable it for this window for the duration of the current session. Re-enable by running "LSP: Enable Language Server In Project" from the Command Palette.
This is the funky path problem by going through .juliaup and running julialauncher instead of julia. So, the julia binary is shrouded. What does julialuancher do? it should just contain the target of the chosen julia. This seems like an anti-pattern. I will try to solve with explicit symlink in /usr/local/bin to the actual julia binary, but this doesn’t work. Of course, this means I won’t be able to switch to a different julia binary. For my uses, I don’t need that capability. I may have had a permissions problem with my symlink, which I have fixed. Probably could have solved this with juliaup.
This output seems to munge the notions of channel and version. Currently, channel I thought referred to things like (incomplete list): nightly, release, rc. But, earlier on the release process hadn’t been as disciplined as it is now so there were just several builds of a version.
I’ve been super polite and respectful so far but I can’t see how any of this meets anyone’s definition of “friendly”. Sure, we will have different opinions of that, but c’mon.
Finally, it shows every chip implementation. On a given machine we have only one chip. Perhaps with a robust VM, you could cross-run other architectures but is that the intention. Wouldn’t it make sense to limit the list to the architecture of the current machine. Julia itself has a function to return that–surely Rust might provide a library function for that (or one could be written).
Now the juliaup status and juliaup update commands seem plenty friendly enough.
I still can get behind “one way, this way” for installation and management. But, there is a long way to go get to friendly. It looks like a lot of work, but if this mostly one-time investment can get Julia to a new place and save lots of future, fragmented work then by all means go for it.