1{
2 lib,
3 requireFile,
4 lang,
5 majorVersion ? null,
6}:
7
8let
9 allVersions =
10 lib.flip map
11 # N.B. Versions in this list should be ordered from newest to oldest.
12 [
13 {
14 version = "14.1.0";
15 lang = "en";
16 language = "English";
17 sha256 = "1kxdvm3i7nn3ws784y972h2br1n0y82kkkjvz7c5llssv6d3pgj8";
18 installer = "WolframEngine_14.1.0_LIN.sh";
19 }
20 {
21 version = "13.3.0";
22 lang = "en";
23 language = "English";
24 sha256 = "96106ac8ed6d0e221a68d846117615c14025320f927e5e0ed95b1965eda68e31";
25 installer = "WolframEngine_13.3.0_LINUX.sh";
26 }
27 {
28 version = "13.2.0";
29 lang = "en";
30 language = "English";
31 sha256 = "1xvg1n64iq52jxnk9y551m5iwkkz6cxzwyw28h8d0kq36aaiky24";
32 installer = "WolframEngine_13.2.0_LINUX.sh";
33 }
34 {
35 version = "13.1.0";
36 lang = "en";
37 language = "English";
38 sha256 = "1659kyp38a8xknic95pynx9fsgn96i8jn9lnk89pc8n6vydw1460";
39 installer = "WolframEngine_13.1.0_LINUX.sh";
40 }
41 {
42 version = "13.0.1";
43 lang = "en";
44 language = "English";
45 sha256 = "1rrxi7d51m02407k719fq829jzanh550wr810i22n3irhk8axqga";
46 installer = "WolframEngine_13.0.1_LINUX.sh";
47 }
48 {
49 version = "13.0.0";
50 lang = "en";
51 language = "English";
52 sha256 = "10cpwllz9plxz22iqdh6xgkxqphl9s9nq8ax16pafjll6j9kqy1q";
53 installer = "WolframEngine_13.0.0_LINUX.sh";
54 }
55 ]
56 (
57 {
58 version,
59 lang,
60 language,
61 sha256,
62 installer,
63 }:
64 {
65 inherit version lang;
66 name = "wolfram-engine-${version}" + lib.optionalString (lang != "en") "-${lang}";
67 src = requireFile {
68 name = installer;
69 message = ''
70 This nix expression requires that ${installer} is
71 already part of the store. Download the file from
72 https://www.wolfram.com/engine/ and add it to the nix store
73 with nix-store --add-fixed sha256 <FILE>.
74 '';
75 inherit sha256;
76 };
77 }
78 );
79 minVersion =
80 if majorVersion == null then
81 lib.elemAt (builtins.splitVersion (lib.elemAt allVersions 0).version) 0
82 else
83 majorVersion;
84 maxVersion = toString (1 + builtins.fromJSON minVersion);
85in
86lib.findFirst (
87 l: (l.lang == lang && l.version >= minVersion && l.version < maxVersion)
88) (throw "Version ${minVersion} in language ${lang} not supported") allVersions