forked from Fediversity/Fediversity
closes #93. note that this includes classes: - `nixos` - `nixosTest` - `nixops4Resource` - `nixops4Deployment` .. and my (made-up, as per the [docs](https://ryantm.github.io/nixpkgs/module-system/module-system/#module-system-lib-evalModules-param-class)): - `nix-unit` - `package` .. while i did not manage to cover: - service tests, given `pkgs.nixosTest` seemed to not actually like `_class = "nixosTest"` (?!) ... nor #93's mentioned destructured arguments for that matter, as per Fediversity/Fediversity#93 (comment) - let me know if that is still desired as well. Reviewed-on: Fediversity/Fediversity#398 Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io> Co-authored-by: Kiara Grouwstra <kiara@procolix.eu> Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
106 lines
2.5 KiB
Nix
106 lines
2.5 KiB
Nix
{
|
|
lib,
|
|
sqlite,
|
|
python3,
|
|
python3Packages,
|
|
callPackage,
|
|
runCommand,
|
|
sources ? import ../../npins,
|
|
}:
|
|
let
|
|
src =
|
|
with lib.fileset;
|
|
toSource {
|
|
root = ../src;
|
|
fileset = intersection (gitTracked ../../.) ../src;
|
|
};
|
|
pyproject = fromTOML pyproject-toml;
|
|
# TODO: define this globally
|
|
name = "panel";
|
|
# TODO: we may want this in a file so it's easier to read statically
|
|
version = "0.0.0";
|
|
pyproject-toml = ''
|
|
[project]
|
|
name = "Fediversity-Panel"
|
|
version = "${version}"
|
|
|
|
[tool.setuptools]
|
|
packages = [ "${name}" ]
|
|
include-package-data = true
|
|
'';
|
|
|
|
generated =
|
|
let
|
|
jsonschema = callPackage "${sources.clan-core}/lib/jsonschema" { } { };
|
|
frontend-options = jsonschema.parseModule ../../deployment/options.nix;
|
|
schema = with builtins; toFile "schema.json" (toJSON frontend-options);
|
|
in
|
|
[
|
|
{
|
|
from = "${sources.htmx}/dist/htmx.min.js";
|
|
to = "./panel/static/htmx.min.js";
|
|
}
|
|
{
|
|
from = schema;
|
|
to = "./panel/configuration/schema.json";
|
|
}
|
|
{
|
|
from =
|
|
let
|
|
codegen = "${python3Packages.datamodel-code-generator}/bin/datamodel-codegen";
|
|
pydantic = runCommand "schema.py" { } ''
|
|
# replace plain `pydantic` with `drf_pydantic` so we can create forms automatically
|
|
${codegen} --input ${schema} | sed '/from pydantic/a\
|
|
from drf_pydantic import BaseModel' > $out
|
|
'';
|
|
in
|
|
"${pydantic}";
|
|
to = "./panel/configuration/schema.py";
|
|
}
|
|
];
|
|
in
|
|
python3.pkgs.buildPythonPackage {
|
|
_class = "package";
|
|
|
|
pname = name;
|
|
inherit (pyproject.project) version;
|
|
pyproject = true;
|
|
inherit src;
|
|
|
|
preBuild = ''
|
|
echo "recursive-include ${name} *" > MANIFEST.in
|
|
cp ${builtins.toFile "source" pyproject-toml} pyproject.toml
|
|
'';
|
|
|
|
propagatedBuildInputs =
|
|
let
|
|
pythonPackages = with python3.pkgs; [
|
|
dj-database-url
|
|
django-compressor
|
|
django-debug-toolbar
|
|
django-libsass
|
|
django-pydantic-field
|
|
drf-pydantic
|
|
django_4
|
|
setuptools
|
|
];
|
|
in
|
|
[
|
|
sqlite
|
|
]
|
|
++ pythonPackages;
|
|
|
|
passthru = {
|
|
inherit generated;
|
|
};
|
|
|
|
postInstall = ''
|
|
mkdir -p $out/bin
|
|
cp -v ${src}/manage.py $out/bin/manage.py
|
|
chmod +x $out/bin/manage.py
|
|
wrapProgram $out/bin/manage.py --prefix PYTHONPATH : "$PYTHONPATH"
|
|
${lib.concatStringsSep "\n" (
|
|
map (file: "cp ${file.from} $out/${python3.sitePackages}/${file.to}") generated
|
|
)}
|
|
'';
|
|
}
|