1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
{
config,
lib,
beam,
callPackage,
stdenv,
wxSupport ? true,
systemd,
systemdSupport ? lib.meta.availableOn stdenv.hostPlatform systemd,
__splicedPackages,
# Name of this set in `pkgs`, needed to splice the package sets it builds.
scopeName,
}:
let
self = beam;
pkgs = __splicedPackages;
callErlang =
drv: args:
let
genericBuilder =
versionArgs: import ../development/interpreters/erlang/generic-builder.nix (versionArgs // args);
in
pkgs.callPackage (import drv genericBuilder) { };
packagesFor =
name: erlang:
callPackage ../development/beam-modules {
inherit erlang;
splicePath = [
scopeName
"packages"
name
];
};
in
{
latestVersion = "erlang_28";
# Each
interpreters = {
erlang = self.interpreters.${self.latestVersion};
# Standard Erlang versions, using the generic builder.
#
# Three versions are supported according to https://github.com/erlang/otp/security
erlang_29 = callErlang ../development/interpreters/erlang/29.nix {
inherit wxSupport systemdSupport;
};
erlang_28 = callErlang ../development/interpreters/erlang/28.nix {
inherit wxSupport systemdSupport;
};
erlang_27 = callErlang ../development/interpreters/erlang/27.nix {
inherit wxSupport systemdSupport;
};
# Other Beam languages. These are built with `beam.interpreters.erlang`. To
# access for example elixir built with different version of Erlang, use
# `beam.packages.erlang_27.elixir`.
inherit (self.packages.erlang)
elixir
elixir_1_20
elixir_1_19
elixir_1_18
elixir_1_17
elixir-ls
lfe
;
};
# Each field in this tuple represents all Beam packages in nixpkgs built with
# appropriate Erlang/OTP version.
packages = {
erlang = self.packages.${self.latestVersion};
erlang_29 = packagesFor "erlang_29" self.interpreters.erlang_29;
erlang_28 = packagesFor "erlang_28" self.interpreters.erlang_28;
erlang_27 = packagesFor "erlang_27" self.interpreters.erlang_27;
}
// lib.optionalAttrs config.allowAliases {
erlang_26 = throw "'erlang_26' has been removed, as it is EOL"; # added 2026-04-01
};
}
// lib.optionalAttrs config.allowAliases {
erlang_26 = throw "'erlang_26' has been removed, as it is EOL"; # added 2026-04-01
elixir_1_16 = throw "'elixir_1_16' has been removed, due to the removal of erlang_26 as EOL"; # added 2026-04-01
elixir_1_15 = throw "'elixir_1_15' has been removed, due to the removal of erlang_26 as EOL"; # added 2026-04-01
packagesWith = throw "'beam.packagesWith' has been removed, as such sets cannot be cross compiled. Use an OTP specific set, e.g. 'beam27Packages', and 'overrideScope' to change any of its members."; # added 2026-08-18
}
|