Please explain it as you would to a 10-year-old, from the point after the Nix package manager is installed on a non-NixOS machine. For example, I am on a Mac, and there isn't even a ~/.config
directory.
I found the following (probably) relevant resources, and I can't put the pieces together:
- Nixpkgs manual, 9.1. BEAM Languages (Erlang, Elixir & LFE)
- Elixir 1.5.1 with Erlang 20.0 on NixOS 18.03?
Where do I specify the beam.packages.erlang<rel>.elixir
exactly?
- Nixpkgs manual, 6.4. Modify packages via packageOverrides
- Nix Pills, Chapter 14. Override Design Pattern
Is this needed for this?
In the end I installed the latest Elixir with Erlang 21 as shown below, but I'm sure that this is not how it is supposed to be done.
$ # Cloned the `nixpkgs` repo from github and started the repl
$ # in the same the directory.
$
$ nix repl
Welcome to Nix version 2.0.4. Type :? for help.
nix-repl> :l . # if in the cloned `nixpkgs` repo
Added 9182 variables.
nix-repl> pkgs.beam.packages.erlangR21.elixir
«derivation /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv»
nix-repl> :q
$ nix-store --realise /nix/store/vcadn6d6wgk1yjlci458vy8jqv66wwdy-elixir-1.6.5.drv
3条答案
按热度按时间fdbelqdn1#
You are on the right track; there is no need to start over.
To install the package from
nix repl
you can use the:i
command.This will install the package into your
~/.nix-profile
where it will be in$PATH
, so you can call it. It is equivalent to runningnix-store -r
(or equivalently,nix-store --realise
) is considered a very low-level tool. It can only create a symlink to a package and that is rarely what you want. It doesn't even create a garbage collection root by default, so if you garbage collect, the symlink will become broken.Although
nix-env -iA
is a valid way of installing software, you may consider~/.nix-profile
global state and avoid it for that reason. It seems to me likeelixir
that is more tied to a project, rather than to your user. For example you may want to use distinct versions for some projects and it may make sense to share your development tools with others who work on a project. That is you can usenix-shell
for. Here's an example of shell.nix.x7yiwoj42#
您可以创建一个用于项目的专用shell,并避免为当前用户全局安装运行时。
Erlang/OTP 20上Elixir的最小nix shell示例:
default.nix
文件的内容:然后在终端中,导航到保存
default.nix
的目录,并调用nix-shell
。您应该进入一个有iex
和mix
可用的shell。nxagd54h3#
Glad I posted this question back then because the answers are terrific, but since then I realized that there is no real point in installing interpreters (especially because sometimes multiple versions are needed), so just use
nix-shell
on demand.For the current version in the active channel:
For other versions not in the current channel, a specific channel can be given:
Or add path to the Nix expression in your
NixOS/nixpkgs
clone:How to find packages with attribute paths on the console
This answer goes more into the details.