···107108- The `dovecot` systemd service was renamed from `dovecot2` to `dovecot`. The former is now just an alias. Update any overrides on the systemd unit to the new name.
10900000000110- The `yeahwm` package and `services.xserver.windowManager.yeahwm` module were removed due to the package being broken and unmaintained upstream.
111112- The `services.postgresql` module now sets up a systemd unit `postgresql.target`. Depending on `postgresql.target` guarantees that postgres is in read-write mode and initial/ensure scripts were executed. Depending on `postgresql.service` only guarantees a read-only connection.
···107108- The `dovecot` systemd service was renamed from `dovecot2` to `dovecot`. The former is now just an alias. Update any overrides on the systemd unit to the new name.
109110+- `Prosody` has been updated to major release 13 which removed some obsoleted modules and brought a couple of major and breaking changes:
111+ - The `http_files` module is now disabled by default because it now requires `http_files_dir` to be configured.
112+ - The `vcard_muc` module has been removed and got replaced by the inbuilt `muc_vcard` module.
113+ - The `http_upload` module has been removed and you must migrate to the `http_file_share` module to stay XEP-0423 compliant. The `httpFileShare` options got expanded to better facility that.
114+ - The `admin_shell` module is now always being loaded to make `prosodyctl` functional.
115+ - The `mime_types_file` setting is now set to `"${pkgs.mailcap}/etc/mime.types"` to prevent errors.
116+ For a complete list of changes, please see [their announcement](https://blog.prosody.im/prosody-13.0.0-released/).
117+118- The `yeahwm` package and `services.xserver.windowManager.yeahwm` module were removed due to the package being broken and unmaintained upstream.
119120- The `services.postgresql` module now sets up a systemd unit `postgresql.target`. Depending on `postgresql.target` guarantees that postgres is in read-write mode and initial/ensure scripts were executed. Depending on `postgresql.service` only guarantees a read-only connection.
+88-102
nixos/modules/services/networking/prosody.nix
···182183 http_files = mkOption {
184 type = types.bool;
185- default = true;
186 description = "Serve static files from a directory over HTTP";
187 };
188···369 kick other. Useful in jitsi-meet to kick ghosts.
370 '';
371 };
372- vcard_muc = mkOption {
373- type = types.bool;
374- default = true;
375- description = "Adds the ability to set vCard for Multi User Chat rooms";
376- };
377378 # Extra parameters. Defaulting to prosody default values.
379 # Adding them explicitly to make them visible from the options
···423 };
424 };
425426- uploadHttpOpts = _: {
427- options = {
428- domain = mkOption {
429- type = types.nullOr types.str;
430- description = "Domain name for the http-upload service";
431- };
432- uploadFileSizeLimit = mkOption {
433- type = types.str;
434- default = "50 * 1024 * 1024";
435- description = "Maximum file size, in bytes. Defaults to 50MB.";
436- };
437- uploadExpireAfter = mkOption {
438- type = types.str;
439- default = "60 * 60 * 24 * 7";
440- description = "Max age of a file before it gets deleted, in seconds.";
441- };
442- userQuota = mkOption {
443- type = types.nullOr types.int;
444- default = null;
445- example = 1234;
446- description = ''
447- Maximum size of all uploaded files per user, in bytes. There
448- will be no quota if this option is set to null.
449- '';
450- };
451- httpUploadPath = mkOption {
452- type = types.str;
453- description = ''
454- Directory where the uploaded files will be stored when the http_upload module is used.
455- By default, uploaded files are put in a sub-directory of the default Prosody storage path (usually /var/lib/prosody).
456- '';
457- default = "/var/lib/prosody";
458- };
459- };
460- };
461-462- httpFileShareOpts = _: {
463- freeformType =
464- with types;
465- let
466- atom = oneOf [
467- int
468- bool
469- str
470- (listOf atom)
471- ];
472- in
473- attrsOf (nullOr atom)
474- // {
475- description = "int, bool, string or list of them";
476 };
477- options.domain = mkOption {
478- type = with types; nullOr str;
479- description = "Domain name for a http_file_share service.";
480 };
481- };
482483 vHostOpts = _: {
484 options = {
···510511 configFile =
512 let
513- httpDiscoItems =
514- optional (cfg.uploadHttp != null) {
515- url = cfg.uploadHttp.domain;
516- description = "HTTP upload endpoint";
517- }
518- ++ optional (cfg.httpFileShare != null) {
519- url = cfg.httpFileShare.domain;
520- description = "HTTP file share endpoint";
521- };
522 mucDiscoItems = builtins.foldl' (
523 acc: muc:
524 [
···546 admins = ${toLua cfg.admins}
547548 modules_enabled = {
549-550 ${lib.concatStringsSep "\n " (
551 lib.mapAttrsToList (name: val: optionalString val "${toLua name};") cfg.modules
552 )}
···575 http_ports = ${toLua cfg.httpPorts}
576 https_ports = ${toLua cfg.httpsPorts}
57700578 ${cfg.extraConfig}
579580 ${lib.concatMapStrings (muc: ''
581 Component ${toLua muc.domain} "muc"
582- modules_enabled = { "muc_mam"; ${optionalString muc.vcard_muc ''"vcard_muc";''} ${optionalString muc.allowners_muc ''"muc_allowners";''} }
583 name = ${toLua muc.name}
584 restrict_room_creation = ${toLua muc.restrictRoomCreation}
585 max_history_messages = ${toLua muc.maxHistoryMessages}
···597 ${muc.extraConfig}
598 '') cfg.muc}
599600- ${lib.optionalString (cfg.uploadHttp != null) ''
601- Component ${toLua cfg.uploadHttp.domain} "http_upload"
602- http_upload_file_size_limit = ${cfg.uploadHttp.uploadFileSizeLimit}
603- http_upload_expire_after = ${cfg.uploadHttp.uploadExpireAfter}
604- ${lib.optionalString (
605- cfg.uploadHttp.userQuota != null
606- ) "http_upload_quota = ${toLua cfg.uploadHttp.userQuota}"}
607- http_upload_path = ${toLua cfg.uploadHttp.httpUploadPath}
608- ''}
609-610- ${lib.optionalString (cfg.httpFileShare != null) ''
611- Component ${toLua cfg.httpFileShare.domain} "http_file_share"
612- ${settingsToLua " http_file_share_" (cfg.httpFileShare // { domain = null; })}
613- ''}
614615 ${lib.concatStringsSep "\n" (
616 lib.mapAttrsToList (n: v: ''
···621 '') cfg.virtualHosts
622 )}
623 '';
624-625in
626{
627 options = {
···817 description = "Additional path in which to look find plugins/modules";
818 };
819820- uploadHttp = mkOption {
821- description = ''
822- Configures the old Prosody builtin HTTP server to handle user uploads.
823- '';
824- type = types.nullOr (types.submodule uploadHttpOpts);
825- default = null;
826- example = {
827- domain = "uploads.my-xmpp-example-host.org";
828- };
829- };
830-831 httpFileShare = mkOption {
832 description = ''
833 Configures the http_file_share module to handle user uploads.
00834 '';
835 type = types.nullOr (types.submodule httpFileShareOpts);
836 default = null;
···919 };
920 };
921000000922 config = mkIf cfg.enable {
923 assertions =
924 let
···941 + genericErrMsg;
942 }
943 {
944- assertion = cfg.uploadHttp != null || cfg.httpFileShare != null || !cfg.xmppComplianceSuite;
945 message = ''
946- You need to setup the http_upload or http_file_share modules through config.services.prosody.uploadHttp
947- or config.services.prosody.httpFileShare to comply with XEP-0423.
948 ''
949 + genericErrMsg;
950 }
···953 errors;
954955 environment.systemPackages = [ cfg.package ];
000956957 environment.etc."prosody/prosody.cfg.lua".source =
958 if cfg.checkConfig then
···993 {
994 User = cfg.user;
995 Group = cfg.group;
996- Type = "forking";
997 RuntimeDirectory = [ "prosody" ];
998 PIDFile = "/run/prosody/prosody.pid";
999- ExecStart = "${cfg.package}/bin/prosodyctl start";
1000 ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
0100101002 MemoryDenyWriteExecute = true;
1003 PrivateDevices = true;
1004 PrivateMounts = true;
···182183 http_files = mkOption {
184 type = types.bool;
185+ default = false;
186 description = "Serve static files from a directory over HTTP";
187 };
188···369 kick other. Useful in jitsi-meet to kick ghosts.
370 '';
371 };
00000372373 # Extra parameters. Defaulting to prosody default values.
374 # Adding them explicitly to make them visible from the options
···418 };
419 };
420421+ httpFileShareOpts =
422+ { config, options, ... }:
423+ {
424+ freeformType =
425+ with types;
426+ let
427+ atom = oneOf [
428+ int
429+ bool
430+ str
431+ (listOf atom)
432+ ];
433+ in
434+ attrsOf (nullOr atom)
435+ // {
436+ description = "int, bool, string or list of them";
437+ };
438+ options = {
439+ domain = mkOption {
440+ type = with types; nullOr str;
441+ description = "Domain name for a http_file_share service.";
442+ };
443+ http_host = mkOption {
444+ type = types.nullOr types.str;
445+ default = null;
446+ description = ''
447+ To avoid an additional DNS record and certificate, you may set this option to your primary domain (e.g. "example.com")
448+ or use a reverse proxy to handle the HTTP for that domain.
449+ '';
450+ };
451+ size_limit = mkOption {
452+ type = types.int;
453+ default = 10 * 1024 * 1024;
454+ defaultText = "10 * 1024 * 1024";
455+ description = "Maximum file size, in bytes.";
456+ };
457+ expires_after = mkOption {
458+ type = types.str;
459+ default = "1 week";
460+ description = "Max age of a file before it gets deleted.";
461+ };
462+ daily_quota = mkOption {
463+ type = types.nullOr types.int;
464+ default = 10 * config.size_limit;
465+ defaultText = lib.literalExpression "10 * ${options.size_limit}";
466+ example = "100*1024*1024";
467+ description = ''
468+ Maximum size of daily uploaded files per user, in bytes.
469+ '';
470+ };
471 };
000472 };
0473474 vHostOpts = _: {
475 options = {
···501502 configFile =
503 let
504+ httpDiscoItems = optional (cfg.httpFileShare != null) {
505+ url = cfg.httpFileShare.domain;
506+ description = "HTTP file share endpoint";
507+ };
00000508 mucDiscoItems = builtins.foldl' (
509 acc: muc:
510 [
···532 admins = ${toLua cfg.admins}
533534 modules_enabled = {
535+ "admin_shell"; -- for prosodyctl
536 ${lib.concatStringsSep "\n " (
537 lib.mapAttrsToList (name: val: optionalString val "${toLua name};") cfg.modules
538 )}
···561 http_ports = ${toLua cfg.httpPorts}
562 https_ports = ${toLua cfg.httpsPorts}
563564+ mime_types_file = "${pkgs.mailcap}/etc/mime.types"
565+566 ${cfg.extraConfig}
567568 ${lib.concatMapStrings (muc: ''
569 Component ${toLua muc.domain} "muc"
570+ modules_enabled = {${optionalString cfg.modules.mam ''" muc_mam",''}${optionalString muc.allowners_muc ''" muc_allowners",''} }
571 name = ${toLua muc.name}
572 restrict_room_creation = ${toLua muc.restrictRoomCreation}
573 max_history_messages = ${toLua muc.maxHistoryMessages}
···585 ${muc.extraConfig}
586 '') cfg.muc}
587588+ ${
589+ lib.optionalString (cfg.httpFileShare != null) ''
590+ Component ${toLua cfg.httpFileShare.domain} "http_file_share"
591+ modules_disabled = { "s2s" }
592+ ''
593+ + lib.optionalString (cfg.httpFileShare.http_host != null) ''
594+ http_host = "${cfg.httpFileShare.http_host}"
595+ ''
596+ + ''
597+ ${settingsToLua " http_file_share_" (cfg.httpFileShare // { domain = null; })}
598+ ''
599+ }
00600601 ${lib.concatStringsSep "\n" (
602 lib.mapAttrsToList (n: v: ''
···607 '') cfg.virtualHosts
608 )}
609 '';
0610in
611{
612 options = {
···802 description = "Additional path in which to look find plugins/modules";
803 };
80400000000000805 httpFileShare = mkOption {
806 description = ''
807 Configures the http_file_share module to handle user uploads.
808+809+ See <https://prosody.im/doc/modules/mod_http_file_share> for a full list of options.
810 '';
811 type = types.nullOr (types.submodule httpFileShareOpts);
812 default = null;
···895 };
896 };
897898+ imports = [
899+ (lib.mkRemovedOptionModule [ "services" "prosody" "uploadHttp" ]
900+ "mod_http_upload has been obsoloted and been replaced by mod_http_file_share which can be configured with httpFileShare options."
901+ )
902+ ];
903+904 config = mkIf cfg.enable {
905 assertions =
906 let
···923 + genericErrMsg;
924 }
925 {
926+ assertion = cfg.httpFileShare != null || !cfg.xmppComplianceSuite;
927 message = ''
928+ You need to setup http_file_share modules through config.services.prosody.httpFileShare to comply with XEP-0423.
0929 ''
930 + genericErrMsg;
931 }
···934 errors;
935936 environment.systemPackages = [ cfg.package ];
937+938+ # prevent error if not all certs are configured by the user
939+ environment.etc."prosody/certs/.dummy".text = "";
940941 environment.etc."prosody/prosody.cfg.lua".source =
942 if cfg.checkConfig then
···977 {
978 User = cfg.user;
979 Group = cfg.group;
980+ Type = "simple";
981 RuntimeDirectory = [ "prosody" ];
982 PIDFile = "/run/prosody/prosody.pid";
983+ ExecStart = "${lib.getExe cfg.package} -F";
984 ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
985+ Restart = "on-abnormal";
986987+ AmbientCapabilities = [ "CAP_NET_BIND_SERVICE" ];
988 MemoryDenyWriteExecute = true;
989 PrivateDevices = true;
990 PrivateMounts = true;
+6-44
nixos/tests/paretosecurity.nix
···8 {
9 imports = [ ./common/user-account.nix ];
1011- networking.firewall.enable = true;
12- services.paretosecurity = {
13- enable = true;
14-15- # Create a patched version of the package that points to the local dashboard
16- # for easier testing
17- package = pkgs.paretosecurity.overrideAttrs (oldAttrs: {
18- postPatch = oldAttrs.postPatch or "" + ''
19- substituteInPlace team/report.go \
20- --replace-warn 'const reportURL = "https://cloud.paretosecurity.com"' \
21- 'const reportURL = "http://cloud"'
22- '';
23- });
24- };
2526 };
2728- nodes.cloud = {
29- networking.firewall.allowedTCPPorts = [ 80 ];
30-31- services.nginx = {
32- enable = true;
33- virtualHosts."cloud" = {
34- locations."/api/v1/team/".extraConfig = ''
35- add_header Content-Type application/json;
36- return 200 '{"message": "Linked device."}';
37- '';
38- };
39- };
40- };
41-42 nodes.xfce =
43 { pkgs, ... }:
44 {
···70 testScript = ''
71 # Test setup
72 terminal.succeed("su - alice -c 'mkdir -p /home/alice/.config'")
73- for m in [terminal, cloud]:
74- m.systemctl("start network-online.target")
75- m.wait_for_unit("network-online.target")
7677 # Test 1: Test the systemd socket is installed & enabled
78 terminal.succeed('systemctl is-enabled paretosecurity.socket')
···91 + "'"
92 )
9394- # Test 3: Test linking
95- terminal.succeed("su - alice -c 'paretosecurity link"
96- + " paretosecurity://enrollTeam/?token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9."
97- + "eyJ0b2tlbiI6ImR1bW15LXRva2VuIiwidGVhbUlEIjoiZHVtbXktdGVhbS1pZCIsImlhdCI6"
98- + "MTcwMDAwMDAwMCwiZXhwIjoxOTAwMDAwMDAwfQ.WgnL6_S0EBJHwF1wEVUG8GtIcoVvK5IjWbZpUeZr4Qw'")
99-100- config = terminal.succeed("cat /home/alice/.config/pareto.toml")
101- assert 'AuthToken = "dummy-token"' in config
102- assert 'TeamID = "dummy-team-id"' in config
103-104- # Test 4: Test the tray icon
105 xfce.wait_for_x()
106 for unit in [
107 'paretosecurity-trayicon',
···115 xfce.succeed("xdotool click 1")
116 xfce.wait_for_text("Run Checks")
117118- # Test 5: Desktop entry
119 xfce.succeed("xdotool mousemove 10 10")
120 xfce.succeed("xdotool click 1") # hide the tray icon window
121 xfce.succeed("xdotool click 1") # show the Applications menu
···123 xfce.succeed("xdotool click 1")
124 xfce.wait_for_text("Pareto Security")
125126- # Test 6: paretosecurity:// URL handler is registered
127 xfce.succeed("su - alice -c 'xdg-open paretosecurity://foo'")
128 '';
129}
···8 {
9 imports = [ ./common/user-account.nix ];
1011+ services.paretosecurity.enable = true;
00000000000001213 };
140000000000000015 nodes.xfce =
16 { pkgs, ... }:
17 {
···43 testScript = ''
44 # Test setup
45 terminal.succeed("su - alice -c 'mkdir -p /home/alice/.config'")
46+ terminal.systemctl("start network-online.target")
47+ terminal.wait_for_unit("network-online.target")
04849 # Test 1: Test the systemd socket is installed & enabled
50 terminal.succeed('systemctl is-enabled paretosecurity.socket')
···63 + "'"
64 )
6566+ # Test 3: Test the tray icon
000000000067 xfce.wait_for_x()
68 for unit in [
69 'paretosecurity-trayicon',
···77 xfce.succeed("xdotool click 1")
78 xfce.wait_for_text("Run Checks")
7980+ # Test 4: Desktop entry
81 xfce.succeed("xdotool mousemove 10 10")
82 xfce.succeed("xdotool click 1") # hide the tray icon window
83 xfce.succeed("xdotool click 1") # show the Applications menu
···85 xfce.succeed("xdotool click 1")
86 xfce.wait_for_text("Pareto Security")
8788+ # Test 5: paretosecurity:// URL handler is registered
89 xfce.succeed("su - alice -c 'xdg-open paretosecurity://foo'")
90 '';
91}
+25-37
nixos/tests/xmpp/prosody.nix
···2 cert =
3 pkgs:
4 pkgs.runCommand "selfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
5- openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -subj '/CN=example.com/CN=uploads.example.com/CN=conference.example.com' -days 36500
06 mkdir -p $out
7 cp key.pem cert.pem $out
8 '';
0000009 createUsers =
10 pkgs:
11- pkgs.writeScriptBin "create-prosody-users" ''
12- #!${pkgs.bash}/bin/bash
13 set -e
14-15- # Creates and set password for the 2 xmpp test users.
16- #
17- # Doing that in a bash script instead of doing that in the test
18- # script allow us to easily provision the users when running that
19- # test interactively.
20-21 prosodyctl register cthon98 example.com nothunter2
22 prosodyctl register azurediamond example.com hunter2
23 '';
024 delUsers =
25 pkgs:
26- pkgs.writeScriptBin "delete-prosody-users" ''
27- #!${pkgs.bash}/bin/bash
28 set -e
29-30- # Deletes the test users.
31- #
32- # Doing that in a bash script instead of doing that in the test
33- # script allow us to easily provision the users when running that
34- # test interactively.
35-36 prosodyctl deluser cthon98@example.com
37 prosodyctl deluser azurediamond@example.com
38 '';
···44 {
45 nodes,
46 pkgs,
47- config,
48 ...
49 }:
50 {
51 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
52- console.keyMap = "fr-bepo";
53 networking.extraHosts = ''
54- ${nodes.server.config.networking.primaryIPAddress} example.com
55- ${nodes.server.config.networking.primaryIPAddress} conference.example.com
56- ${nodes.server.config.networking.primaryIPAddress} uploads.example.com
57 '';
58 environment.systemPackages = [
59 (pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = "example.com"; })
60 ];
61 };
062 server =
63 { config, pkgs, ... }:
64 {
65 security.pki.certificateFiles = [ "${cert pkgs}/cert.pem" ];
66- console.keyMap = "fr-bepo";
67 networking.extraHosts = ''
68 ${config.networking.primaryIPAddress} example.com
69 ${config.networking.primaryIPAddress} conference.example.com
···89 domain = "conference.example.com";
90 }
91 ];
92- uploadHttp = {
93 domain = "uploads.example.com";
94 };
95 };
96 };
97 };
9899- testScript =
100- { nodes, ... }:
101- ''
102- # Check with sqlite storage
103- start_all()
104- server.wait_for_unit("prosody.service")
105- server.succeed('prosodyctl status | grep "Prosody is running"')
106107- server.succeed("create-prosody-users")
108- client.succeed("send-message")
109- server.succeed("delete-prosody-users")
110- '';
111}
···393 ];
394 };
3950000000396 clang_complete = super.clang_complete.overrideAttrs {
397 # In addition to the arguments you pass to your compiler, you also need to
398 # specify the path of the C++ std header (if you are using C++).
···393 ];
394 };
395396+ checkmate-nvim = super.checkmate-nvim.overrideAttrs {
397+ checkInputs = with self; [
398+ # checkmate.snippets
399+ luasnip
400+ ];
401+ };
402+403 clang_complete = super.clang_complete.overrideAttrs {
404 # In addition to the arguments you pass to your compiler, you also need to
405 # specify the path of the C++ std header (if you are using C++).
···21 runHook postInstall
22 '';
2324- meta = with lib; {
25 description = "Japanese font package with Mincho and Gothic fonts";
26 longDescription = ''
27 IPAex font is a Japanese font developed by the Information-technology
···31 This is the successor to the IPA fonts.
32 '';
33 homepage = "https://moji.or.jp/ipafont/";
34- license = licenses.ipa;
35- maintainers = with maintainers; [ ];
36 };
37}
···21 runHook postInstall
22 '';
2324+ meta = {
25 description = "Japanese font package with Mincho and Gothic fonts";
26 longDescription = ''
27 IPAex font is a Japanese font developed by the Information-technology
···31 This is the successor to the IPA fonts.
32 '';
33 homepage = "https://moji.or.jp/ipafont/";
34+ license = lib.licenses.ipa;
35+ maintainers = with lib.maintainers; [ stephen-huan ];
36 };
37}
···8788 passthru.tests.version = testers.testVersion { package = offlineimap; };
8990- meta = with lib; {
91 description = "Synchronize emails between two repositories, so that you can read the same mailbox from multiple computers";
92 homepage = "http://offlineimap.org";
93- license = licenses.gpl2Plus;
94- maintainers = [ ];
95 mainProgram = "offlineimap";
96 };
97}
···8788 passthru.tests.version = testers.testVersion { package = offlineimap; };
8990+ meta = {
91 description = "Synchronize emails between two repositories, so that you can read the same mailbox from multiple computers";
92 homepage = "http://offlineimap.org";
93+ license = lib.licenses.gpl2Plus;
94+ maintainers = with lib.maintainers; [ stephen-huan ];
95 mainProgram = "offlineimap";
96 };
97}
···5}:
6rustPlatform.buildRustPackage (finalAttrs: {
7 pname = "zeekstd";
8- version = "0.4.0";
910 src = fetchFromGitHub {
11 owner = "rorosen";
12 repo = "zeekstd";
13 tag = "v${finalAttrs.version}-cli";
14- hash = "sha256-ulbmqkayIyzt4Wcb5Qfm2jamuTFkqxt6jAvLedLn0k8=";
15 };
1617- cargoHash = "sha256-d4h2oAd+Posk8TzwNZVB6cSDN/wCIjPTanV9+8tf2iY=";
1819 meta = {
20 description = "CLI tool that works with the zstd seekable format";
···5}:
6rustPlatform.buildRustPackage (finalAttrs: {
7 pname = "zeekstd";
8+ version = "0.4.1";
910 src = fetchFromGitHub {
11 owner = "rorosen";
12 repo = "zeekstd";
13 tag = "v${finalAttrs.version}-cli";
14+ hash = "sha256-vvFBMDzypiAaLT5R6RTXJQZQhNCuiG3PxMEPmmPd7/I=";
15 };
1617+ cargoHash = "sha256-z1y12v71jxo8z3sZOAkSNvgBvexUGu0Z43HHxLCHSjg=";
1819 meta = {
20 description = "CLI tool that works with the zstd seekable format";
+13-3
pkgs/development/beam-modules/build-mix.nix
···25 meta ? { },
26 enableDebugInfo ? false,
27 mixEnv ? "prod",
028 # A config directory that is considered for all the dependencies of an app, typically in $src/config/
29 # This was initially added, as some of Mobilizon's dependencies need to access the config at build time.
30 appConfigPath ? null,
31 ...
32}@attrs:
003334let
35 shell =
···79 runHook preConfigure
8081 ${./mix-configure-hook.sh}
0000000082 ${lib.optionalString (!isNull appConfigPath)
83- # Due to https://hexdocs.pm/elixir/main/Config.html the config directory
84- # of a library seems to be not considered, as config is always
85- # application specific. So we can safely delete it.
86 ''
87 rm -rf config
88 cp -r ${appConfigPath} config
···25 meta ? { },
26 enableDebugInfo ? false,
27 mixEnv ? "prod",
28+ removeConfig ? true,
29 # A config directory that is considered for all the dependencies of an app, typically in $src/config/
30 # This was initially added, as some of Mobilizon's dependencies need to access the config at build time.
31 appConfigPath ? null,
32 ...
33}@attrs:
34+35+assert appConfigPath != null -> removeConfig;
3637let
38 shell =
···82 runHook preConfigure
8384 ${./mix-configure-hook.sh}
85+ ${lib.optionalString (removeConfig && isNull appConfigPath)
86+ # By default, we don't want to include whatever config a dependency brings; per
87+ # https://hexdocs.pm/elixir/main/Config.html, config is application specific.
88+ ''
89+ rm -rf config
90+ mkdir config
91+ ''
92+ }
93 ${lib.optionalString (!isNull appConfigPath)
94+ # Some more tightly-coupled dependencies do depend on the config of the application
95+ # they're being built for.
096 ''
97 rm -rf config
98 cp -r ${appConfigPath} config
···476 # find_isa
477 "x86_64-darwin"
478 ];
479+ # ValueError: 'aimv2' is already used by a Transformers config, pick another name.
480+ # Version bump ongoing in https://github.com/NixOS/nixpkgs/pull/429117
481+ broken = true;
482 };
483}
···35 ++ withExtraLuaPackages p
36 );
37in
38-stdenv.mkDerivation rec {
39- version = "0.12.5"; # also update communityModules
40 pname = "prosody";
000000041 # The following community modules are necessary for the nixos module
42 # prosody module to comply with XEP-0423 and provide a working
43 # default setup.
44 nixosModuleDeps = [
45 "cloud_notify"
46- "vcard_muc"
47- "http_upload"
48 ];
49- src = fetchurl {
50- url = "https://prosody.im/downloads/source/${pname}-${version}.tar.gz";
51- sha256 = "sha256-d4+3cHoPEDmVlbp6ucZt0qIojArjp/5Kt4+X1GK9OZ8=";
52- };
5354 # A note to all those merging automated updates: Please also update this
55 # attribute as some modules might not be compatible with a newer prosody
56 # version.
57 communityModules = fetchhg {
58 url = "https://hg.prosody.im/prosody-modules";
59- rev = "fc521fb5ffa0";
60- hash = "sha256-Ci52Xkx1xd3GW9lBPKgWFBB52SocxKyj8f/Hq3hZeak=";
61 };
6263 nativeBuildInputs = [ makeWrapper ];
064 buildInputs = [
65 luaEnv
66 libidn
···77 "--c-compiler=${stdenv.cc.targetPrefix}cc"
78 "--linker=${stdenv.cc.targetPrefix}cc"
79 ];
080 configurePlatforms = [ ];
8182 postBuild = ''
···93 postInstall = ''
94 ${lib.concatMapStringsSep "\n"
95 (module: ''
96- cp -r $communityModules/mod_${module} $out/lib/prosody/modules/
97 '')
98- (lib.lists.unique (nixosModuleDeps ++ withCommunityModules ++ withOnlyInstalledCommunityModules))
000099 }
100 make -C tools/migration install
101 '';
···110 license = licenses.mit;
111 homepage = "https://prosody.im";
112 platforms = platforms.linux;
113- maintainers = with maintainers; [ toastal ];
00000114 };
115-}
···35 ++ withExtraLuaPackages p
36 );
37in
38+stdenv.mkDerivation (finalAttrs: {
039 pname = "prosody";
40+ version = "13.0.2"; # also update communityModules
41+42+ src = fetchurl {
43+ url = "https://prosody.im/downloads/source/prosody-${finalAttrs.version}.tar.gz";
44+ hash = "sha256-PmG9OW83ylJF3r/WvkmkemGRMy8Pqi1O5fAPuwQK3bA=";
45+ };
46+47 # The following community modules are necessary for the nixos module
48 # prosody module to comply with XEP-0423 and provide a working
49 # default setup.
50 nixosModuleDeps = [
51 "cloud_notify"
0052 ];
00005354 # A note to all those merging automated updates: Please also update this
55 # attribute as some modules might not be compatible with a newer prosody
56 # version.
57 communityModules = fetchhg {
58 url = "https://hg.prosody.im/prosody-modules";
59+ rev = "a4d7fefa4a8b";
60+ hash = "sha256-lPxKZlIVyAt1Nx+PQ0ru0qihJ1ecBbvO0fMk+5D+NzE=";
61 };
6263 nativeBuildInputs = [ makeWrapper ];
64+65 buildInputs = [
66 luaEnv
67 libidn
···78 "--c-compiler=${stdenv.cc.targetPrefix}cc"
79 "--linker=${stdenv.cc.targetPrefix}cc"
80 ];
81+82 configurePlatforms = [ ];
8384 postBuild = ''
···95 postInstall = ''
96 ${lib.concatMapStringsSep "\n"
97 (module: ''
98+ cp -r ${finalAttrs.communityModules}/mod_${module} $out/lib/prosody/modules/
99 '')
100+ (
101+ lib.lists.unique (
102+ finalAttrs.nixosModuleDeps ++ withCommunityModules ++ withOnlyInstalledCommunityModules
103+ )
104+ )
105 }
106 make -C tools/migration install
107 '';
···116 license = licenses.mit;
117 homepage = "https://prosody.im";
118 platforms = platforms.linux;
119+ mainProgram = "prosody";
120+ maintainers = with maintainers; [
121+ toastal
122+ mirror230469
123+ ];
124+ teams = with lib.teams; [ c3d2 ];
125 };
126+})
+1
pkgs/top-level/aliases.nix
···1279 mathematica9 = throw "mathematica9 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
1280 mathematica10 = throw "mathematica10 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
1281 mathematica11 = throw "mathematica11 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
01282 matomo_5 = matomo; # Added 2024-12-12
1283 matomo-beta = throw "matomo-beta has been removed as it mostly just pointed to the latest matomo release, use `matomo.overrideAttrs` to access a specific beta version instead"; # Added 2025-01-15
1284 matrique = throw "'matrique' has been renamed to/replaced by 'spectral'"; # Converted to throw 2024-10-17
···1279 mathematica9 = throw "mathematica9 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
1280 mathematica10 = throw "mathematica10 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
1281 mathematica11 = throw "mathematica11 has been removed as it was obsolete, broken, and depended on OpenCV 2"; # Added 2024-08-20
1282+ mathlibtools = throw "mathlibtools has been removed as it was archived upstream in 2023"; # Added 2025-07-09
1283 matomo_5 = matomo; # Added 2024-12-12
1284 matomo-beta = throw "matomo-beta has been removed as it mostly just pointed to the latest matomo release, use `matomo.overrideAttrs` to access a specific beta version instead"; # Added 2025-01-15
1285 matrique = throw "'matrique' has been renamed to/replaced by 'spectral'"; # Converted to throw 2024-10-17
···1418 stdenv = gcc14Stdenv;
1419 };
142000001421 winetricks = callPackage ../applications/emulators/wine/winetricks.nix { };
14221423 zsnes = pkgsi686Linux.callPackage ../applications/emulators/zsnes { };
···66426643 h3 = h3_3;
664400006645 sourceFromHead = callPackage ../build-support/source-from-head-fun.nix { };
66466647 jruby = callPackage ../development/interpreters/jruby { };
···7997 withGd = true;
7998 };
79990000008000 # These are used when building compiler-rt / libgcc, prior to building libc.
8001 preLibcHeaders =
8002 let
···8067 # For win32 or posix set this to null
8068 package = windows.mcfgthreads;
8069 };
000080708071 # Only supported on Linux and only on glibc
8072 glibcLocales =
···1258512586 kexi = libsForQt5.callPackage ../applications/office/kexi { };
12587000000000000000012588 kiwix = libsForQt5.callPackage ../applications/misc/kiwix { };
1258912590 kiwix-tools = callPackage ../applications/misc/kiwix/tools.nix { };
···15298 isabelle-components = recurseIntoAttrs (callPackage ../by-name/is/isabelle/components { });
1529915300 lean3 = lean;
01530115302 leo2 = callPackage ../applications/science/logic/leo2 {
15303 inherit (ocaml-ng.ocamlPackages_4_14_unsafe_string) ocaml camlp4;
···1625216253 xp-pen-deco-01-v2-driver = libsForQt5.xp-pen-deco-01-v2-driver;
1625416255+ newlib = callPackage ../development/misc/newlib { };
001625616257 newlib-nano = callPackage ../development/misc/newlib {
016258 nanoizeNewlib = true;
16259 };
16260
+2
pkgs/top-level/python-aliases.nix
···422 mapbox = throw "mapbox has been removed because the upstream repository was archived in 2022"; # Added 2024-10-04
423 marshmallow-enum = throw "marshmallow-enum has been removed because it was archived in 2022 and had no maintainer"; # added 2024-05-10
424 markerlib = throw "markerlib has been removed because it's abandoned since 2013"; # added 2023-05-19
0425 matrix-api-async = throw "matrix-api-async has been removed as it is an old wrapper and no longer in use"; # added 2025-01-01
426 memory_profiler = memory-profiler; # added 2023-10-09
427 mir_eval = mir-eval; # added 2024-01-07
···735 setuptoolsCheckHook = throw "The setuptoolsCheckHook has been removed, since the test command has been removed in setuptools 72.0."; # added 2024-08-06
736 setuptoolsTrial = setuptools-trial; # added 2023-11-11
737 sharkiqpy = sharkiq; # added 2022-05-21
0738 shouldbe = throw "shouldbe was removed, because it was disabled on all python version since 3.8 and last updated in 2019."; # added 2024-05-12
739 sip_4 = sip4; # added 2024-01-07
740 slackclient = slack-sdk; # added 2024-06-27
···422 mapbox = throw "mapbox has been removed because the upstream repository was archived in 2022"; # Added 2024-10-04
423 marshmallow-enum = throw "marshmallow-enum has been removed because it was archived in 2022 and had no maintainer"; # added 2024-05-10
424 markerlib = throw "markerlib has been removed because it's abandoned since 2013"; # added 2023-05-19
425+ mathlibtools = throw "mathlibtools has been removed because the upstream repository was archived in 2023"; # added 2025-07-09
426 matrix-api-async = throw "matrix-api-async has been removed as it is an old wrapper and no longer in use"; # added 2025-01-01
427 memory_profiler = memory-profiler; # added 2023-10-09
428 mir_eval = mir-eval; # added 2024-01-07
···736 setuptoolsCheckHook = throw "The setuptoolsCheckHook has been removed, since the test command has been removed in setuptools 72.0."; # added 2024-08-06
737 setuptoolsTrial = setuptools-trial; # added 2023-11-11
738 sharkiqpy = sharkiq; # added 2022-05-21
739+ shippai = throw "shippai has been removed because the upstream repository was archived in 2023"; # added 2025-07-09
740 shouldbe = throw "shouldbe was removed, because it was disabled on all python version since 3.8 and last updated in 2019."; # added 2024-05-12
741 sip_4 = sip4; # added 2024-01-07
742 slackclient = slack-sdk; # added 2024-06-27