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
 | 
						|
    )}
 | 
						|
  '';
 | 
						|
}
 |