From fa79d12d0094ee472dfe860d23ba800d22360f9e Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 11:52:01 +0700 Subject: [PATCH 01/20] maintainers: add kurogeek --- maintainers/maintainer-list.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/maintainers/maintainer-list.nix b/maintainers/maintainer-list.nix index 3fb6c89bf258..d6b2ed124c75 100644 --- a/maintainers/maintainer-list.nix +++ b/maintainers/maintainer-list.nix @@ -14536,6 +14536,12 @@ githubId = 2943605; name = "Evgeny Kurnevsky"; }; + kurogeek = { + email = "kurogeek@lmvhaus.com"; + github = "kurogeek"; + githubId = 7752934; + name = "kurogeek"; + }; kuwii = { name = "kuwii"; email = "kuwii.someone@gmail.com"; From 33a6b73ae13869376df64ecaeb3afcbd03cf2be2 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 13:12:38 +0700 Subject: [PATCH 02/20] python3Packages.django-dbbackup: init at 4.3.0 --- .../django-dbbackup/default.nix | 80 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 82 insertions(+) create mode 100644 pkgs/development/python-modules/django-dbbackup/default.nix diff --git a/pkgs/development/python-modules/django-dbbackup/default.nix b/pkgs/development/python-modules/django-dbbackup/default.nix new file mode 100644 index 000000000000..3e9fe5a9a379 --- /dev/null +++ b/pkgs/development/python-modules/django-dbbackup/default.nix @@ -0,0 +1,80 @@ +{ + buildPythonPackage, + coverage, + django, + django-storages, + fetchFromGitHub, + flake8, + gnupg, + lib, + pep8, + psycopg2, + pylint, + pytest-django, + pytestCheckHook, + python-dotenv, + python-gnupg, + pytz, + setuptools, + testfixtures, + tox, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-dbbackup"; + version = "4.3.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "django-dbbackup"; + repo = "django-dbbackup"; + tag = version; + hash = "sha256-w+LfU5I7swnCJpwqBqoCTRUCZjKoIxK3OC+8CrihLEI="; + }; + + disabled = pythonOlder "3.9"; + + dependencies = [ + django + python-gnupg + pytz + ]; + + build-system = [ setuptools ]; + doCheck = true; + preCheck = '' + tempDir=$(mktemp -d) + export HOME=$tempDir + export DJANGO_SETTINGS_MODULE=dbbackup.tests.settings + ''; + pythonImportsCheck = [ "dbbackup" ]; + disabledTestPaths = [ + # Specific gnupg version required, which aren't provided in upstream + "dbbackup/tests/commands/test_dbrestore.py::DbrestoreCommandRestoreBackupTest::test_decrypt" + "dbbackup/tests/test_connectors/test_base.py::BaseCommandDBConnectorTest::test_run_command_with_parent_env" + "dbbackup/tests/test_utils.py::Encrypt_FileTest::test_func" + "dbbackup/tests/test_utils.py::Compress_FileTest::test_func" + ]; + nativeCheckInputs = [ + coverage + django-storages + flake8 + gnupg + pep8 + psycopg2 + pylint + pytest-django + pytestCheckHook + python-dotenv + testfixtures + tox + ]; + + meta = with lib; { + description = "Management commands to help backup and restore your project database and media files"; + homepage = "https://github.com/Archmonger/django-dbbackup"; + changelog = "https://github.com/Archmonger/django-dbbackup/releases/tag/${version}"; + license = licenses.bsd3; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 58e77ee3429b..589f1e598087 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4148,6 +4148,8 @@ self: super: with self; { django-currentuser = callPackage ../development/python-modules/django-currentuser { }; + django-dbbackup = callPackage ../development/python-modules/django-dbbackup { }; + django-debug-toolbar = callPackage ../development/python-modules/django-debug-toolbar { }; django-dynamic-preferences = From 0a0fb4a2b189ba2b044f546004a87dbbd1c47b31 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 13:15:48 +0700 Subject: [PATCH 03/20] python3Packages.py-moneyed: init at 3.0 --- .../python-modules/py-moneyed/default.nix | 38 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 40 insertions(+) create mode 100644 pkgs/development/python-modules/py-moneyed/default.nix diff --git a/pkgs/development/python-modules/py-moneyed/default.nix b/pkgs/development/python-modules/py-moneyed/default.nix new file mode 100644 index 000000000000..e839d6ec1958 --- /dev/null +++ b/pkgs/development/python-modules/py-moneyed/default.nix @@ -0,0 +1,38 @@ +{ + lib, + buildPythonPackage, + fetchPypi, + setuptools, + babel, + pythonOlder, + typing-extensions, +}: + +buildPythonPackage rec { + pname = "py-moneyed"; + version = "3.0"; + format = "pyproject"; + + disabled = pythonOlder "3.7"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-SQbw8CzyuR7bouFW8tTpp48iQFmrjI+i/yYjDHXYlOg="; + }; + + dependencies = [ + babel + typing-extensions + ]; + + pythonImportsCheck = [ "moneyed" ]; + + build-system = [ setuptools ]; + + meta = { + description = "Provides Currency and Money classes for use in your Python code."; + homepage = "https://github.com/py-moneyed/py-moneyed"; + license = lib.licenses.bsd3; + maintainers = with lib.maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 589f1e598087..c15bcc78e73f 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -13046,6 +13046,8 @@ self: super: with self; { py-melissa-climate = callPackage ../development/python-modules/py-melissa-climate { }; + py-moneyed = callPackage ../development/python-modules/py-moneyed { }; + py-multiaddr = callPackage ../development/python-modules/py-multiaddr { }; py-multibase = callPackage ../development/python-modules/py-multibase { }; From d00213fc2e1ed3bf8a3ae278e5fbb90c3bdebad7 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 13:39:29 +0700 Subject: [PATCH 04/20] python3Packages.ppf-datamatrix: init at 0.2 --- .../python-modules/ppf-datamatrix/default.nix | 34 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/development/python-modules/ppf-datamatrix/default.nix diff --git a/pkgs/development/python-modules/ppf-datamatrix/default.nix b/pkgs/development/python-modules/ppf-datamatrix/default.nix new file mode 100644 index 000000000000..b4942912fbe4 --- /dev/null +++ b/pkgs/development/python-modules/ppf-datamatrix/default.nix @@ -0,0 +1,34 @@ +{ + lib, + buildPythonPackage, + setuptools-scm, + pythonOlder, + fetchPypi, + pytestCheckHook, +}: + +buildPythonPackage rec { + pname = "ppf-datamatrix"; + version = "0.2"; + format = "pyproject"; + + disabled = pythonOlder "3.6"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-jwNNnJDkCPYPixCic7qrgQFMmoHJg9wevcMdTKWsVYI="; + }; + + doCheck = true; + pythonImportsCheck = [ "ppf.datamatrix" ]; + nativeCheckInputs = [ pytestCheckHook ]; + + build-system = [ setuptools-scm ]; + + meta = { + description = "Pure-python package to generate data matrix codes."; + homepage = "https://github.com/adrianschlatter/ppf.datamatrix"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index c15bcc78e73f..ba437d648257 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -12683,6 +12683,8 @@ self: super: with self; { ppdeep = callPackage ../development/python-modules/ppdeep { }; + ppf-datamatrix = callPackage ../development/python-modules/ppf-datamatrix { }; + ppft = callPackage ../development/python-modules/ppft { }; ppk2-api = callPackage ../development/python-modules/ppk2-api { }; From 1d2048f5a87e756b94b72d39c744b76e8cd3cf62 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 13:55:40 +0700 Subject: [PATCH 05/20] python3Packages.opentelemetry-instrumentation-system-metrics: init --- .../default.nix | 40 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 ++ 2 files changed, 44 insertions(+) create mode 100644 pkgs/development/python-modules/opentelemetry-instrumentation-system-metrics/default.nix diff --git a/pkgs/development/python-modules/opentelemetry-instrumentation-system-metrics/default.nix b/pkgs/development/python-modules/opentelemetry-instrumentation-system-metrics/default.nix new file mode 100644 index 000000000000..3f2ec8350c26 --- /dev/null +++ b/pkgs/development/python-modules/opentelemetry-instrumentation-system-metrics/default.nix @@ -0,0 +1,40 @@ +{ + buildPythonPackage, + pythonOlder, + hatchling, + opentelemetry-instrumentation, + opentelemetry-api, + opentelemetry-test-utils, + psutil, + pytestCheckHook, +}: + +buildPythonPackage { + inherit (opentelemetry-instrumentation) version src; + pname = "opentelemetry-instrumentation-system-metrics"; + pyproject = true; + + disabled = pythonOlder "3.8"; + + sourceRoot = "${opentelemetry-instrumentation.src.name}/instrumentation/opentelemetry-instrumentation-system-metrics"; + + build-system = [ hatchling ]; + + dependencies = [ + opentelemetry-instrumentation + opentelemetry-api + psutil + ]; + + nativeCheckInputs = [ + opentelemetry-test-utils + pytestCheckHook + ]; + + pythonImportsCheck = [ "opentelemetry.instrumentation.system_metrics" ]; + + meta = opentelemetry-instrumentation.meta // { + homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/instrumentation/opentelemetry-instrumentation-system-metrics"; + description = "OpenTelemetry Instrumentation for Django"; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index ba437d648257..51acc9e22563 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11662,6 +11662,10 @@ self: super: with self; { callPackage ../development/python-modules/opentelemetry-instrumentation-sqlalchemy { }; + opentelemetry-instrumentation-system-metrics = + callPackage ../development/python-modules/opentelemetry-instrumentation-system-metrics + { }; + opentelemetry-instrumentation-threading = callPackage ../development/python-modules/opentelemetry-instrumentation-threading { }; From 880185d00d4a8a12392f4f4095c0615e3b46c51e Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 13:56:27 +0700 Subject: [PATCH 06/20] python3Packages.opentelemetry-instrumentation-sqlite3: init --- .../default.nix | 38 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 ++ 2 files changed, 42 insertions(+) create mode 100644 pkgs/development/python-modules/opentelemetry-instrumentation-sqlite3/default.nix diff --git a/pkgs/development/python-modules/opentelemetry-instrumentation-sqlite3/default.nix b/pkgs/development/python-modules/opentelemetry-instrumentation-sqlite3/default.nix new file mode 100644 index 000000000000..5e4901083006 --- /dev/null +++ b/pkgs/development/python-modules/opentelemetry-instrumentation-sqlite3/default.nix @@ -0,0 +1,38 @@ +{ + buildPythonPackage, + pythonOlder, + hatchling, + opentelemetry-instrumentation, + opentelemetry-instrumentation-dbapi, + opentelemetry-test-utils, + pytestCheckHook, +}: + +buildPythonPackage { + inherit (opentelemetry-instrumentation) version src; + pname = "opentelemetry-instrumentation-sqlite3"; + pyproject = true; + + disabled = pythonOlder "3.8"; + + sourceRoot = "${opentelemetry-instrumentation.src.name}/instrumentation/opentelemetry-instrumentation-sqlite3"; + + build-system = [ hatchling ]; + + dependencies = [ + opentelemetry-instrumentation + opentelemetry-instrumentation-dbapi + ]; + + nativeCheckInputs = [ + opentelemetry-test-utils + pytestCheckHook + ]; + + pythonImportsCheck = [ "opentelemetry.instrumentation.sqlite3" ]; + + meta = opentelemetry-instrumentation.meta // { + homepage = "https://github.com/open-telemetry/opentelemetry-python-contrib/blob/main/instrumentation/opentelemetry-instrumentation-sqlite3"; + description = "OpenTelemetry Instrumentation for Django"; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 51acc9e22563..86e420bf73d7 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -11662,6 +11662,10 @@ self: super: with self; { callPackage ../development/python-modules/opentelemetry-instrumentation-sqlalchemy { }; + opentelemetry-instrumentation-sqlite3 = + callPackage ../development/python-modules/opentelemetry-instrumentation-sqlite3 + { }; + opentelemetry-instrumentation-system-metrics = callPackage ../development/python-modules/opentelemetry-instrumentation-system-metrics { }; From fb334bd4638c830998cf2d641846b2157a0b7fd9 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:06:18 +0700 Subject: [PATCH 07/20] python3Packages.django-money: init at 3.5.4 --- .../python-modules/django-money/default.nix | 55 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 57 insertions(+) create mode 100644 pkgs/development/python-modules/django-money/default.nix diff --git a/pkgs/development/python-modules/django-money/default.nix b/pkgs/development/python-modules/django-money/default.nix new file mode 100644 index 000000000000..0d7492045142 --- /dev/null +++ b/pkgs/development/python-modules/django-money/default.nix @@ -0,0 +1,55 @@ +{ + fetchFromGitHub, + buildPythonPackage, + setuptools, + lib, + django, + py-moneyed, + certifi, + pytestCheckHook, + pytest-django, + pytest-cov, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-money"; + version = "3.5.4"; + pyproject = true; + + src = fetchFromGitHub { + owner = "django-money"; + repo = "django-money"; + tag = version; + hash = "sha256-JqAZaiJ2zCb7Jwvumqi16IrQ6clmcw71WpPzbhE2Fms="; + }; + + disabled = pythonOlder "3.7"; + + dependencies = [ + django + certifi + py-moneyed + ]; + + build-system = [ setuptools ]; + doCheck = true; + nativeCheckInputs = [ + pytestCheckHook + pytest-django + pytest-cov + ]; + pythonImportsCheck = [ "djmoney" ]; + + # avoid tests which import mixer, an abandoned library + disabledTests = [ + "test_mixer_blend" + ]; + + meta = with lib; { + description = "Money fields for Django forms and models."; + homepage = "https://github.com/django-money/django-money"; + changelog = "https://github.com/django-money/django-money/releases/tag/${version}"; + license = licenses.bsd3; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 86e420bf73d7..5e3349df144c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4256,6 +4256,8 @@ self: super: with self; { django-modeltranslation = callPackage ../development/python-modules/django-modeltranslation { }; + django-money = callPackage ../development/python-modules/django-money { }; + django-mptt = callPackage ../development/python-modules/django-mptt { }; django-multiselectfield = callPackage ../development/python-modules/django-multiselectfield { }; From a7cb14f4caf0d77147c4a294fd77de6b9c1a5532 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:28:53 +0700 Subject: [PATCH 08/20] python3Packages.django-error-report-2: init at 0.4.2 --- .../django-error-report-2/default.nix | 39 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 41 insertions(+) create mode 100644 pkgs/development/python-modules/django-error-report-2/default.nix diff --git a/pkgs/development/python-modules/django-error-report-2/default.nix b/pkgs/development/python-modules/django-error-report-2/default.nix new file mode 100644 index 000000000000..be1803e3a798 --- /dev/null +++ b/pkgs/development/python-modules/django-error-report-2/default.nix @@ -0,0 +1,39 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + setuptools, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-error-report-2"; + version = "0.4.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "matmair"; + repo = "django-error-report-2"; + tag = version; + hash = "sha256-ZCaslqgruJxM8345/jSlZGruM+27H9hvwL0wtPkUzc0="; + }; + + disabled = pythonOlder "3.6"; + + dependencies = [ + django + ]; + + build-system = [ setuptools ]; + # There is no tests on upstream + doCheck = false; + pythonImportsCheck = [ "error_report" ]; + + meta = with lib; { + description = "Log/View Django server errors."; + homepage = "https://github.com/matmair/django-error-report-2"; + changelog = "https://github.com/matmair/django-error-report-2/releases/tag/${version}"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 5e3349df144c..6dd6fd87045b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4164,6 +4164,8 @@ self: super: with self; { django-environ = callPackage ../development/python-modules/django-environ { }; + django-error-report-2 = callPackage ../development/python-modules/django-error-report-2 { }; + django-extensions = callPackage ../development/python-modules/django-extensions { }; django-filer = callPackage ../development/python-modules/django-filer { }; From b0258c8d38d7de8caf15a9178c6eb154e25c26e8 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:38:22 +0700 Subject: [PATCH 09/20] python3Packages.django-flags: init at 5.0.14 --- .../python-modules/django-flags/default.nix | 63 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 65 insertions(+) create mode 100644 pkgs/development/python-modules/django-flags/default.nix diff --git a/pkgs/development/python-modules/django-flags/default.nix b/pkgs/development/python-modules/django-flags/default.nix new file mode 100644 index 000000000000..32213502950e --- /dev/null +++ b/pkgs/development/python-modules/django-flags/default.nix @@ -0,0 +1,63 @@ +{ + buildPythonPackage, + coverage, + django, + django-debug-toolbar, + fetchFromGitHub, + jinja2, + lib, + pytest-django, + pytestCheckHook, + setuptools-scm, + setuptools, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-flags"; + version = "5.0.14"; + pyproject = true; + + src = fetchFromGitHub { + owner = "cfpb"; + repo = "django-flags"; + tag = version; + hash = "sha256-0IOcpl8OamNlalqNqMvmx/bkuIkaNnLwCD7nFclR8S4="; + }; + + dependencies = [ + django + ]; + + disabled = pythonOlder "3.8"; + + build-system = [ + setuptools + setuptools-scm + ]; + doCheck = true; + preCheck = '' + export DJANGO_SETTINGS_MODULE=flags.tests.settings + ''; + pythonImportsCheck = [ "flags" ]; + nativeCheckInputs = [ + coverage + (django-debug-toolbar.overrideAttrs (old: rec { + version = "5.2.0"; + src = old.src.override { + tag = version; + hash = "sha256-/oWirfJaiHVRI1m3N1QveutX2sag8fjYqJYCZ8BnMa0="; + }; + })) + jinja2 + pytest-django + pytestCheckHook + ]; + + meta = with lib; { + description = "Feature flags for Django projects"; + homepage = "https://github.com/cfpb/django-flags"; + changelog = "https://github.com/cfpb/django-flags/releases/tag/${version}"; + license = licenses.cc0; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6dd6fd87045b..d58d01232417 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4174,6 +4174,8 @@ self: super: with self; { django-filter = callPackage ../development/python-modules/django-filter { }; + django-flags = callPackage ../development/python-modules/django-flags { }; + django-formset-js-improved = callPackage ../development/python-modules/django-formset-js-improved { }; From bc24e368b201e35d8bd8659e779e9ce33122bce2 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:42:18 +0700 Subject: [PATCH 10/20] python3Packages.django-ical: init at 1.9.2 --- .../python-modules/django-ical/default.nix | 61 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 63 insertions(+) create mode 100644 pkgs/development/python-modules/django-ical/default.nix diff --git a/pkgs/development/python-modules/django-ical/default.nix b/pkgs/development/python-modules/django-ical/default.nix new file mode 100644 index 000000000000..78a74319752d --- /dev/null +++ b/pkgs/development/python-modules/django-ical/default.nix @@ -0,0 +1,61 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + pytest-django, + pytestCheckHook, + setuptools-scm, + icalendar, + django-recurrence, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-ical"; + version = "1.9.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "jazzband"; + repo = "django-ical"; + tag = version; + hash = "sha256-DUe0loayGcUS7MTyLn+g0KBxbIY7VsaoQNHGSMbMI3U="; + }; + + disabled = pythonOlder "3.7"; + + dependencies = [ + django + django-recurrence + # Latest version didn't pass the test + (icalendar.overrideAttrs (old: rec { + version = "6.0.0"; + src = old.src.override { + tag = "v${version}"; + hash = "sha256-eWFDY/pNVfcUk3PfB0vXqh9swuSGtflUw44IMDJI+yI="; + }; + })) + ]; + + build-system = [ setuptools-scm ]; + doCheck = true; + preCheck = '' + export DJANGO_SETTINGS_MODULE=test_settings + ''; + pythonImportsCheck = [ + "icalendar" + "django_ical" + ]; + nativeCheckInputs = [ + pytest-django + pytestCheckHook + ]; + + meta = with lib; { + description = "iCal feeds for Django based on Django's syndication feed framework."; + homepage = "https://github.com/jazzband/django-ical"; + changelog = "https://github.com/jazzband/django-ical/releases/tag/${version}"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d58d01232417..921e5043e043 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4210,6 +4210,8 @@ self: super: with self; { django-i18nfield = callPackage ../development/python-modules/django-i18nfield { }; + django-ical = callPackage ../development/python-modules/django-ical { }; + django-import-export = callPackage ../development/python-modules/django-import-export { }; django-ipware = callPackage ../development/python-modules/django-ipware { }; From d3439a76b5dacecead69888fec04ba850e2c4288 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:44:05 +0700 Subject: [PATCH 11/20] python3Packages.django-mailbox: init at 4.10.1 --- .../python-modules/django-mailbox/default.nix | 50 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 52 insertions(+) create mode 100644 pkgs/development/python-modules/django-mailbox/default.nix diff --git a/pkgs/development/python-modules/django-mailbox/default.nix b/pkgs/development/python-modules/django-mailbox/default.nix new file mode 100644 index 000000000000..a6f397145474 --- /dev/null +++ b/pkgs/development/python-modules/django-mailbox/default.nix @@ -0,0 +1,50 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + pytest-django, + pytestCheckHook, + setuptools, + six, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-mailbox"; + version = "4.10.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "coddingtonbear"; + repo = "django-mailbox"; + tag = version; + hash = "sha256-7CBUnqveTSfdc+8x8sZUqvwYW3vKjZKfOPVWFSo4es0="; + }; + + disabled = pythonOlder "3.8"; + + dependencies = [ + django + six + ]; + + build-system = [ setuptools ]; + doCheck = true; + preCheck = '' + substituteInPlace setup.cfg --replace-fail "pytest" "tool:pytest" + export DJANGO_SETTINGS_MODULE=django_mailbox.tests.settings + ''; + pythonImportsCheck = [ "django_mailbox" ]; + nativeCheckInputs = [ + pytest-django + pytestCheckHook + ]; + + meta = with lib; { + description = "Import mail from POP3, IMAP, local email mailboxes or directly from Postfix or Exim4 into your Django application automatically."; + homepage = "https://github.com/coddingtonbear/django-mailbox"; + changelog = "https://github.com/coddingtonbear/django-mailbox/releases/tag/${version}"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 921e5043e043..d3f74f9be04a 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4240,6 +4240,8 @@ self: super: with self; { callPackage ../development/python-modules/django-login-required-middleware { }; + django-mailbox = callPackage ../development/python-modules/django-mailbox { }; + django-mailman3 = callPackage ../development/python-modules/django-mailman3 { }; django-maintenance-mode = callPackage ../development/python-modules/django-maintenance-mode { }; From 349451b0b328bda907cb646855a4129c64980455 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 14:49:21 +0700 Subject: [PATCH 12/20] python3Packages.django-markdownify: init at 0.9.5 --- .../django-markdownify/default.nix | 53 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 55 insertions(+) create mode 100644 pkgs/development/python-modules/django-markdownify/default.nix diff --git a/pkgs/development/python-modules/django-markdownify/default.nix b/pkgs/development/python-modules/django-markdownify/default.nix new file mode 100644 index 000000000000..65846fc6a3a6 --- /dev/null +++ b/pkgs/development/python-modules/django-markdownify/default.nix @@ -0,0 +1,53 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + pytest-django, + pytestCheckHook, + setuptools, + markdown, + bleach, + tinycss2, +}: +buildPythonPackage rec { + pname = "django-markdownify"; + version = "0.9.5"; + pyproject = true; + + src = fetchFromGitHub { + owner = "erwinmatijsen"; + repo = "django-markdownify"; + tag = version; + hash = "sha256-KYU8p8NRD4EIS/KhOk9nvmXCf0RWEc+IFZ57YtsDSWE="; + }; + + dependencies = [ + django + markdown + bleach + ]; + + build-system = [ setuptools ]; + doCheck = true; + preCheck = '' + export DJANGO_SETTINGS_MODULE=markdownify.checks + ''; + nativeCheckInputs = [ + tinycss2 + pytest-django + pytestCheckHook + ]; + pythonImportsCheck = [ "markdownify" ]; + disabledTests = [ + # Test settings didn't setup DjangoTemplates + "test_markdownify_nodelist" + ]; + + meta = with lib; { + description = "Markdown template filter for Django"; + homepage = "https://github.com/erwinmatijsen/django-markdownify"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index d3f74f9be04a..e845fd0e0fae 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4246,6 +4246,8 @@ self: super: with self; { django-maintenance-mode = callPackage ../development/python-modules/django-maintenance-mode { }; + django-markdownify = callPackage ../development/python-modules/django-markdownify { }; + django-markdownx = callPackage ../development/python-modules/django-markdownx { }; django-markup = callPackage ../development/python-modules/django-markup { }; From d5192695eab37e3d6328e29d77f67086d3d4b796 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:19:56 +0700 Subject: [PATCH 13/20] python3Packages.django-recurrence: init at 1.11.1 --- .../django-recurrence/default.nix | 50 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 52 insertions(+) create mode 100644 pkgs/development/python-modules/django-recurrence/default.nix diff --git a/pkgs/development/python-modules/django-recurrence/default.nix b/pkgs/development/python-modules/django-recurrence/default.nix new file mode 100644 index 000000000000..507f70aa6ac9 --- /dev/null +++ b/pkgs/development/python-modules/django-recurrence/default.nix @@ -0,0 +1,50 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + python-dateutil, + pytest-django, + pytestCheckHook, + pytest-cov, + pytest-sugar, + setuptools-scm, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-recurrence"; + version = "1.11.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "jazzband"; + repo = "django-recurrence"; + tag = version; + hash = "sha256-Ytf4fFTVFIQ+6IBhwRMtCkonP0POivv4TrYok37nghA="; + }; + + disabled = pythonOlder "3.7"; + + dependencies = [ + django + python-dateutil + ]; + + build-system = [ setuptools-scm ]; + doCheck = true; + pythonImportsCheck = [ "recurrence" ]; + nativeCheckInputs = [ + pytest-django + pytest-cov + pytest-sugar + pytestCheckHook + ]; + + meta = with lib; { + description = "Utility for working with recurring dates in Django."; + homepage = "https://github.com/jazzband/django-recurrence"; + changelog = "https://github.com/jazzband/django-recurrence/releases/tag/${version}"; + license = licenses.bsd3; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index e845fd0e0fae..40d82ef21860 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4336,6 +4336,8 @@ self: super: with self; { django-ratelimit = callPackage ../development/python-modules/django-ratelimit { }; + django-recurrence = callPackage ../development/python-modules/django-recurrence { }; + django-redis = callPackage ../development/python-modules/django-redis { }; django-registration = callPackage ../development/python-modules/django-registration { }; From ae83c5510bb68c0736dbee16e33f322738db78e5 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:26:17 +0700 Subject: [PATCH 14/20] python3Packages.django-sslserver: init at 0.22 --- .../django-sslserver/default.nix | 34 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/development/python-modules/django-sslserver/default.nix diff --git a/pkgs/development/python-modules/django-sslserver/default.nix b/pkgs/development/python-modules/django-sslserver/default.nix new file mode 100644 index 000000000000..0077fafee8ab --- /dev/null +++ b/pkgs/development/python-modules/django-sslserver/default.nix @@ -0,0 +1,34 @@ +{ + buildPythonPackage, + django, + lib, + fetchurl, + setuptools-scm, + pythonOlder, +}: +buildPythonPackage { + pname = "django-sslserver"; + version = "0.22"; + format = "wheel"; + + src = fetchurl { + url = "https://files.pythonhosted.org/packages/6f/97/e4011f3944f83a7d2aaaf893c3689ad70e8d2ae46fb6e14fd0e3b0c6ce0b/django_sslserver-0.22-py3-none-any.whl"; + hash = "sha256-xZijY9LM3CQhwI3bPYsJc/gOjkejpbdOSiiW8hwpR8U="; + }; + + disabled = pythonOlder "3.4"; + + dependencies = [ + django + ]; + + build-system = [ setuptools-scm ]; + doCheck = true; + + meta = with lib; { + description = "A SSL-enabled development server for Django"; + homepage = "https://github.com/teddziuba/django-sslserver"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 40d82ef21860..91c430760cf5 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4380,6 +4380,8 @@ self: super: with self; { django-sql-utils = callPackage ../development/python-modules/django-sql-utils { }; + django-sslserver = callPackage ../development/python-modules/django-sslserver { }; + django-statici18n = callPackage ../development/python-modules/django-statici18n { }; django-storages = callPackage ../development/python-modules/django-storages { }; From 7b791ffa8fc422258060972cd091f1cf6fcb39b9 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:27:36 +0700 Subject: [PATCH 15/20] python3Packages.django-stdimage: init at 6.0.2 --- .../django-stdimage/default.nix | 63 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 5 ++ 2 files changed, 68 insertions(+) create mode 100644 pkgs/development/python-modules/django-stdimage/default.nix diff --git a/pkgs/development/python-modules/django-stdimage/default.nix b/pkgs/development/python-modules/django-stdimage/default.nix new file mode 100644 index 000000000000..b3fed998628d --- /dev/null +++ b/pkgs/development/python-modules/django-stdimage/default.nix @@ -0,0 +1,63 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + pytest-django, + pytestCheckHook, + setuptools-scm, + pillow, + pytest-cov, + gettext, + pythonOlder, + pythonAtLeast, +}: +buildPythonPackage rec { + pname = "django-stdimage"; + version = "6.0.2"; + pyproject = true; + + src = fetchFromGitHub { + owner = "codingjoe"; + repo = "django-stdimage"; + tag = version; + hash = "sha256-uwVU3Huc5fitAweShJjcMW//GBeIpJcxqKKLGo/EdIs="; + }; + + disabled = pythonOlder "3.8" || pythonAtLeast "3.13"; + + dependencies = [ + django + pillow + ]; + + build-system = [ setuptools-scm ]; + nativeBuildInputs = [ gettext ]; + + doCheck = true; + preCheck = '' + export DJANGO_SETTINGS_MODULE=tests.settings + ''; + disabledTests = [ + # SuspiciousFileOperation: Detected path traversal attempt (Even appear in upstream) + "test_variations_override" + ]; + pythonImportsCheck = [ + "stdimage" + "stdimage.validators" + "stdimage.models" + ]; + nativeCheckInputs = [ + pytest-django + pytest-cov + pytestCheckHook + ]; + + meta = with lib; { + description = "Django Standardized Image Field"; + homepage = "https://github.com/codingjoe/django-stdimage"; + changelog = "https://github.com/codingjoe/django-stdimage/releases/tag/${version}"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 91c430760cf5..fbafd297c7cb 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4384,6 +4384,11 @@ self: super: with self; { django-statici18n = callPackage ../development/python-modules/django-statici18n { }; + django-stdimage = callPackage ../development/python-modules/django-stdimage { + django = django_4; + pytest-django = pytest-django.override { django = django_4; }; + }; + django-storages = callPackage ../development/python-modules/django-storages { }; django-stubs = callPackage ../development/python-modules/django-stubs { }; From 323d1be48ab096548512b27e6083e39327fbe5ad Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:30:15 +0700 Subject: [PATCH 16/20] python3Packages.django-structlog: init at 9.1.1 --- .../django-structlog/default.nix | 82 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 84 insertions(+) create mode 100644 pkgs/development/python-modules/django-structlog/default.nix diff --git a/pkgs/development/python-modules/django-structlog/default.nix b/pkgs/development/python-modules/django-structlog/default.nix new file mode 100644 index 000000000000..fb06e13cf991 --- /dev/null +++ b/pkgs/development/python-modules/django-structlog/default.nix @@ -0,0 +1,82 @@ +{ + buildPythonPackage, + fetchFromGitHub, + lib, + setuptools, + python, + pkgs, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-structlog"; + version = "9.1.1"; + pyproject = true; + + src = fetchFromGitHub { + owner = "jrobichaud"; + repo = "django-structlog"; + tag = version; + hash = "sha256-SEigOdlXZtfLAgRgGkv/eDNDAiiHd7YthRJ/H6e1v5U="; + }; + + disabled = pythonOlder "3.9"; + + dependencies = with python.pkgs; [ + colorama + django + django-allauth + crispy-bootstrap5 + django-crispy-forms + django-environ + django-extensions + django-ipware + django-model-utils + django-ninja + django-redis + djangorestframework + structlog + ]; + + optional-dependencies.celery = with python.pkgs; [ celery ]; + + build-system = [ setuptools ]; + doCheck = true; + preCheck = '' + export DJANGO_SETTINGS_MODULE=config.settings.test_demo_app + + ${pkgs.valkey}/bin/redis-server & + REDIS_PID=$! + ''; + postCheck = '' + kill $REDIS_PID + ''; + + pytestFlags = [ + "-x" + "--cov=./django_structlog_demo_project" + "--cov-append django_structlog_demo_project" + ]; + pythonImportsCheck = [ + "structlog" + "django_structlog" + ]; + + nativeCheckInputs = with python.pkgs; [ + celery + factory-boy + pytest-asyncio + pytest-cov + pytest-django + pytest-mock + pytest-sugar + pytestCheckHook + ]; + + meta = with lib; { + description = "Structured Logging for Django"; + homepage = "https://github.com/jrobichaud/django-structlog"; + changelog = "https://github.com/jrobichaud/django-structlog/releases/tag/${version}"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index fbafd297c7cb..6c33934cdd1b 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4391,6 +4391,8 @@ self: super: with self; { django-storages = callPackage ../development/python-modules/django-storages { }; + django-structlog = callPackage ../development/python-modules/django-structlog { }; + django-stubs = callPackage ../development/python-modules/django-stubs { }; django-stubs-ext = callPackage ../development/python-modules/django-stubs-ext { }; From 74d9411d376c07aec88448b9a31452f047617112 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:47:03 +0700 Subject: [PATCH 17/20] python3Packages.django-user-sessions: init at 2.0.0 --- .../django-user-sessions/default.nix | 35 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 pkgs/development/python-modules/django-user-sessions/default.nix diff --git a/pkgs/development/python-modules/django-user-sessions/default.nix b/pkgs/development/python-modules/django-user-sessions/default.nix new file mode 100644 index 000000000000..3f48bb38865c --- /dev/null +++ b/pkgs/development/python-modules/django-user-sessions/default.nix @@ -0,0 +1,35 @@ +{ + fetchFromGitHub, + buildPythonPackage, + setuptools-scm, + lib, + django, + pythonOlder, +}: +buildPythonPackage rec { + pname = "django-user-sessions"; + version = "2.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "jazzband"; + repo = "django-user-sessions"; + tag = version; + hash = "sha256-Wexy6G2pZ8LTnqtJkBZIePV7qhQW8gu/mKiQfZtgf/o="; + }; + + disabled = pythonOlder "3.7"; + + dependencies = [ + django + ]; + + build-system = [ setuptools-scm ]; + + meta = with lib; { + description = "Extend Django sessions with a foreign key back to the user, allowing enumerating all user's sessions."; + homepage = "https://github.com/jazzband/django-user-sessions"; + license = licenses.mit; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 6c33934cdd1b..b4424ac9055c 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4425,6 +4425,8 @@ self: super: with self; { django-types = callPackage ../development/python-modules/django-types { }; + django-user-sessions = callPackage ../development/python-modules/django-user-sessions { }; + django-valkey = callPackage ../development/python-modules/django-valkey { }; django-versatileimagefield = From c6a8e4e887db43cd1063a4121a8b5f7331e6fef4 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 15:48:03 +0700 Subject: [PATCH 18/20] python3Packages.django-xforwardedfor-middleware: init at 2.0 --- .../default.nix | 33 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 4 +++ 2 files changed, 37 insertions(+) create mode 100644 pkgs/development/python-modules/django-xforwardedfor-middleware/default.nix diff --git a/pkgs/development/python-modules/django-xforwardedfor-middleware/default.nix b/pkgs/development/python-modules/django-xforwardedfor-middleware/default.nix new file mode 100644 index 000000000000..e6806a4d28f2 --- /dev/null +++ b/pkgs/development/python-modules/django-xforwardedfor-middleware/default.nix @@ -0,0 +1,33 @@ +{ + buildPythonPackage, + django, + fetchFromGitHub, + lib, + setuptools, +}: +buildPythonPackage rec { + pname = "django-xforwardedfor-middleware"; + version = "2.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "allo-"; + repo = "django-xforwardedfor-middleware"; + tag = "v${version}"; + hash = "sha256-dDXSb17kXOSeIgY6wid1QFHhUjrapasWgCEb/El51eA="; + }; + + dependencies = [ + django + ]; + + build-system = [ setuptools ]; + doCheck = true; + + meta = with lib; { + description = "Use the X-Forwarded-For header to get the real ip of a request"; + homepage = "https://github.com/allo-/django-xforwardedfor-middleware"; + license = licenses.publicDomain; + maintainers = with maintainers; [ kurogeek ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index b4424ac9055c..e88c12293a2d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -4443,6 +4443,10 @@ self: super: with self; { django-widget-tweaks = callPackage ../development/python-modules/django-widget-tweaks { }; + django-xforwardedfor-middleware = + callPackage ../development/python-modules/django-xforwardedfor-middleware + { }; + # LTS in extended support phase django_4 = callPackage ../development/python-modules/django/4.nix { }; From 1d300413e84d4e67a3f0530b1ecff7f69c1760f0 Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 8 Jan 2026 16:30:35 +0700 Subject: [PATCH 19/20] inventree: init Co-authored-by: DavHau --- nixos/modules/module-list.nix | 1 + nixos/modules/services/misc/inventree.nix | 457 ++++++++++++++++++++++ nixos/tests/all-tests.nix | 1 + nixos/tests/inventree.nix | 33 ++ pkgs/by-name/in/inventree/package.nix | 287 ++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 6 files changed, 781 insertions(+) create mode 100644 nixos/modules/services/misc/inventree.nix create mode 100644 nixos/tests/inventree.nix create mode 100644 pkgs/by-name/in/inventree/package.nix diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index 0e98f50ab6e7..f0a6a8a9bc72 100644 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -876,6 +876,7 @@ ./services/misc/ihaskell.nix ./services/misc/iio-niri.nix ./services/misc/input-remapper.nix + ./services/misc/inventree.nix ./services/misc/invidious-router.nix ./services/misc/irkerd.nix ./services/misc/jackett.nix diff --git a/nixos/modules/services/misc/inventree.nix b/nixos/modules/services/misc/inventree.nix new file mode 100644 index 000000000000..b5e5ecec9210 --- /dev/null +++ b/nixos/modules/services/misc/inventree.nix @@ -0,0 +1,457 @@ +{ + config, + pkgs, + lib, + ... +}: +let + cfg = config.services.inventree; + pkg = cfg.package; + + mysqlLocal = cfg.database.createLocally && cfg.database.dbtype == "mysql"; + pgsqlLocal = cfg.database.createLocally && cfg.database.dbtype == "postgresql"; + + manage = pkgs.writeShellScriptBin "inventree-manage" '' + set -a + ${lib.toShellVars cfg.settings} + ${lib.optionalString ( + cfg.database.passwordFile != null + ) ''INVENTREE_DB_PASSWORD="$(<"${cfg.database.passwordFile}")"''} + set +a + + pushd "${cfg.dataDir}" + sudo=exec + if [[ "$USER" != ${cfg.user} ]]; then + ${ + if config.security.sudo.enable then + "sudo='exec ${config.security.wrapperDir}/sudo -u ${cfg.user} -E'" + else + ">&2 echo 'Aborting, inventree-manage must be run as user `${cfg.user}`!'; exit 2" + } + fi + $sudo ${cfg.package}/bin/inventree "$@" + popd + ''; + +in +{ + meta.maintainers = with lib.maintainers; [ + kurogeek + ]; + + options.services.inventree = with lib; { + enable = lib.mkEnableOption "inventree"; + + dataDir = mkOption { + type = types.str; + default = "/var/lib/inventree"; + description = "Inventree's data storage path. Will be `/var/lib/inventree` by default."; + }; + + package = mkOption { + type = types.package; + description = "Which package to use for the InvenTree instance."; + default = pkgs.inventree; + defaultText = literalExpression "pkgs.inventree"; + }; + + adminPasswordFile = mkOption { + type = types.nullOr lib.types.path; + default = null; + example = "/run/keys/inventree-password"; + description = "Path to a file containing admin password"; + }; + + secretKeyFile = mkOption { + type = types.path; + default = "${cfg.dataDir}/secret_key.txt"; + example = "/run/keys/inventree-secret-key"; + description = '' + Path to a file containing the secret key + ''; + }; + + database = { + dbtype = mkOption { + type = lib.types.nullOr ( + lib.types.enum [ + "postgresql" + "mysql" + ] + ); + default = "postgresql"; + description = "Database type."; + }; + dbhost = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = + if pgsqlLocal then + "/run/postgresql" + else if mysqlLocal then + "/run/mysqld/mysqld.sock" + else + "localhost"; + defaultText = "localhost"; + example = "localhost"; + description = '' + Database host or socket path. + If [](#opt-services.inventree.database.createLocally) is true and + [](#opt-services.inventree.database.dbtype) is either `postgresql` or `mysql`, + defaults to the correct Unix socket instead. + ''; + }; + dbport = mkOption { + type = types.port; + default = 5432; + description = "Database host port."; + }; + dbname = mkOption { + type = types.str; + default = "inventree"; + description = "Database name."; + }; + dbuser = mkOption { + type = types.str; + default = "inventree"; + defaultText = lib.literalExpression "inventree"; + description = "Database username."; + }; + passwordFile = mkOption { + type = with types; nullOr path; + default = null; + example = "/run/keys/inventree-dbpassword"; + description = '' + A file containing the password corresponding to + . + ''; + }; + createLocally = mkOption { + type = types.bool; + default = true; + description = "Create the database and database user locally."; + }; + }; + + domain = mkOption { + type = types.str; + default = "localhost"; + example = "inventree.example.com"; + description = mdDoc '' + The INVENTREE_SITE_URL option defines the base URL for the + InvenTree server. This is a critical setting, and it is required + for correct operation of the server. If not specified, the + server will attempt to determine the site URL automatically - + but this may not always be correct! + + The site URL is the URL that users will use to access the + InvenTree server. For example, if the server is accessible at + `https://inventree.example.com`, the site URL should be set to + `https://inventree.example.com`. Note that this is not + necessarily the same as the internal URL that the server is + running on - the internal URL will depend entirely on your + server configuration and may be obscured by a reverse proxy or + other such setup. + ''; + }; + + user = mkOption { + type = types.str; + default = "inventree"; + description = "User under which InvenTree runs."; + }; + + group = mkOption { + type = types.str; + default = "inventree"; + description = "Group under which InvenTree runs."; + }; + + settings = mkOption { + type = + with lib.types; + attrsOf ( + nullOr (oneOf [ + path + str + ]) + ); + default = { + INVENTREE_CONFIG_FILE = lib.mkDefault "${cfg.dataDir}/config/config.yaml"; + INVENTREE_OIDC_PRIVATE_KEY_FILE = lib.mkDefault "${cfg.dataDir}/config/oidc_private_key.txt"; + INVENTREE_STATIC_ROOT = lib.mkDefault "${cfg.dataDir}/data/static_root"; + INVENTREE_MEDIA_ROOT = lib.mkDefault "${cfg.dataDir}/data/media"; + INVENTREE_BACKUP_DIR = lib.mkDefault "${cfg.dataDir}/data/backups"; + INVENTREE_SITE_URL = lib.mkDefault "http://${cfg.domain}"; + INVENTREE_PLUGIN_FILE = lib.mkDefault "${cfg.dataDir}/data/plugins/plugins.txt"; + INVENTREE_PLUGIN_DIR = lib.mkDefault "${cfg.dataDir}/data/plugins"; + INVENTREE_ADMIN_PASSWORD_FILE = lib.mkDefault cfg.adminPasswordFile; + INVENTREE_SECRET_KEY_FILE = lib.mkDefault cfg.secretKeyFile; + INVENTREE_AUTO_UPDATE = lib.mkDefault "false"; + }; + description = '' + InvenTree config options. + + See [the documentation](https://docs.inventree.org/en/stable/start/config/) for available options. + ''; + example = { + INVENTREE_CACHE_ENABLED = true; + INVENTREE_CACHE_HOST = "localhost"; + + INVENTREE_EMAIL_HOST = "smtp.example.com"; + INVENTREE_EMAIL_PORT = 25; + }; + }; + + }; + + config = lib.mkIf cfg.enable ( + lib.mkMerge [ + { + services.inventree.settings = { + INVENTREE_DB_ENGINE = cfg.database.dbtype; + INVENTREE_DB_NAME = cfg.database.dbname; + INVENTREE_DB_HOST = cfg.database.dbhost; + INVENTREE_DB_USER = cfg.database.dbuser; + INVENTREE_DB_PORT = toString cfg.database.dbport; + + INVENTREE_CONFIG_FILE = lib.mkDefault "${cfg.dataDir}/config/config.yaml"; + INVENTREE_OIDC_PRIVATE_KEY_FILE = lib.mkDefault "${cfg.dataDir}/config/oidc_private_key.txt"; + INVENTREE_STATIC_ROOT = lib.mkDefault "${cfg.dataDir}/data/static_root"; + INVENTREE_MEDIA_ROOT = lib.mkDefault "${cfg.dataDir}/data/media"; + INVENTREE_BACKUP_DIR = lib.mkDefault "${cfg.dataDir}/data/backups"; + INVENTREE_SITE_URL = lib.mkDefault "http://${cfg.domain}"; + INVENTREE_PLUGIN_FILE = lib.mkDefault "${cfg.dataDir}/data/plugins/plugins.txt"; + INVENTREE_PLUGIN_DIR = lib.mkDefault "${cfg.dataDir}/data/plugins"; + INVENTREE_ADMIN_PASSWORD_FILE = lib.mkDefault cfg.adminPasswordFile; + INVENTREE_SECRET_KEY_FILE = lib.mkDefault cfg.secretKeyFile; + INVENTREE_AUTO_UPDATE = lib.mkDefault "false"; + }; + environment.systemPackages = [ manage ]; + systemd.tmpfiles.rules = ( + map (dir: "d ${dir} 0755 inventree inventree") [ + "${cfg.dataDir}" + "${cfg.dataDir}/config" + "${cfg.dataDir}/data" + "${cfg.dataDir}/data/static_root" + "${cfg.dataDir}/data/media" + "${cfg.dataDir}/data/backups" + "${cfg.dataDir}/data/plugins" + ] + ); + + services.postgresql = lib.mkIf pgsqlLocal { + enable = true; + ensureDatabases = [ cfg.database.dbname ]; + ensureUsers = [ + { + name = cfg.database.dbuser; + ensureDBOwnership = true; + } + ]; + }; + + services.mysql = lib.mkIf mysqlLocal { + enable = true; + package = lib.mkDefault pkgs.mariadb; + ensureDatabases = [ cfg.database.dbname ]; + ensureUsers = [ + { + name = cfg.database.dbuser; + ensurePermissions = { + "${cfg.database.dbname}.*" = "ALL PRIVILEGES"; + }; + } + ]; + }; + + services.nginx.enable = true; + services.nginx.virtualHosts.${cfg.domain} = { + locations = + let + unixPath = config.systemd.sockets.inventree-server.socketConfig.ListenStream; + in + { + "/" = { + extraConfig = '' + proxy_set_header Host $host; + proxy_set_header X-Forwarded-By $server_addr:$server_port; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header CLIENT_IP $remote_addr; + + proxy_pass_request_headers on; + + proxy_redirect off; + + client_max_body_size 100M; + + proxy_buffering off; + proxy_request_buffering off; + ''; + proxyPass = "http://unix:${unixPath}"; + }; + "/auth" = { + extraConfig = '' + internal; + proxy_pass_request_body off; + proxy_set_header Content-Length ""; + proxy_set_header X-Original-URI $request_uri; + ''; + proxyPass = "http://unix:${unixPath}:/auth/"; + }; + "/static/" = { + alias = "${cfg.settings.INVENTREE_STATIC_ROOT}/"; + extraConfig = '' + autoindex on; + + # Caching settings + expires 30d; + add_header Pragma public; + add_header Cache-Control "public"; + ''; + }; + "/media/" = { + alias = "${cfg.settings.INVENTREE_MEDIA_ROOT}/"; + extraConfig = '' + auth_request /auth; + add_header Content-disposition "attachment"; + ''; + }; + }; + }; + + systemd.services.inventree-setup = { + description = "Inventree setup"; + wantedBy = [ "inventree.target" ]; + partOf = [ "inventree.target" ]; + after = lib.optional mysqlLocal "mysql.service" ++ lib.optional pgsqlLocal "postgresql.target"; + requires = lib.optional mysqlLocal "mysql.service" ++ lib.optional pgsqlLocal "postgresql.target"; + before = [ + "inventree-static.service" + "inventree-server.service" + "inventree-qcluster.service" + ]; + serviceConfig = { + Type = "oneshot"; + User = cfg.user; + Group = cfg.group; + RemainAfterExit = true; + PrivateTmp = true; + } + // lib.optionalAttrs (cfg.database.passwordFile != null) { + LoadCredential = "db_password:${cfg.database.passwordFile}"; + }; + environment = cfg.settings; + script = '' + set -euo pipefail + umask u=rwx,g=,o= + + ${ + lib.optionalString (cfg.database.passwordFile != null) '' + INVENTREE_DB_PASSWORD=$(<"$CREDENTIALS_DIRECTORY/db_password") + '' + } \ + exec ${pkg}/bin/inventree migrate + ''; + }; + + systemd.services.inventree-static = { + description = "Inventree static migration"; + wantedBy = [ "inventree.target" ]; + partOf = [ "inventree.target" ]; + before = [ "inventree-server.service" ]; + environment = cfg.settings; + serviceConfig = { + User = cfg.user; + Group = cfg.group; + StateDirectory = "inventree"; + PrivateTmp = true; + } + // lib.optionalAttrs (cfg.database.passwordFile != null) { + LoadCredential = "db_password:${cfg.database.passwordFile}"; + }; + script = '' + ${ + lib.optionalString (cfg.database.passwordFile != null) '' + INVENTREE_DB_PASSWORD=$(<"$CREDENTIALS_DIRECTORY/db_password") + '' + } \ + exec ${pkg}/bin/inventree collectstatic --no-input + ''; + }; + + systemd.services.inventree-server = { + description = "Inventree Gunicorn service"; + requiredBy = [ "inventree.target" ]; + partOf = [ "inventree.target" ]; + environment = cfg.settings; + serviceConfig = { + User = cfg.user; + Group = cfg.group; + StateDirectory = "inventree"; + PrivateTmp = true; + } + // lib.optionalAttrs (cfg.database.passwordFile != null) { + LoadCredential = "db_password:${cfg.database.passwordFile}"; + }; + script = '' + ${ + lib.optionalString (cfg.database.passwordFile != null) '' + INVENTREE_DB_PASSWORD=$(<"$CREDENTIALS_DIRECTORY/db_password") + '' + } \ + exec ${pkg}/bin/gunicorn InvenTree.wsgi + ''; + }; + + systemd.sockets.inventree-server = { + wantedBy = [ "sockets.target" ]; + partOf = [ "inventree.target" ]; + socketConfig.ListenStream = "/run/inventree/gunicorn.socket"; + }; + + systemd.services.inventree-qcluster = { + description = "InvenTree qcluster server"; + requiredBy = [ "inventree.target" ]; + wantedBy = [ "inventree.target" ]; + partOf = [ "inventree.target" ]; + environment = cfg.settings; + serviceConfig = { + User = cfg.user; + Group = cfg.group; + StateDirectory = "inventree"; + PrivateTmp = true; + } + // lib.optionalAttrs (cfg.database.passwordFile != null) { + LoadCredential = "db_password:${cfg.database.passwordFile}"; + }; + script = '' + ${ + lib.optionalString (cfg.database.passwordFile != null) '' + INVENTREE_DB_PASSWORD=$(<"$CREDENTIALS_DIRECTORY/db_password") + '' + } \ + exec ${pkg}/bin/inventree qcluster + ''; + }; + + systemd.targets.inventree = { + description = "Target for all InvenTree services"; + wantedBy = [ "multi-user.target" ]; + wants = [ "network-online.target" ]; + after = [ "network-online.target" ]; + }; + + users = lib.optionalAttrs (cfg.user == cfg.user) { + users.${cfg.user} = { + group = cfg.group; + isSystemUser = true; + home = cfg.dataDir; + }; + groups.${cfg.group}.members = [ cfg.user ]; + }; + } + ] + ); +} diff --git a/nixos/tests/all-tests.nix b/nixos/tests/all-tests.nix index 8985130a6f8d..59a836b5ea89 100644 --- a/nixos/tests/all-tests.nix +++ b/nixos/tests/all-tests.nix @@ -790,6 +790,7 @@ in installer = handleTest ./installer.nix { }; installer-systemd-stage-1 = handleTest ./installer-systemd-stage-1.nix { }; intune = runTest ./intune.nix; + inventree = runTest ./inventree.nix; invidious = runTest ./invidious.nix; invoiceplane = runTest ./invoiceplane.nix; iodine = runTest ./iodine.nix; diff --git a/nixos/tests/inventree.nix b/nixos/tests/inventree.nix new file mode 100644 index 000000000000..34fe8730ae67 --- /dev/null +++ b/nixos/tests/inventree.nix @@ -0,0 +1,33 @@ +{ lib, ... }: +{ + name = "inventree"; + meta.maintainers = with lib.maintainers; [ + kurogeek + ]; + + nodes = { + psqlTest = { + services.inventree = { + enable = true; + }; + }; + mysqlTest = { + services.inventree = { + enable = true; + database.dbtype = "mysql"; + }; + }; + }; + testScript = '' + start_all() + psqlTest.wait_for_unit("inventree.target") + psqlTest.wait_for_unit("inventree-server.service") + psqlTest.wait_for_open_unix_socket("/run/inventree/gunicorn.socket") + psqlTest.wait_until_succeeds("curl -sf http://localhost/web") + + mysqlTest.wait_for_unit("inventree.target") + mysqlTest.wait_for_unit("inventree-server.service") + mysqlTest.wait_for_open_unix_socket("/run/inventree/gunicorn.socket") + mysqlTest.wait_until_succeeds("curl -sf http://localhost/web") + ''; +} diff --git a/pkgs/by-name/in/inventree/package.nix b/pkgs/by-name/in/inventree/package.nix new file mode 100644 index 000000000000..109b4ad7550b --- /dev/null +++ b/pkgs/by-name/in/inventree/package.nix @@ -0,0 +1,287 @@ +{ + fetchFromGitHub, + fetchYarnDeps, + lib, + nodejs, + python312, + stdenv, + yarnBuildHook, + yarnConfigHook, + yarnInstallHook, +}: +let + python3 = python312.override { + self = python3; + packageOverrides = self: super: { + django = super.django_4; + }; + }; + + version = "0.18.0"; + src = fetchFromGitHub { + owner = "inventree"; + repo = "inventree"; + rev = "d6c722041987d13a4e596711aafa0f30cde3f9a0"; + hash = "sha256-BnRE6BM6/LHUtP3H0L8qh3LAxFphNlpll+r1oH4sGuQ="; + }; + + frontend = + let + frontendSource = src + "/src/frontend"; + in + stdenv.mkDerivation (finalAttrs: { + + pname = "inventree-frontend"; + inherit version; + + src = frontendSource; + + yarnOfflineCache = fetchYarnDeps { + yarnLock = finalAttrs.src + "/yarn.lock"; + hash = "sha256-wXIVtW1dMxhyuZ1LmuYZ2IwUbRZwbYmdRkiribMbK20="; + }; + + nativeBuildInputs = [ + nodejs + yarnConfigHook + yarnBuildHook + yarnInstallHook + ]; + + buildPhase = '' + mkdir -p $out + + export PATH=$PATH:$TMP/frontend/node_modules/.bin + substituteInPlace $TMP/frontend/vite.config.ts --replace-warn "../../src/backend/InvenTree/web/static/web" "$out/static/web" + + npm run extract + npm run compile + npm run build + ''; + }); +in +python3.pkgs.buildPythonApplication rec { + pname = "inventree"; + pyproject = true; + inherit version src; + + dependencies = + with python3.pkgs; + [ + django + dj-rest-auth + django-allauth + django-cleanup + django-cors-headers + django-crispy-forms + django-dbbackup + django-error-report-2 + django-filter + django-flags + django-formtools + django-ical + django-import-export + django-maintenance-mode + django-markdownify + django-money + django-mptt + django-mailbox + django-anymail + django-q2 + django-redis + django-sesame + django-sql-utils + django-sslserver + django-stdimage + django-structlog + django-taggit + django-oauth-toolkit + django-otp + django-user-sessions + django-weasyprint + standard-imghdr + django-xforwardedfor-middleware + djangorestframework-simplejwt + djangorestframework + drf-spectacular + + bleach + cryptography + distutils + dulwich + feedparser + gunicorn + jinja2 + pdf2image + pillow + pint + python-barcode + python-dotenv + qrcode + pytz + pyyaml + rapidfuzz + sentry-sdk + structlog + tablib + tinycss2 + weasyprint + whitenoise + pypdf + ppf-datamatrix + psycopg2 + mysqlclient + + opentelemetry-api + opentelemetry-sdk + opentelemetry-exporter-otlp + opentelemetry-instrumentation-django + opentelemetry-instrumentation-requests + opentelemetry-instrumentation-redis + opentelemetry-instrumentation-sqlite3 + opentelemetry-instrumentation-system-metrics + opentelemetry-instrumentation-wsgi + ] + ++ tablib.optional-dependencies.all + ++ tablib.optional-dependencies.xls + ++ tablib.optional-dependencies.xlsx + ++ djangorestframework-simplejwt.optional-dependencies.crypto + ++ django-anymail.optional-dependencies.amazon-ses + ++ django-allauth.optional-dependencies.socialaccount + ++ django-allauth.optional-dependencies.saml + ++ django-allauth.optional-dependencies.openid + ++ django-allauth.optional-dependencies.mfa; + + build-system = [ python3.pkgs.setuptools ]; + + prePatch = + let + skippedCheckFunctions = [ + "test_task_check_for_updates" + "test_download_image" + "test_commit_info" + "test_rates" + "test_download_build_orders" + "test_valid_url" + "test_refresh_endpoint" + "test_download_csv" + "test_download_line_items" + "test_export" + "test_download_xlsx" + "test_download_csv" + "test_export" + "test_part_label_translation" + "test_part_download" + "test_date_filters" + "test_bom_export" + "test_hash" + "test_date" + "test_api_call" + "test_function_errors" + "test_stocktake_exporter" + "test_return" + "test_plugin_install" + "test_full_process" + "test_package_loading" + "test_export" + "test_users_exist" + ]; + skippedFuncScripts = builtins.map (funcName: '' + grep -rlZ ${funcName} . | while IFS= read -r -d "" file; do + substituteInPlace "$file" --replace-fail "${funcName}" "skip_${funcName}" + done + '') skippedCheckFunctions; + in + '' + ${lib.concatStringsSep "\n" skippedFuncScripts} + ''; + + installPhase = + let + pythonPath = python3.pkgs.makePythonPath dependencies; + in + '' + runHook preInstall + + # Don't need to bother with a non-maintained library from ages ago + substituteInPlace src/backend/InvenTree/InvenTree/settings.py --replace-fail "django_slowtests.testrunner.DiscoverSlowestTestsRunner" "django.test.runner.DiscoverRunner" + + mkdir -p $out/lib/${pname}/src/backend/InvenTree/web/ + cp -r src $out/lib/${pname} + ln -s ${frontend}/static $out/lib/${pname}/src/backend/InvenTree/web + # cp -r ${frontend}/static $out/lib/${pname}/src/backend/InvenTree/web + + chmod +x $out/lib/${pname}/src/backend/InvenTree/manage.py + + makeWrapper $out/lib/${pname}/src/backend/InvenTree/manage.py $out/bin/${pname} \ + --prefix PYTHONPATH : "${pythonPath}:$out/lib/${pname}/src/backend/InvenTree" + + makeWrapper ${lib.getExe python3.pkgs.gunicorn} $out/bin/gunicorn \ + --prefix PYTHONPATH : "${pythonPath}:$out/${python3.sitePackages}":"${pythonPath}:$out/lib/${pname}/src/backend/InvenTree" + + runHook postInstall + ''; + doCheck = true; + env = { + DJANGO_SETTINGS_MODULE = "InvenTree.settings"; + }; + + checkPhase = '' + runHook preCheck + + tmpDir=$(mktemp -d) + mkdir -p $tmpDir/media + mkdir -p $tmpDir/.cache/fontconfig + export HOME=$tmpDir + export INVENTREE_STATIC_ROOT=$tmpDir + export INVENTREE_MEDIA_ROOT=$tmpDir/media + export INVENTREE_BACKUP_DIR=$tmpDir + export INVENTREE_DB_ENGINE=django.db.backends.sqlite3 + export INVENTREE_DB_NAME=inventree.db + export INVENTREE_SITE_URL="http://localhost:8000" + + export INVENTREE_PLUGINS_ENABLED=true + export INVENTREE_PLUGIN_TESTING=true + export INVENTREE_PLUGIN_TESTING_SETUP=true + + pushd src/backend/InvenTree + ${python3.interpreter} ./manage.py check + ${python3.interpreter} ./manage.py migrate + + ${python3.interpreter} ./manage.py test --failfast + popd + + runHook postCheck + ''; + + nativeCheckInputs = with python3.pkgs; [ + django-test-migrations + pytest-django + pytest-env + pytestCheckHook + invoke + coverage + pytest-cov + pdfminer-six + ]; + passthru = + let + pythonPath = python3.pkgs.makePythonPath dependencies; + in + { + inherit frontend; + pythonPath = pythonPath; + }; + + meta = { + description = "Open Source Inventory Management System"; + homepage = "https://inventree.org/"; + changelog = "https://github.com/paperless-ngx/paperless-ngx/releases/tag/${src.tag}"; + license = lib.licenses.mit; + platforms = lib.platforms.linux; + mainProgram = "inventree"; + maintainers = with lib.maintainers; [ + kurogeek + ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a74ca9d7fd5c..dcab0bf56907 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12517,4 +12517,6 @@ with pkgs; gpac-unstable = callPackage ../by-name/gp/gpac/package.nix { releaseChannel = "unstable"; }; + + inventree = callPackage ../by-name/in/inventree/package.nix { }; } From 9b846c35633678211f0aea7c4fe0bfa87c938d8c Mon Sep 17 00:00:00 2001 From: kurogeek Date: Thu, 29 Jan 2026 20:15:25 +0700 Subject: [PATCH 20/20] inventree: 1.1.10 --- nixos/modules/services/misc/inventree.nix | 21 +++++---------------- pkgs/by-name/in/inventree/package.nix | 12 ++++++++---- pkgs/top-level/all-packages.nix | 2 -- 3 files changed, 13 insertions(+), 22 deletions(-) diff --git a/nixos/modules/services/misc/inventree.nix b/nixos/modules/services/misc/inventree.nix index b5e5ecec9210..15476e20b167 100644 --- a/nixos/modules/services/misc/inventree.nix +++ b/nixos/modules/services/misc/inventree.nix @@ -35,6 +35,7 @@ let in { + meta.buildDocsInSandbox = false; meta.maintainers = with lib.maintainers; [ kurogeek ]; @@ -65,6 +66,7 @@ in secretKeyFile = mkOption { type = types.path; default = "${cfg.dataDir}/secret_key.txt"; + defaultText = lib.literalExpression ''"''${cfg.dataDir}/secret_key.txt"''; example = "/run/keys/inventree-secret-key"; description = '' Path to a file containing the secret key @@ -113,7 +115,6 @@ in dbuser = mkOption { type = types.str; default = "inventree"; - defaultText = lib.literalExpression "inventree"; description = "Database username."; }; passwordFile = mkOption { @@ -122,7 +123,7 @@ in example = "/run/keys/inventree-dbpassword"; description = '' A file containing the password corresponding to - . + . ''; }; createLocally = mkOption { @@ -136,7 +137,7 @@ in type = types.str; default = "localhost"; example = "inventree.example.com"; - description = mdDoc '' + description = '' The INVENTREE_SITE_URL option defines the base URL for the InvenTree server. This is a critical setting, and it is required for correct operation of the server. If not specified, the @@ -175,19 +176,7 @@ in str ]) ); - default = { - INVENTREE_CONFIG_FILE = lib.mkDefault "${cfg.dataDir}/config/config.yaml"; - INVENTREE_OIDC_PRIVATE_KEY_FILE = lib.mkDefault "${cfg.dataDir}/config/oidc_private_key.txt"; - INVENTREE_STATIC_ROOT = lib.mkDefault "${cfg.dataDir}/data/static_root"; - INVENTREE_MEDIA_ROOT = lib.mkDefault "${cfg.dataDir}/data/media"; - INVENTREE_BACKUP_DIR = lib.mkDefault "${cfg.dataDir}/data/backups"; - INVENTREE_SITE_URL = lib.mkDefault "http://${cfg.domain}"; - INVENTREE_PLUGIN_FILE = lib.mkDefault "${cfg.dataDir}/data/plugins/plugins.txt"; - INVENTREE_PLUGIN_DIR = lib.mkDefault "${cfg.dataDir}/data/plugins"; - INVENTREE_ADMIN_PASSWORD_FILE = lib.mkDefault cfg.adminPasswordFile; - INVENTREE_SECRET_KEY_FILE = lib.mkDefault cfg.secretKeyFile; - INVENTREE_AUTO_UPDATE = lib.mkDefault "false"; - }; + default = { }; description = '' InvenTree config options. diff --git a/pkgs/by-name/in/inventree/package.nix b/pkgs/by-name/in/inventree/package.nix index 109b4ad7550b..81b09762966a 100644 --- a/pkgs/by-name/in/inventree/package.nix +++ b/pkgs/by-name/in/inventree/package.nix @@ -17,12 +17,12 @@ let }; }; - version = "0.18.0"; + version = "1.1.10"; src = fetchFromGitHub { owner = "inventree"; repo = "inventree"; - rev = "d6c722041987d13a4e596711aafa0f30cde3f9a0"; - hash = "sha256-BnRE6BM6/LHUtP3H0L8qh3LAxFphNlpll+r1oH4sGuQ="; + tag = "${version}"; + hash = "sha256-TPB/3pFIU+ui4c+CbqIKTyAfJ/Xepm/RIhZeYhTrgI4="; }; frontend = @@ -38,7 +38,7 @@ let yarnOfflineCache = fetchYarnDeps { yarnLock = finalAttrs.src + "/yarn.lock"; - hash = "sha256-wXIVtW1dMxhyuZ1LmuYZ2IwUbRZwbYmdRkiribMbK20="; + hash = "sha256-Ijbkx+INZgsvMhkzo8h/FUY75W3UHnKAdUjQRD8kJZw="; }; nativeBuildInputs = [ @@ -93,6 +93,7 @@ python3.pkgs.buildPythonApplication rec { django-sql-utils django-sslserver django-stdimage + django-storages django-structlog django-taggit django-oauth-toolkit @@ -131,6 +132,7 @@ python3.pkgs.buildPythonApplication rec { ppf-datamatrix psycopg2 mysqlclient + requests-mock opentelemetry-api opentelemetry-sdk @@ -185,6 +187,8 @@ python3.pkgs.buildPythonApplication rec { "test_package_loading" "test_export" "test_users_exist" + "test_import_part" + "test_model_names" ]; skippedFuncScripts = builtins.map (funcName: '' grep -rlZ ${funcName} . | while IFS= read -r -d "" file; do diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index dcab0bf56907..a74ca9d7fd5c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12517,6 +12517,4 @@ with pkgs; gpac-unstable = callPackage ../by-name/gp/gpac/package.nix { releaseChannel = "unstable"; }; - - inventree = callPackage ../by-name/in/inventree/package.nix { }; }