如何使用 Nix 包管理器安装带有 Observer 的 Erlang 或 Elixir?
How to install Erlang or Elixir with Observer using the Nix package manager?
每次我安装 Erlang 时,我都没有 Observer。在装有 Xmonad 和 Debian 9 运行 的 Ubuntu 笔记本电脑上使用以下命令 ,看起来它们两者都导致安装相同的包:
nix-env -iA pkgs.beam.packages.erlangR22
nix-env -iA nixpkgs.beam.interpreters.erlang
nix-env -iA nixpkgs.beam.interpreters.erlangR22_odbc_javac
Nixpkgs manuals 15.2. BEAM Languages (Erlang, Elixir & LFE) section(版本19.09.1484.84586a4514d)根本没有提到Observer。它有 DianaOlympos
的最近更新确实提到了它,尽管我尝试了所有这些包,但没有快乐:
Many Erlang/OTP distributions available in beam.interpreters
have versions with ODBC and/or Java enabled or without wx (no observer support). For example, there's beam.interpreters.erlangR22_odbc_javac
, which corresponds to beam.interpreters.erlangR22
and beam.interpreters.erlangR22_nox
, which corresponds to beam.interpreters.erlangR22
.
Shane Sveller pointed it out that the wxGTK
package needs to be set up using propagatedBuildInputs
, but not sure how to do that. (Simply just installing wxGTK
then Erlang doesn't work of course; was naive enough to try it. Also found out that chapter 20 of Nix Pills 正是关于这个话题。)
这也是问题“”的后续问题,但当时我没有意识到缺少 Observer...
更新:显然,it works somewhere out of the box。 (可能在 NixOS 上。)
我对 erlang 进行了覆盖,以便启用 wx 支持:
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
let
inherit (lib) optionals;
erlang_wx = erlangR21.override {
wxSupport = true;
};
elixir = (beam.packagesWith erlang_wx).elixir.override {
version = "1.9.2";
rev = "ffe7a577cc80f37381dc289c820842d346002364";
sha256 = "19yn6nx6r627f5zbyc7ckgr96d6b45sgwx95n2gp2imqwqvpj8wc";
};
in
mkShell {
buildInputs = [ elixir git ]
# For file_system on Linux.
++ optionals stdenv.isLinux [ inotify-tools wxGTK ]
# For file_system on macOS.
++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
# For file_system on macOS.
CoreFoundation
CoreServices
wxmac
]);
}
保存这个(例如shell.nix
),然后运行它:
$ nix-shell shell.nix
# or, if you are in the same directory:
$ nix-shell
在我的机器上工作!
注意:buildInputs
中的 wxmac
特定于 MacOS(以及 wxGTK
至 Linux)。为您的 OS、here are the available wx
packages.
找到合适的包裹
有点不好意思承认我是个白痴,但是观察者一直都在()...
出于某种原因,它不会在 erl
shell 上自动完成,但是一旦输入并执行 observer:start().
,它就会识别该模块,并提供一个列表按 Tab 键时可用功能的数量。
我可能搞砸了 iex
和 erl
(observer.start().
和其他组合)之间的翻译,并且我假设生成的错误消息(连同没有自动完成)意味着缺少模块。
每次我安装 Erlang 时,我都没有 Observer。在装有 Xmonad 和 Debian 9 运行 的 Ubuntu 笔记本电脑上使用以下命令 ,看起来它们两者都导致安装相同的包:
nix-env -iA pkgs.beam.packages.erlangR22
nix-env -iA nixpkgs.beam.interpreters.erlang
nix-env -iA nixpkgs.beam.interpreters.erlangR22_odbc_javac
Nixpkgs manuals 15.2. BEAM Languages (Erlang, Elixir & LFE) section(版本19.09.1484.84586a4514d)根本没有提到Observer。它有 DianaOlympos
的最近更新确实提到了它,尽管我尝试了所有这些包,但没有快乐:
Many Erlang/OTP distributions available in
beam.interpreters
have versions with ODBC and/or Java enabled or without wx (no observer support). For example, there'sbeam.interpreters.erlangR22_odbc_javac
, which corresponds tobeam.interpreters.erlangR22
andbeam.interpreters.erlangR22_nox
, which corresponds tobeam.interpreters.erlangR22
.
Shane Sveller pointed it out that the wxGTK
package needs to be set up using propagatedBuildInputs
, but not sure how to do that. (Simply just installing wxGTK
then Erlang doesn't work of course; was naive enough to try it. Also found out that chapter 20 of Nix Pills 正是关于这个话题。)
这也是问题“
更新:显然,it works somewhere out of the box。 (可能在 NixOS 上。)
我对 erlang 进行了覆盖,以便启用 wx 支持:
{ pkgs ? import <nixpkgs> {} }:
with pkgs;
let
inherit (lib) optionals;
erlang_wx = erlangR21.override {
wxSupport = true;
};
elixir = (beam.packagesWith erlang_wx).elixir.override {
version = "1.9.2";
rev = "ffe7a577cc80f37381dc289c820842d346002364";
sha256 = "19yn6nx6r627f5zbyc7ckgr96d6b45sgwx95n2gp2imqwqvpj8wc";
};
in
mkShell {
buildInputs = [ elixir git ]
# For file_system on Linux.
++ optionals stdenv.isLinux [ inotify-tools wxGTK ]
# For file_system on macOS.
++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
# For file_system on macOS.
CoreFoundation
CoreServices
wxmac
]);
}
保存这个(例如shell.nix
),然后运行它:
$ nix-shell shell.nix
# or, if you are in the same directory:
$ nix-shell
在我的机器上工作!
注意:buildInputs
中的 wxmac
特定于 MacOS(以及 wxGTK
至 Linux)。为您的 OS、here are the available wx
packages.
有点不好意思承认我是个白痴,但是观察者一直都在(
出于某种原因,它不会在 erl
shell 上自动完成,但是一旦输入并执行 observer:start().
,它就会识别该模块,并提供一个列表按 Tab 键时可用功能的数量。
我可能搞砸了 iex
和 erl
(observer.start().
和其他组合)之间的翻译,并且我假设生成的错误消息(连同没有自动完成)意味着缺少模块。