jql: 8.0.0 -> 8.0.2 (#362884)
[NixPkgs.git] / pkgs / tools / networking / maubot / default.nix
blobadd134333a460115abc9aaddc447c4a8199c1b07
2   lib,
3   fetchPypi,
4   fetchpatch,
5   callPackage,
6   runCommand,
7   python3,
8   encryptionSupport ? true,
9   sqliteSupport ? true,
12 let
13   python = python3.override {
14     self = python;
15     packageOverrides = final: prev: {
16       # SQLAlchemy>=1,<1.4
17       # SQLAlchemy 2.0's derivation is very different, so don't override, just write it from scratch
18       # (see https://github.com/NixOS/nixpkgs/blob/65dbed73949e4c0207e75dcc7271b29f9e457670/pkgs/development/python-modules/sqlalchemy/default.nix)
19       sqlalchemy = final.buildPythonPackage rec {
20         pname = "SQLAlchemy";
21         version = "1.3.24";
23         src = fetchPypi {
24           inherit pname version;
25           sha256 = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk=";
26         };
28         postInstall = ''
29           sed -e 's:--max-worker-restart=5::g' -i setup.cfg
30         '';
32         # tests are pretty annoying to set up for this version, and these dependency overrides are already long enough
33         doCheck = false;
34       };
35     };
36   };
38   maubot = python.pkgs.buildPythonPackage rec {
39     pname = "maubot";
40     version = "0.5.0";
41     disabled = python.pythonOlder "3.10";
43     src = fetchPypi {
44       inherit pname version;
45       hash = "sha256-PkeZ7C4Srs2I10g7X1XD/HclumUwWTYj2F3J2CxN4Hs=";
46     };
48     patches = [
49       # add entry point - https://github.com/maubot/maubot/pull/146
50       (fetchpatch {
51         url = "https://github.com/maubot/maubot/commit/ef6e23eccb530187dd3447b6aac2047d4a32fb83.patch";
52         hash = "sha256-d5fu47F93aXZmk6MiSsxTE8pHjMKNL0FUdU+ynUqY2o=";
53       })
54     ];
56     propagatedBuildInputs =
57       with python.pkgs;
58       [
59         # requirements.txt
60         (mautrix.override { withOlm = encryptionSupport; })
61         aiohttp
62         yarl
63         asyncpg
64         aiosqlite
65         commonmark
66         ruamel-yaml
67         attrs
68         bcrypt
69         packaging
70         click
71         colorama
72         questionary
73         jinja2
74         setuptools
75       ]
76       # optional-requirements.txt
77       ++ lib.optionals encryptionSupport [
78         python-olm
79         pycryptodome
80         unpaddedbase64
81       ]
82       ++ lib.optionals sqliteSupport [
83         sqlalchemy
84       ];
86     # used for plugin tests
87     propagatedNativeBuildInputs = with python.pkgs; [
88       pytest
89       pytest-asyncio
90     ];
92     postInstall = ''
93       rm $out/example-config.yaml
94     '';
96     # Setuptools is trying to do python -m maubot test
97     dontUseSetuptoolsCheck = true;
99     pythonImportsCheck = [
100       "maubot"
101     ];
103     passthru =
104       let
105         wrapper = callPackage ./wrapper.nix {
106           unwrapped = maubot;
107           python3 = python;
108         };
109       in
110       {
111         tests = {
112           simple = runCommand "${pname}-tests" { } ''
113             ${maubot}/bin/mbc --help > $out
114           '';
115         };
117         inherit python;
119         plugins = callPackage ./plugins {
120           maubot = maubot;
121           python3 = python;
122         };
124         withPythonPackages = pythonPackages: wrapper { inherit pythonPackages; };
126         # This adds the plugins to lib/maubot-plugins
127         withPlugins = plugins: wrapper { inherit plugins; };
129         # This changes example-config.yaml in module directory
130         withBaseConfig = baseConfig: wrapper { inherit baseConfig; };
131       };
133     meta = with lib; {
134       description = "Plugin-based Matrix bot system written in Python";
135       homepage = "https://maubot.xyz/";
136       changelog = "https://github.com/maubot/maubot/blob/v${version}/CHANGELOG.md";
137       license = licenses.agpl3Plus;
138       # Presumably, people running "nix run nixpkgs#maubot" will want to run the tool
139       # for interacting with Maubot rather than Maubot itself, which should be used as
140       # a NixOS module.
141       mainProgram = "mbc";
142       maintainers = with maintainers; [ chayleaf ];
143     };
144   };
147 maubot