{ description = "ZUGFeRD REST API Service"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; pythonPackages = pkgs.python311Packages; # factur-x package - not available in nixpkgs, so we package it inline factur-x = pythonPackages.buildPythonPackage rec { pname = "factur_x"; version = "3.8"; format = "wheel"; src = pythonPackages.fetchPypi { inherit pname version format; hash = "sha256-alctEgMZw79S2UStnt/bYTigE6h9wqCVpm7i1qc5efs="; }; dependencies = with pythonPackages; [ pypdf lxml ]; pythonRelaxDeps = true; meta = { description = "Python library to generate and read Factur-X invoices"; license = pkgs.lib.licenses.mit; }; }; zugferd-service = pythonPackages.buildPythonApplication { pname = "zugferd-service"; version = "1.0.0"; pyproject = true; src = ./.; pythonRelaxDeps = true; build-system = [ pythonPackages.hatchling ]; dependencies = with pythonPackages; [ fastapi uvicorn pydantic python-multipart factur-x pypdf lxml ]; nativeCheckInputs = with pythonPackages; [ pytestCheckHook pytest-asyncio httpx ]; passthru = { mainProgram = "zugferd-service"; }; meta = { description = "REST API for ZUGFeRD invoice extraction"; license = pkgs.lib.licenses.mit; }; }; in { packages.default = zugferd-service; packages.zugferd-service = zugferd-service; devShells.default = pkgs.mkShell { packages = [ (pkgs.python311.withPackages (ps: with ps; [ fastapi uvicorn pydantic python-multipart pypdf lxml pytest pytest-asyncio httpx # factur-x - install via pip if not available ])) pkgs.python311Packages.pip ]; }; }); }