Nix with elixir-desktop

I’m trying to get GitHub - elixir-desktop/desktop: Elixir library to write Windows, macOS, Linux, Android apps with OTP24 & Phoenix.LiveView running.

To get it running one needs erlang compiled against wxwidgets - which I think nix already does, since I can run :observer.start() in iex. But it seems that wxWebView is missing somehow.

I have the following shell.nix:

let
  pkgs = import <nixpkgs> {};
  unstable = import <nixos-unstable> { config = { allowUnfree = true; }; };
in with pkgs;
  stdenv.mkDerivation {
  name = "elixir-project";
  buildInputs = [
  ];
  nativeBuildInputs = [
    unstable.erlang
    unstable.elixir
    unstable.wxGTK
    unstable.gtk3
    unstable.webkitgtk
    unstable.gcc
    unstable.sqlite
  ];
  shellHook = let
   in ''
   '';
}

Where nixos-unstable is: unstable https://nixos.org/channels/nixos-unstable

Any ideas what’s missing here?


Version: Erlang/OTP 24 [erts-12.1.3] [source] [64-bit] [smp:32:32] [ds:32:32:10] [async-threads:1] [jit] / 24.1.4

Error message becaus of course I forgot posting it:

** (Mix) Could not start application todo_app: exited in: TodoApp.start(:normal, [])
    ** (EXIT) an exception was raised:
        ** (MatchError) no match of right hand side value: {:error, {{:EXIT, {{:badmatch, {:error, {{:undefined_function, {:wxWebView, :new, 0}}, [{:wxe_util, :rec, 1, [file: 'wxe_util.erl', line: 110]}, {Desktop.Fallback, :webview_new, 1, [file: 'lib/desktop/fallback.ex', line: 47]}, {Desktop.Window, :init, 1, [file: 'lib/desktop/window.ex', line: 189]}, {:wx_object, :init_it, 6, [file: 'wx_object.erl', line: 404]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}}, [{Desktop.Window, :start_link, 1, [file: 'lib/desktop/window.ex', line: 104]}, {:supervisor, :do_start_child_i, 3, [file: 'supervisor.erl', line: 414]}, {:supervisor, :do_start_child, 2, [file: 'supervisor.erl', line: 400]}, {:supervisor, :handle_start_child, 2, [file: 'supervisor.erl', line: 706]}, {:supervisor, :handle_call, 3, [file: 'supervisor.erl', line: 455]}, {:gen_server, :try_handle_call, 4, [file: 'gen_server.erl', line: 721]}, {:gen_server, :handle_msg, 6, [file: 'gen_server.erl', line: 750]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}, {:child, :undefined, TodoWindow, {Desktop.Window, :start_link, [[app: :todo_app, id: TodoWindow, title: "TodoApp", size: {600, 500}, icon: "icon.png", menubar: TodoApp.MenuBar, icon_menu: TodoApp.Menu, url: &TodoWeb.Endpoint.url/0, app: :todo_app, id: TodoWindow]]}, :permanent, false, 5000, :worker, [Desktop.Window]}}}
            (todo_app 1.0.0) lib/todo_app.ex:35: TodoApp.start/2
            (kernel 8.1.2) application_master.erl:293: :application_master.start_it_old/4
1 Like

what wxwidgets version do you have installed? ie. most likely install 3.1.5, then reinstall/compile erlang…

Tried with wxGTK31 which should be version 3.1.4 and wxGTK which should be 2.8.12.1.

But I actually don’t know against which version erlang was compiled…

Edit: it seems like it is compiled against 2.8.12.1 [1] - which would make sense. Hm, so I’ll need to patch the erlang package first.

[1] nixpkgs/generic-builder.nix at c5ed8beb478a8ca035f033f659b60c89500a3034 · NixOS/nixpkgs · GitHub

does asdf work on nix? if then probably easier…

Maybe and definitively not :smiley:

The cool thing about nix is that you can relatively easily overwrite package definitions and use your own. I’ll try to make it work and report back if I get it working.

At least I now have a starting point for what might be wrong - thanks ^.^

1 Like