从在非NixOS机器上安装Nix软件包管理器的那一刻起,请向10岁的孩子解释一下。例如,我在Mac上,甚至没有~/.config
目录。
我找到了以下(可能)相关资源,但我无法将它们拼凑在一起:
Elixir 1.5.1 with Erlang 20.0 on NixOS 18.03?
我在哪里确切指定beam.packages.erlang<rel>.elixir
?
Nix Pills, Chapter 14. Override Design Pattern
这需要这个吗?
最后,我安装了带有Erlang 21的最新Elixir,如下所示,但我确定这不是应该做的。
$ # 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 nixpkgs
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
答案 0 :(得分:3)
您处在正确的轨道上;无需重新开始。
要从nix repl
安装软件包,可以使用:i
命令。
nix-repl> :i pkgs.beam.packages.erlangR21.elixir
这会将软件包安装到~/.nix-profile
中的$PATH
中,因此您可以对其进行调用。等同于运行
nix-env -iA nixpkgs.beam.packages.erlangR21.elixir
nix-store -r
(或等效为nix-store --realise
)被认为是非常底层的工具。它只能创建到程序包的符号链接,而这几乎不是您想要的。默认情况下,它甚至不会创建垃圾回收根,因此,如果您进行垃圾回收,则符号链接将断开。
尽管nix-env -iA
是安装软件的有效方法,但是您可以考虑使用~/.nix-profile
全局状态,并避免这种状态。在我看来,elixir
与项目而不是用户密切相关。例如,您可能想对某些项目使用不同的版本,并且与从事该项目的其他人共享您的开发工具可能很有意义。也就是说,您可以使用nix-shell
。这是一个example of shell.nix.
答案 1 :(得分:3)
您可以创建一个专用的Shell来与您的项目一起使用,并避免全局安装/为当前用户安装运行时。
Erlang / OTP 20上Elixir的最小nix外壳示例:
default.nix
文件的内容:
with import <nixpkgs> {};
stdenv.mkDerivation rec {
name = "env";
env = buildEnv { name = name; paths = buildInputs; };
buildInputs = [
beam.packages.erlangR20.elixir
inotify-tools
];
}
然后在终端中,导航到保存default.nix
的目录,然后调用nix-shell
。您应该放入具有iex
和mix
可用的shell。
答案 2 :(得分:1)
很高兴我当时发布了这个问题,因为答案非常棒,但是从那时起,我意识到安装解释器没有真正意义(特别是因为有时需要多个版本),因此只需按需使用nix-shell
对于活动频道中的当前版本:
nix-shell -p erlang
对于不在当前频道中的其他版本,可以指定一个特定频道:
nix-shell -I nixpkgs=channel:nixos-unstable -p erlangR22
或在您的NixOS/nixpkgs
克隆中添加Nix表达式的路径:
$ nix-shell -I nixpkgs=~/clones/nixpkgs -p erlangR23
$ nix-env -qaP 'erlang*'
# ...
nixos.erlangR20 erlang-20.3.8.9
nixos.erlangR21 erlang-21.3.8.3
nixos.erlang erlang-22.1.7
# ...
$ nix-env -f ~/clones/nixpkgs/ -qaP 'erlang*'
# ...
nixos.erlangR20 erlang-20.3.8.9
nixos.erlangR21 erlang-21.3.8.3
nixos.erlang erlang-22.1.7
# ...
=== >>> erlangR23 erlang-23.0.2 <<<====
This answer进入了更多细节。