From 3607e66f5a006491bb1fb3d9bdf2548e69f21539 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:10:03 +0200 Subject: [PATCH 01/10] pretalx: add basic support for plugins --- pkgs/by-name/pr/pretalx/package.nix | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pkgs/by-name/pr/pretalx/package.nix b/pkgs/by-name/pr/pretalx/package.nix index 78b2f8d4df0b..f3582c1b7fb5 100644 --- a/pkgs/by-name/pr/pretalx/package.nix +++ b/pkgs/by-name/pr/pretalx/package.nix @@ -3,6 +3,7 @@ , gettext , python3 , fetchFromGitHub +, plugins ? [ ] , nixosTests }: @@ -132,7 +133,7 @@ python.pkgs.buildPythonApplication rec { vobject whitenoise zxcvbn - ] ++ beautifulsoup4.optional-dependencies.lxml; + ] ++ beautifulsoup4.optional-dependencies.lxml ++ plugins; passthru.optional-dependencies = { mysql = with python.pkgs; [ @@ -210,6 +211,12 @@ python.pkgs.buildPythonApplication rec { tests = { inherit (nixosTests) pretalx; }; + plugins = lib.recurseIntoAttrs ( + lib.packagesFromDirectoryRecursive { + inherit (python.pkgs) callPackage; + directory = ./plugins; + } + ); }; inherit meta; From a2b0c5a8adfa103ab0b20a78c995fb3fca938d7c Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:10:26 +0200 Subject: [PATCH 02/10] pretalx.plugins.downstream: init at 1.2.0 --- .../by-name/pr/pretalx/plugins/downstream.nix | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/downstream.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/downstream.nix b/pkgs/by-name/pr/pretalx/plugins/downstream.nix new file mode 100644 index 000000000000..074c84a90b03 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/downstream.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-downstream"; + version = "1.2.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-downstream"; + rev = "v${version}"; + hash = "sha256-MzoK/tzf6ajZ/THIXyad/tfb3lsQD9k9J6aBfoP9ONo="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_downstream" ]; + + meta = { + description = "Use pretalx passively by importing another event's schedule"; + homepage = "https://github.com/pretalx/pretalx-downstream"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From e52264a8e035d96593897f314c93564b6805533f Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:10:34 +0200 Subject: [PATCH 03/10] pretalx.plugins.media-ccc-de: init at 1.2.1 --- .../pr/pretalx/plugins/media-ccc-de.nix | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/media-ccc-de.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/media-ccc-de.nix b/pkgs/by-name/pr/pretalx/plugins/media-ccc-de.nix new file mode 100644 index 000000000000..91cb42f791e3 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/media-ccc-de.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-media-ccc-de"; + version = "1.2.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-media-ccc-de"; + rev = "v${version}"; + hash = "sha256-QCnZZpYjHxj92Dl2nRd4lXapufcqRmlVH6LEq0rzQ2U="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_media_ccc_de" ]; + + meta = { + description = "Pull recordings from media.ccc.de and embed them in talk pages"; + homepage = "https://github.com/pretalx/pretalx-media-ccc-de"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From df155f2bd7d6afa5561137813d59d9f8d1c5fd5f Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:10:42 +0200 Subject: [PATCH 04/10] pretalx.plugins.pages: init at 1.4.0 --- pkgs/by-name/pr/pretalx/plugins/pages.nix | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/pages.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/pages.nix b/pkgs/by-name/pr/pretalx/plugins/pages.nix new file mode 100644 index 000000000000..3f8d254542a7 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/pages.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-pages"; + version = "1.4.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-pages"; + rev = "v${version}"; + hash = "sha256-Wzd3uf+mdoyeMCZ4ZYcPLGqlUWCqSL02eeKRubTiH00="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_pages" ]; + + meta = { + description = "Static pages for pretalx, e.g. information, venue listings, a Code of Conduct, etc"; + homepage = "https://github.com/pretalx/pretalx-pages"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From 3a1718e8db44019c16d5752df23e5199bc10f082 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:10:51 +0200 Subject: [PATCH 05/10] pretalx.plugins.public-voting: init at 1.5.0 --- .../pr/pretalx/plugins/public-voting.nix | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/public-voting.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/public-voting.nix b/pkgs/by-name/pr/pretalx/plugins/public-voting.nix new file mode 100644 index 000000000000..3ce595b69fe5 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/public-voting.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-public-voting"; + version = "1.5.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-public-voting"; + rev = "v${version}"; + hash = "sha256-0dSnUVXtWEuu+m5PyFjjM2WVYE3+cNqZYlMkRQlI+2U="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_public_voting" ]; + + meta = { + description = "A public voting plugin for pretalx"; + homepage = "https://github.com/pretalx/pretalx-public-voting"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From a8f9b41e977b7cdaefc1b2f95bebb33a5f294f23 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:11:00 +0200 Subject: [PATCH 06/10] pretalx.plugins.venueless: init at 1.3.0 --- pkgs/by-name/pr/pretalx/plugins/venueless.nix | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/venueless.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/venueless.nix b/pkgs/by-name/pr/pretalx/plugins/venueless.nix new file mode 100644 index 000000000000..5d082c9abd6a --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/venueless.nix @@ -0,0 +1,40 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + gettext, + setuptools, + django, + pyjwt, +}: + +buildPythonPackage rec { + pname = "pretalx-venueless"; + version = "1.3.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-venueless"; + rev = "v${version}"; + hash = "sha256-h8o5q1roFm8Bct/Qf8obIJYkkGPcz3WJ15quxZH48H8="; + }; + + nativeBuildInputs = [ gettext ]; + + build-system = [ setuptools ]; + + dependencies = [ + django + pyjwt + ]; + + pythonImportsCheck = [ "pretalx_venueless" ]; + + meta = { + description = "Static venueless for pretalx, e.g. information, venue listings, a Code of Conduct, etc"; + homepage = "https://github.com/pretalx/pretalx-venueless"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From 5fd3779176e343e4a8e6199ce55027ffdd2b63b0 Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:11:09 +0200 Subject: [PATCH 07/10] pretalx.plugins.vimeo: init at 2.2.0 --- pkgs/by-name/pr/pretalx/plugins/vimeo.nix | 30 +++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/vimeo.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/vimeo.nix b/pkgs/by-name/pr/pretalx/plugins/vimeo.nix new file mode 100644 index 000000000000..c823b7bce4b3 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/vimeo.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-vimeo"; + version = "2.2.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-vimeo"; + rev = "v${version}"; + hash = "sha256-CVP9C2wY51p8UDnzPpjzdVv5b9CSVanGbkaJiOo+9eY="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_vimeo" ]; + + meta = { + description = "Static vimeo for pretalx, e.g. information, venue listings, a Code of Conduct, etc"; + homepage = "https://github.com/pretalx/pretalx-vimeo"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From 110e635afbdd3a239d688f512a3711775a91b32a Mon Sep 17 00:00:00 2001 From: Weijia Wang <9713184+wegank@users.noreply.github.com> Date: Wed, 15 May 2024 14:11:18 +0200 Subject: [PATCH 08/10] pretalx.plugins.youtube: init at 2.1.0 --- pkgs/by-name/pr/pretalx/plugins/youtube.nix | 30 +++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 pkgs/by-name/pr/pretalx/plugins/youtube.nix diff --git a/pkgs/by-name/pr/pretalx/plugins/youtube.nix b/pkgs/by-name/pr/pretalx/plugins/youtube.nix new file mode 100644 index 000000000000..4424225c7b09 --- /dev/null +++ b/pkgs/by-name/pr/pretalx/plugins/youtube.nix @@ -0,0 +1,30 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + setuptools, +}: + +buildPythonPackage rec { + pname = "pretalx-youtube"; + version = "2.1.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "pretalx"; + repo = "pretalx-youtube"; + rev = "v${version}"; + hash = "sha256-j3NZ+5QBbdpE2bxenqq5bW/42CWvQ9FqrKMmfYIe4Lo="; + }; + + build-system = [ setuptools ]; + + pythonImportsCheck = [ "pretalx_youtube" ]; + + meta = { + description = "Static youtube for pretalx, e.g. information, venue listings, a Code of Conduct, etc"; + homepage = "https://github.com/pretalx/pretalx-youtube"; + license = lib.licenses.asl20; + maintainers = with lib.maintainers; [ wegank ]; + }; +} From f4f9f960372443609b7157d7a540c2da593d1983 Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Wed, 15 May 2024 16:21:09 +0200 Subject: [PATCH 09/10] nixos/pretalx: add plugins option Allow loading pretalx plugins in a declarative manner. They are passed into the package dependencies at build time, so that collectstatic and other django maintenance functions account for them, since we cannot regenerate assets at runtime anyway. --- nixos/modules/services/web-apps/pretalx.nix | 33 ++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/nixos/modules/services/web-apps/pretalx.nix b/nixos/modules/services/web-apps/pretalx.nix index d0b1512f77c5..1411d11982c8 100644 --- a/nixos/modules/services/web-apps/pretalx.nix +++ b/nixos/modules/services/web-apps/pretalx.nix @@ -11,14 +11,19 @@ let configFile = format.generate "pretalx.cfg" cfg.settings; - extras = cfg.package.optional-dependencies.redis - ++ lib.optionals (cfg.settings.database.backend == "mysql") cfg.package.optional-dependencies.mysql - ++ lib.optionals (cfg.settings.database.backend == "postgresql") cfg.package.optional-dependencies.postgres; + finalPackage = cfg.package.override { + inherit (cfg) plugins; + }; - pythonEnv = cfg.package.python.buildEnv.override { - extraLibs = [ (cfg.package.python.pkgs.toPythonModule cfg.package) ] - ++ (with cfg.package.python.pkgs; [ gunicorn ] - ++ lib.optional cfg.celery.enable celery) ++ extras; + pythonEnv = finalPackage.python.buildEnv.override { + extraLibs = with finalPackage.python.pkgs; [ + (toPythonModule finalPackage) + gunicorn + ] + ++ finalPackage.optional-dependencies.redis + ++ lib.optionals cfg.celery.enable [ celery ] + ++ lib.optionals (cfg.settings.database.backend == "mysql") finalPackage.optional-dependencies.mysql + ++ lib.optionals (cfg.settings.database.backend == "postgresql") finalPackage.optional-dependencies.postgres; }; in @@ -44,6 +49,20 @@ in description = "User under which pretalx should run."; }; + plugins = lib.mkOption { + type = with lib.types; listOf package; + default = []; + example = lib.literalExpression '' + with config.services.pretalx.package.plugins; [ + pages + youtube + ]; + ''; + description = '' + Pretalx plugins to install into the Python environment. + ''; + }; + gunicorn.extraArgs = lib.mkOption { type = with lib.types; listOf str; default = [ From 29fd61c784ca3ecb14e6a5a647ab8b738273142c Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Wed, 15 May 2024 16:27:25 +0200 Subject: [PATCH 10/10] nixos/tests/pretalx: test pages plugin install --- nixos/tests/web-apps/pretalx.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/tests/web-apps/pretalx.nix b/nixos/tests/web-apps/pretalx.nix index 76e261b2207e..cbb6580aa051 100644 --- a/nixos/tests/web-apps/pretalx.nix +++ b/nixos/tests/web-apps/pretalx.nix @@ -5,13 +5,16 @@ meta.maintainers = lib.teams.c3d2.members; nodes = { - pretalx = { + pretalx = { config, ... }: { networking.extraHosts = '' 127.0.0.1 talks.local ''; services.pretalx = { enable = true; + plugins = with config.services.pretalx.package.plugins; [ + pages + ]; nginx.domain = "talks.local"; settings = { site.url = "http://talks.local";