如何使用 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().,它就会识别该模块,并提供一个列表按 T​​ab 键时可用功能的数量。

我可能搞砸了 iexerlobserver.start(). 和其他组合)之间的翻译,并且我假设生成的错误消息(连同没有自动完成)意味着缺少模块。