Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nixos-infra jitsi prep #297809

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions nixos/doc/manual/release-notes/rl-2405.section.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,8 @@ The pre-existing [services.ankisyncd](#opt-services.ankisyncd.enable) has been m

- `unrar` was updated to v7. See [changelog](https://www.rarlab.com/unrar7notes.htm) for more information.

- `prosody` `services.prosody.muc.*.vcard_muc` was removed in favor of `services.prosody.muc.*.extraModules`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

mkRemovedOptionModule?


- `k9s` was updated to v0.31. There have been various breaking changes in the config file format,
check out the changelog of [v0.29](https://github.com/derailed/k9s/releases/tag/v0.29.0),
[v0.30](https://github.com/derailed/k9s/releases/tag/v0.30.0) and
Expand Down
12 changes: 7 additions & 5 deletions nixos/modules/services/networking/prosody.nix
Original file line number Diff line number Diff line change
Expand Up @@ -336,10 +336,10 @@ let
'';
};

vcard_muc = mkOption {
type = types.bool;
default = true;
description = lib.mdDoc "Adds the ability to set vCard for Multi User Chat rooms";
extraModules = mkOption {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lists tend to be annoying because they make it very difficult to remove items from the default value. Can this be an attrset instead with e.g. "muc_mam".enable = true;?

(I actually don't know if we have something better as a common pattern for this in NixOS - I just know lists are annoying and that's how I would intuitively have go at fixing this.)

type = types.listOf types.str;
default = [ "muc_mam" "vcard_muc" ];
description = "Add more modules to the muc Component";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Capitalize MUC to match the documentation in other settings. Also remove the unnecessary capitalization from Component.

};

# Extra parameters. Defaulting to prosody default values.
Expand Down Expand Up @@ -814,7 +814,9 @@ in

${lib.concatMapStrings (muc: ''
Component ${toLua muc.domain} "muc"
modules_enabled = { "muc_mam"; ${optionalString muc.vcard_muc ''"vcard_muc";'' } }
modules_enabled = {
${ lib.concatStringsSep "\n" (map (x: "${toLua x};") muc.extraModules)}
}
name = ${toLua muc.name}
restrict_room_creation = ${toLua muc.restrictRoomCreation}
max_history_messages = ${toLua muc.maxHistoryMessages}
Expand Down
26 changes: 24 additions & 2 deletions nixos/modules/services/web-apps/jitsi-meet.nix
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,19 @@ in
};

secureDomain.enable = mkEnableOption (lib.mdDoc "Authenticated room creation");

updateMucs = mkOption {
type = with types; attrsOf anything;
default = { };
description = "This is a very hacky work around setting and only added because prosody muc is a list.";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This descriptions tells me nothing at all about how this option is expected to be used or what it does. My understanding is that this is a way to inject extra Prosody settings for a MUC, which is difficult to do otherwise due to the combination of 1. the Prosody module not using an attrset for its instances; 2. the Jitsi module being in charge of configuring Prosody itself?

  1. Have you considered refactoring Prosody to use an attrset like what your updateMucs option uses as its API? It should even be doable to keep compatibility with the old list format by auto-transforming the list into an attrset using v.domain.
  2. If this is not possible, please improve the naming and documentation here. How it's implemented should be of no concern to a user of the option and has (IMHO) no place in the documentation.

example = {
"conference.jitsi.example.com".extraModules = [
"lobby_autostart"
"muc_mam"
"vcard_muc"
];
};
};
};

config = mkIf cfg.enable {
Expand All @@ -205,7 +218,16 @@ in
tls = mkDefault true;
websocket = mkDefault true;
};
muc = [
# the piece of code bellow looks at the domain name of the attrs in the list and updates the attrs if the domain name matches.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: below

# this is done to allow adding/overriding settings in a convenient way
muc = lib.flatten (builtins.map (muc:
let
result = lib.mapAttrsToList (
n: v: if muc.domain == n then (lib.recursiveUpdate muc v) else null
) cfg.updateMucs;
in
if result == [ null ] then muc else result
) [
{
domain = "conference.${cfg.hostName}";
name = "Jitsi Meet MUC";
Expand Down Expand Up @@ -249,7 +271,7 @@ in
storage = "memory"
'';
}
];
]);
extraModules = [
"pubsub"
"smacks"
Expand Down
9 changes: 9 additions & 0 deletions nixos/tests/jitsi-meet.nix
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,16 @@ import ./make-test-python.nix ({ pkgs, ... }: {
services.jitsi-meet = {
enable = true;
hostName = "server";
updateMucs = { "conference.jitsi.example.com".extraModules = [
"lobby_autostart"
"muc_mam"
"vcard_muc"
];
};
};

services.prosody.extraPluginPaths = [ "${pkgs.jitsi-prosody-plugins}/lobby_autostart" ];

services.jitsi-videobridge.openFirewall = true;

networking.firewall.allowedTCPPorts = [ 80 443 ];
Expand Down
38 changes: 38 additions & 0 deletions pkgs/by-name/ji/jitsi-prosody-plugins/package.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{ lib
, fetchFromGitHub
, stdenvNoCC
}:
stdenvNoCC.mkDerivation (finalAttrs: {
pname = "jitsi-prosody-plugins";
version = "20240318";

src = fetchFromGitHub {
owner = "jitsi-contrib";
repo = "prosody-plugins";
rev = "v${finalAttrs.version}";
hash = "sha256-ZApx7Z08dr1EFL5eelFG3IrfrAOpg5JqUX6hbodGwuo=";
};

installPhase = ''
runHook preInstall

mkdir -p $out
rm LICENSE README.md */README*.md
rm -r images */docs
cp -r * $out/

runHook postInstall
'';

# nothing todo here
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

typo: to do

(And it would be more useful to document why - which is because it's all just Lua scripts.)

dontBuild = true;
dontConfigure = true;
dontFixup = true;

meta = with lib; {
description = "Prosody plugins for Jitsi";
homepage = "https://github.com/jitsi-contrib/prosody-plugins";
license = lib.licenses.apsl20;
maintainers = with lib.maintainers; [ janik ];
};
})