···4748 extraFlags = mkOption {
49 description = "Extra flags to pass to the k3s command.";
050 default = "";
51 example = "--no-deploy traefik --cluster-cidr 10.24.0.0/16";
52 };
···4748 extraFlags = mkOption {
49 description = "Extra flags to pass to the k3s command.";
50+ type = types.str;
51 default = "";
52 example = "--no-deploy traefik --cluster-cidr 10.24.0.0/16";
53 };
+2
nixos/modules/services/mail/postfix.nix
···560561 transport = mkOption {
562 default = "";
0563 description = "
564 Entries for the transport map, cf. man-page transport(8).
565 ";
···573574 dnsBlacklistOverrides = mkOption {
575 default = "";
0576 description = "contents of check_client_access for overriding dnsBlacklists";
577 };
578
···560561 transport = mkOption {
562 default = "";
563+ type = types.lines;
564 description = "
565 Entries for the transport map, cf. man-page transport(8).
566 ";
···574575 dnsBlacklistOverrides = mkOption {
576 default = "";
577+ type = types.lines;
578 description = "contents of check_client_access for overriding dnsBlacklists";
579 };
580
+1
nixos/modules/services/misc/rippled.nix
···389390 extraConfig = mkOption {
391 default = "";
0392 description = ''
393 Extra lines to be added verbatim to the rippled.cfg configuration file.
394 '';
···389390 extraConfig = mkOption {
391 default = "";
392+ type = types.lines;
393 description = ''
394 Extra lines to be added verbatim to the rippled.cfg configuration file.
395 '';
+1
nixos/modules/services/misc/svnserve.nix
···24 };
2526 svnBaseDir = mkOption {
027 default = "/repos";
28 description = "Base directory from which Subversion repositories are accessed.";
29 };
···24 };
2526 svnBaseDir = mkOption {
27+ type = types.str;
28 default = "/repos";
29 description = "Base directory from which Subversion repositories are accessed.";
30 };
+5
nixos/modules/services/misc/synergy.nix
···2324 screenName = mkOption {
25 default = "";
026 description = ''
27 Use the given name instead of the hostname to identify
28 ourselves to the server.
29 '';
30 };
31 serverAddress = mkOption {
032 description = ''
33 The server address is of the form: [hostname][:port]. The
34 hostname must be the address or hostname of the server. The
···46 enable = mkEnableOption "the Synergy server (send keyboard and mouse events)";
4748 configFile = mkOption {
049 default = "/etc/synergy-server.conf";
50 description = "The Synergy server configuration file.";
51 };
52 screenName = mkOption {
053 default = "";
54 description = ''
55 Use the given name instead of the hostname to identify
···57 '';
58 };
59 address = mkOption {
060 default = "";
61 description = "Address on which to listen for clients.";
62 };
···2324 screenName = mkOption {
25 default = "";
26+ type = types.str;
27 description = ''
28 Use the given name instead of the hostname to identify
29 ourselves to the server.
30 '';
31 };
32 serverAddress = mkOption {
33+ type = types.str;
34 description = ''
35 The server address is of the form: [hostname][:port]. The
36 hostname must be the address or hostname of the server. The
···48 enable = mkEnableOption "the Synergy server (send keyboard and mouse events)";
4950 configFile = mkOption {
51+ type = types.path;
52 default = "/etc/synergy-server.conf";
53 description = "The Synergy server configuration file.";
54 };
55 screenName = mkOption {
56+ type = types.str;
57 default = "";
58 description = ''
59 Use the given name instead of the hostname to identify
···61 '';
62 };
63 address = mkOption {
64+ type = types.str;
65 default = "";
66 description = "Address on which to listen for clients.";
67 };
+1
nixos/modules/services/misc/weechat.nix
···20 type = types.str;
21 };
22 binary = mkOption {
023 description = "Binary to execute (by default \${weechat}/bin/weechat).";
24 example = literalExample ''
25 ''${pkgs.weechat}/bin/weechat-headless
···20 type = types.str;
21 };
22 binary = mkOption {
23+ type = types.path;
24 description = "Binary to execute (by default \${weechat}/bin/weechat).";
25 example = literalExample ''
26 ''${pkgs.weechat}/bin/weechat-headless
···46 enable = mkEnableOption "the Netatalk AFP fileserver";
4748 port = mkOption {
049 default = 548;
50 description = "TCP port to be used for AFP.";
51 };
···68 };
6970 path = mkOption {
071 default = "";
72 example = "afp-data";
73 description = "Share not the whole user home but this subdirectory path.";
···7576 basedirRegex = mkOption {
77 example = "/home";
078 description = "Regex which matches the parent directory of the user homes.";
79 };
80
···46 enable = mkEnableOption "the Netatalk AFP fileserver";
4748 port = mkOption {
49+ type = types.port;
50 default = 548;
51 description = "TCP port to be used for AFP.";
52 };
···69 };
7071 path = mkOption {
72+ type = types.str;
73 default = "";
74 example = "afp-data";
75 description = "Share not the whole user home but this subdirectory path.";
···7778 basedirRegex = mkOption {
79 example = "/home";
80+ type = types.str;
81 description = "Regex which matches the parent directory of the user homes.";
82 };
83
···61 };
6263 advertisedAddresses = mkOption {
064 default = [];
65 description = "List of IP addresses this server is advertised under. See NetInfo(5)";
66 };
···61 };
6263 advertisedAddresses = mkOption {
64+ type = types.listOf types.str;
65 default = [];
66 description = "List of IP addresses this server is advertised under. See NetInfo(5)";
67 };
···92 enable = mkEnableOption "XtreemFS";
9394 homeDir = mkOption {
095 default = "/var/lib/xtreemfs";
96 description = ''
97 XtreemFS home dir for the xtreemfs user.
···109110 uuid = mkOption {
111 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e40";
0112 description = ''
113 Must be set to a unique identifier, preferably a UUID according to
114 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···117 };
118 port = mkOption {
119 default = 32638;
0120 description = ''
121 The port to listen on for incoming connections (TCP).
122 '';
123 };
124 address = mkOption {
0125 example = "127.0.0.1";
126 default = "";
127 description = ''
···131 };
132 httpPort = mkOption {
133 default = 30638;
0134 description = ''
135 Specifies the listen port for the HTTP service that returns the
136 status page.
137 '';
138 };
139 syncMode = mkOption {
0140 default = "FSYNC";
141 example = "FDATASYNC";
142 description = ''
···229230 uuid = mkOption {
231 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e41";
0232 description = ''
233 Must be set to a unique identifier, preferably a UUID according to
234 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···237 };
238 port = mkOption {
239 default = 32636;
0240 description = ''
241 The port to listen on for incoming connections (TCP).
242 '';
243 };
244 address = mkOption {
245 example = "127.0.0.1";
0246 default = "";
247 description = ''
248 If specified, it defines the interface to listen on. If not
···251 };
252 httpPort = mkOption {
253 default = 30636;
0254 description = ''
255 Specifies the listen port for the HTTP service that returns the
256 status page.
···258 };
259 syncMode = mkOption {
260 default = "FSYNC";
0261 example = "FDATASYNC";
262 description = ''
263 The sync mode influences how operations are committed to the disk
···367368 uuid = mkOption {
369 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e42";
0370 description = ''
371 Must be set to a unique identifier, preferably a UUID according to
372 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···375 };
376 port = mkOption {
377 default = 32640;
0378 description = ''
379 The port to listen on for incoming connections (TCP and UDP).
380 '';
381 };
382 address = mkOption {
383 example = "127.0.0.1";
0384 default = "";
385 description = ''
386 If specified, it defines the interface to listen on. If not
···389 };
390 httpPort = mkOption {
391 default = 30640;
0392 description = ''
393 Specifies the listen port for the HTTP service that returns the
394 status page.
···92 enable = mkEnableOption "XtreemFS";
9394 homeDir = mkOption {
95+ type = types.path;
96 default = "/var/lib/xtreemfs";
97 description = ''
98 XtreemFS home dir for the xtreemfs user.
···110111 uuid = mkOption {
112 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e40";
113+ type = types.str;
114 description = ''
115 Must be set to a unique identifier, preferably a UUID according to
116 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···119 };
120 port = mkOption {
121 default = 32638;
122+ type = types.port;
123 description = ''
124 The port to listen on for incoming connections (TCP).
125 '';
126 };
127 address = mkOption {
128+ type = types.str;
129 example = "127.0.0.1";
130 default = "";
131 description = ''
···135 };
136 httpPort = mkOption {
137 default = 30638;
138+ type = types.port;
139 description = ''
140 Specifies the listen port for the HTTP service that returns the
141 status page.
142 '';
143 };
144 syncMode = mkOption {
145+ type = types.enum [ "ASYNC" "SYNC_WRITE_METADATA" "SYNC_WRITE" "FDATASYNC" "ASYNC" ];
146 default = "FSYNC";
147 example = "FDATASYNC";
148 description = ''
···235236 uuid = mkOption {
237 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e41";
238+ type = types.str;
239 description = ''
240 Must be set to a unique identifier, preferably a UUID according to
241 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···244 };
245 port = mkOption {
246 default = 32636;
247+ type = types.port;
248 description = ''
249 The port to listen on for incoming connections (TCP).
250 '';
251 };
252 address = mkOption {
253 example = "127.0.0.1";
254+ type = types.str;
255 default = "";
256 description = ''
257 If specified, it defines the interface to listen on. If not
···260 };
261 httpPort = mkOption {
262 default = 30636;
263+ type = types.port;
264 description = ''
265 Specifies the listen port for the HTTP service that returns the
266 status page.
···268 };
269 syncMode = mkOption {
270 default = "FSYNC";
271+ type = types.enum [ "ASYNC" "SYNC_WRITE_METADATA" "SYNC_WRITE" "FDATASYNC" "ASYNC" ];
272 example = "FDATASYNC";
273 description = ''
274 The sync mode influences how operations are committed to the disk
···378379 uuid = mkOption {
380 example = "eacb6bab-f444-4ebf-a06a-3f72d7465e42";
381+ type = types.str;
382 description = ''
383 Must be set to a unique identifier, preferably a UUID according to
384 RFC 4122. UUIDs can be generated with `uuidgen` command, found in
···387 };
388 port = mkOption {
389 default = 32640;
390+ type = types.port;
391 description = ''
392 The port to listen on for incoming connections (TCP and UDP).
393 '';
394 };
395 address = mkOption {
396 example = "127.0.0.1";
397+ type = types.str;
398 default = "";
399 description = ''
400 If specified, it defines the interface to listen on. If not
···403 };
404 httpPort = mkOption {
405 default = 30640;
406+ type = types.port;
407 description = ''
408 Specifies the listen port for the HTTP service that returns the
409 status page.
···4647 user = mkOption {
48 default = null;
049 description = ''
50 The user the yandex-disk daemon should run as.
51 '';
52 };
5354 directory = mkOption {
055 default = "/home/Yandex.Disk";
56 description = "The directory to use for Yandex.Disk storage";
57 };
···4647 user = mkOption {
48 default = null;
49+ type = types.nullOr types.str;
50 description = ''
51 The user the yandex-disk daemon should run as.
52 '';
53 };
5455 directory = mkOption {
56+ type = types.path;
57 default = "/home/Yandex.Disk";
58 description = "The directory to use for Yandex.Disk storage";
59 };
+34-2
nixos/modules/services/networking/bind.nix
···89 bindUser = "named";
100000000000000000000000000000011 confFile = pkgs.writeText "named.conf"
12 ''
13 include "/etc/bind/rndc.key";
···7273 cacheNetworks = mkOption {
74 default = ["127.0.0.0/24"];
075 description = "
76 What networks are allowed to use us as a resolver. Note
77 that this is for recursive queries -- all networks are
···8384 blockedNetworks = mkOption {
85 default = [];
086 description = "
87 What networks are just blocked.
88 ";
···9091 ipv4Only = mkOption {
92 default = false;
093 description = "
94 Only use ipv4, even if the host supports ipv6.
95 ";
···9798 forwarders = mkOption {
99 default = config.networking.nameservers;
0100 description = "
101 List of servers we should forward requests to.
102 ";
···120121 zones = mkOption {
122 default = [];
0123 description = "
124 List of zones we claim authority over.
125- master=false means slave server; slaves means addresses
126- who may request zone transfer.
127 ";
128 example = [{
129 name = "example.com";
···89 bindUser = "named";
1011+ bindZoneOptions = {
12+ name = mkOption {
13+ type = types.str;
14+ description = "Name of the zone.";
15+ };
16+ master = mkOption {
17+ description = "Master=false means slave server";
18+ type = types.bool;
19+ };
20+ file = mkOption {
21+ type = types.either types.str types.path;
22+ description = "Zone file resource records contain columns of data, separated by whitespace, that define the record.";
23+ };
24+ masters = mkOption {
25+ type = types.listOf types.str;
26+ description = "List of servers for inclusion in stub and secondary zones.";
27+ };
28+ slaves = mkOption {
29+ type = types.listOf types.str;
30+ description = "Addresses who may request zone transfers.";
31+ default = [];
32+ };
33+ extraConfig = mkOption {
34+ type = types.str;
35+ description = "Extra zone config to be appended at the end of the zone section.";
36+ default = "";
37+ };
38+ };
39+40 confFile = pkgs.writeText "named.conf"
41 ''
42 include "/etc/bind/rndc.key";
···101102 cacheNetworks = mkOption {
103 default = ["127.0.0.0/24"];
104+ type = types.listOf types.str;
105 description = "
106 What networks are allowed to use us as a resolver. Note
107 that this is for recursive queries -- all networks are
···113114 blockedNetworks = mkOption {
115 default = [];
116+ type = types.listOf types.str;
117 description = "
118 What networks are just blocked.
119 ";
···121122 ipv4Only = mkOption {
123 default = false;
124+ type = types.bool;
125 description = "
126 Only use ipv4, even if the host supports ipv6.
127 ";
···129130 forwarders = mkOption {
131 default = config.networking.nameservers;
132+ type = types.listOf types.str;
133 description = "
134 List of servers we should forward requests to.
135 ";
···153154 zones = mkOption {
155 default = [];
156+ type = types.listOf (types.submodule [ { options = bindZoneOptions; } ]);
157 description = "
158 List of zones we claim authority over.
00159 ";
160 example = [{
161 name = "example.com";
···4041 serverName = mkOption {
42 default = "hades.arpa";
043 description = "
44 IRCD server name.
45 ";
···4748 sid = mkOption {
49 default = "0NL";
050 description = "
51 IRCD server unique ID in a net of servers.
52 ";
···5455 description = mkOption {
56 default = "Hybrid-7 IRC server.";
057 description = "
58 IRCD server description.
59 ";
···62 rsaKey = mkOption {
63 default = null;
64 example = literalExample "/root/certificates/irc.key";
065 description = "
66 IRCD server RSA key.
67 ";
···70 certificate = mkOption {
71 default = null;
72 example = literalExample "/root/certificates/irc.pem";
073 description = "
74 IRCD server SSL certificate. There are some limitations - read manual.
75 ";
···7778 adminEmail = mkOption {
79 default = "<bit-bucket@example.com>";
080 example = "<name@domain.tld>";
81 description = "
82 IRCD server administrator e-mail.
···86 extraIPs = mkOption {
87 default = [];
88 example = ["127.0.0.1"];
089 description = "
90 Extra IP's to bind.
91 ";
···9394 extraPort = mkOption {
95 default = "7117";
096 description = "
97 Extra port to avoid filtering.
98 ";
···4041 serverName = mkOption {
42 default = "hades.arpa";
43+ type = types.str;
44 description = "
45 IRCD server name.
46 ";
···4849 sid = mkOption {
50 default = "0NL";
51+ type = types.str;
52 description = "
53 IRCD server unique ID in a net of servers.
54 ";
···5657 description = mkOption {
58 default = "Hybrid-7 IRC server.";
59+ type = types.str;
60 description = "
61 IRCD server description.
62 ";
···65 rsaKey = mkOption {
66 default = null;
67 example = literalExample "/root/certificates/irc.key";
68+ type = types.nullOr types.path;
69 description = "
70 IRCD server RSA key.
71 ";
···74 certificate = mkOption {
75 default = null;
76 example = literalExample "/root/certificates/irc.pem";
77+ type = types.nullOr types.path;
78 description = "
79 IRCD server SSL certificate. There are some limitations - read manual.
80 ";
···8283 adminEmail = mkOption {
84 default = "<bit-bucket@example.com>";
85+ type = types.str;
86 example = "<name@domain.tld>";
87 description = "
88 IRCD server administrator e-mail.
···92 extraIPs = mkOption {
93 default = [];
94 example = ["127.0.0.1"];
95+ type = types.listOf types.str;
96 description = "
97 Extra IP's to bind.
98 ";
···100101 extraPort = mkOption {
102 default = "7117";
103+ type = types.str;
104 description = "
105 Extra port to avoid filtering.
106 ";
+3-1
nixos/modules/services/networking/mailpile.nix
···21 enable = mkEnableOption "Mailpile the mail client";
2223 hostname = mkOption {
024 default = "localhost";
25 description = "Listen to this hostname or ip.";
26 };
27 port = mkOption {
28- default = "33411";
029 description = "Listen on this port.";
30 };
31 };
···21 enable = mkEnableOption "Mailpile the mail client";
2223 hostname = mkOption {
24+ type = types.str;
25 default = "localhost";
26 description = "Listen to this hostname or ip.";
27 };
28 port = mkOption {
29+ type = types.port;
30+ default = 33411;
31 description = "Listen on this port.";
32 };
33 };
+2-1
nixos/modules/services/networking/prayer.nix
···44 enable = mkEnableOption "the prayer webmail http server";
4546 port = mkOption {
47- default = "2080";
048 description = ''
49 Port the prayer http server is listening to.
50 '';
···44 enable = mkEnableOption "the prayer webmail http server";
4546 port = mkOption {
47+ default = 2080;
48+ type = types.port;
49 description = ''
50 Port the prayer http server is listening to.
51 '';
+4
nixos/modules/services/networking/quassel.nix
···45 };
4647 interfaces = mkOption {
048 default = [ "127.0.0.1" ];
49 description = ''
50 The interfaces the Quassel daemon will be listening to. If `[ 127.0.0.1 ]',
···54 };
5556 portNumber = mkOption {
057 default = 4242;
58 description = ''
59 The port number the Quassel daemon will be listening to.
···6263 dataDir = mkOption {
64 default = "/home/${user}/.config/quassel-irc.org";
065 description = ''
66 The directory holding configuration files, the SQlite database and the SSL Cert.
67 '';
···6970 user = mkOption {
71 default = null;
072 description = ''
73 The existing user the Quassel daemon should run as. If left empty, a default "quassel" user will be created.
74 '';
···45 };
4647 interfaces = mkOption {
48+ type = types.listOf types.str;
49 default = [ "127.0.0.1" ];
50 description = ''
51 The interfaces the Quassel daemon will be listening to. If `[ 127.0.0.1 ]',
···55 };
5657 portNumber = mkOption {
58+ type = types.port;
59 default = 4242;
60 description = ''
61 The port number the Quassel daemon will be listening to.
···6465 dataDir = mkOption {
66 default = "/home/${user}/.config/quassel-irc.org";
67+ type = types.str;
68 description = ''
69 The directory holding configuration files, the SQlite database and the SSL Cert.
70 '';
···7273 user = mkOption {
74 default = null;
75+ type = types.nullOr types.str;
76 description = ''
77 The existing user the Quassel daemon should run as. If left empty, a default "quassel" user will be created.
78 '';
···28 };
2930 arguments = mkOption {
031 default = "-v -o pa";
32 description = ''
33 Arguments to pass to the daemon. Defaults to a local pulseaudio
···36 };
3738 user = mkOption {
039 default = "shairport";
40 description = ''
41 User account name under which to run shairport-sync. The account
···28 };
2930 arguments = mkOption {
31+ type = types.str;
32 default = "-v -o pa";
33 description = ''
34 Arguments to pass to the daemon. Defaults to a local pulseaudio
···37 };
3839 user = mkOption {
40+ type = types.str;
41 default = "shairport";
42 description = ''
43 User account name under which to run shairport-sync. The account
+6
nixos/modules/services/networking/ssh/lshd.nix
···2930 portNumber = mkOption {
31 default = 22;
032 description = ''
33 The port on which to listen for connections.
34 '';
···3637 interfaces = mkOption {
38 default = [];
039 description = ''
40 List of network interfaces where listening for connections.
41 When providing the empty list, `[]', lshd listens on all
···4647 hostKey = mkOption {
48 default = "/etc/lsh/host-key";
049 description = ''
50 Path to the server's private key. Note that this key must
51 have been created, e.g., using "lsh-keygen --server |
···7980 loginShell = mkOption {
81 default = null;
082 description = ''
83 If non-null, override the default login shell with the
84 specified value.
···8889 srpKeyExchange = mkOption {
90 default = false;
091 description = ''
92 Whether to enable SRP key exchange and user authentication.
93 '';
···106 };
107108 subsystems = mkOption {
0109 description = ''
110 List of subsystem-path pairs, where the head of the pair
111 denotes the subsystem name, and the tail denotes the path to
···2930 portNumber = mkOption {
31 default = 22;
32+ type = types.port;
33 description = ''
34 The port on which to listen for connections.
35 '';
···3738 interfaces = mkOption {
39 default = [];
40+ type = types.listOf types.str;
41 description = ''
42 List of network interfaces where listening for connections.
43 When providing the empty list, `[]', lshd listens on all
···4849 hostKey = mkOption {
50 default = "/etc/lsh/host-key";
51+ type = types.str;
52 description = ''
53 Path to the server's private key. Note that this key must
54 have been created, e.g., using "lsh-keygen --server |
···8283 loginShell = mkOption {
84 default = null;
85+ type = types.nullOr types.str;
86 description = ''
87 If non-null, override the default login shell with the
88 specified value.
···9293 srpKeyExchange = mkOption {
94 default = false;
95+ type = types.bool;
96 description = ''
97 Whether to enable SRP key exchange and user authentication.
98 '';
···111 };
112113 subsystems = mkOption {
114+ type = types.listOf types.path;
115 description = ''
116 List of subsystem-path pairs, where the head of the pair
117 denotes the subsystem name, and the tail denotes the path to
+1
nixos/modules/services/web-apps/mediawiki.nix
···180 };
181182 name = mkOption {
0183 default = "MediaWiki";
184 example = "Foobar Wiki";
185 description = "Name of the wiki.";
···180 };
181182 name = mkOption {
183+ type = types.str;
184 default = "MediaWiki";
185 example = "Foobar Wiki";
186 description = "Name of the wiki.";
···404405 logError = mkOption {
406 default = "stderr";
0407 description = "
408 Configures logging.
409 The first parameter defines a file that will store the log. The
···404405 logError = mkOption {
406 default = "stderr";
407+ type = types.str;
408 description = "
409 Configures logging.
410 The first parameter defines a file that will store the log. The
···2526 sessionPath = mkOption {
27 default = [];
028 example = literalExample "[ pkgs.gnome3.gpaste ]";
29 description = ''
30 Additional list of packages to be added to the session search path.
···2526 sessionPath = mkOption {
27 default = [];
28+ type = types.listOf types.package;
29 example = literalExample "[ pkgs.gnome3.gpaste ]";
30 description = ''
31 Additional list of packages to be added to the session search path.
···118119 sessionPath = mkOption {
120 default = [];
0121 example = literalExample "[ pkgs.gnome3.gpaste ]";
122 description = ''
123 Additional list of packages to be added to the session search path.
···118119 sessionPath = mkOption {
120 default = [];
121+ type = types.listOf types.package;
122 example = literalExample "[ pkgs.gnome3.gpaste ]";
123 description = ''
124 Additional list of packages to be added to the session search path.
···4243 sessionPath = mkOption {
44 default = [];
045 example = literalExample "[ pkgs.gnome3.gpaste ]";
46 description = ''
47 Additional list of packages to be added to the session search path.
···4243 sessionPath = mkOption {
44 default = [];
45+ type = types.listOf types.package;
46 example = literalExample "[ pkgs.gnome3.gpaste ]";
47 description = ''
48 Additional list of packages to be added to the session search path.
···15 '';
16in
17000018stdenv.mkDerivation rec {
19 name = "ocaml${ocaml.version}-nocrypto-${version}";
20 version = "0.5.4";
···15 '';
16in
1718+if !versionAtLeast ocaml.version "4.08"
19+then throw "nocrypto is not available for OCaml ${ocaml.version}"
20+else
21+22stdenv.mkDerivation rec {
23 name = "ocaml${ocaml.version}-nocrypto-${version}";
24 version = "0.5.4";