{ description = "document-service using uv2nix"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; pyproject-nix = { url = "github:pyproject-nix/pyproject.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; uv2nix = { url = "github:pyproject-nix/uv2nix"; inputs.pyproject-nix.follows = "pyproject-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; pyproject-build-systems = { url = "github:pyproject-nix/build-system-pkgs"; inputs.pyproject-nix.follows = "pyproject-nix"; inputs.uv2nix.follows = "uv2nix"; inputs.nixpkgs.follows = "nixpkgs"; }; }; outputs = { nixpkgs, pyproject-nix, uv2nix, pyproject-build-systems, ... }: let inherit (nixpkgs) lib; forAllSystems = lib.genAttrs lib.systems.flakeExposed; workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; overlay = workspace.mkPyprojectOverlay { sourcePreference = "wheel"; }; editableOverlay = workspace.mkEditablePyprojectOverlay { root = "$REPO_ROOT"; }; pythonSets = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; python = pkgs.python3; in (pkgs.callPackage pyproject-nix.build.packages { inherit python; }).overrideScope ( lib.composeManyExtensions [ pyproject-build-systems.overlays.wheel overlay ] ) ); in { devShells = forAllSystems ( system: let pkgs = nixpkgs.legacyPackages.${system}; pythonSet = pythonSets.${system}.overrideScope editableOverlay; virtualenv = pythonSet.mkVirtualEnv "document-service-dev-env" workspace.deps.all; in { default = pkgs.mkShell { packages = [ virtualenv pkgs.uv pkgs.pyright pkgs.file ]; env = { UV_NO_SYNC = "1"; UV_PYTHON = pythonSet.python.interpreter; UV_PYTHON_DOWNLOADS = "never"; LD_LIBRARY_PATH = "${pkgs.file.out}/lib:$LD_LIBRARY_PATH"; }; shellHook = '' unset PYTHONPATH export REPO_ROOT=$(git rev-parse --show-toplevel) ''; }; } ); packages = forAllSystems (system: let pkgs = nixpkgs.legacyPackages.${system}; virtualenv = pythonSets.${system}.mkVirtualEnv "document-service-env" workspace.deps.default; in { default = virtualenv; dockerImage = pkgs.dockerTools.buildLayeredImage { name = "document-service"; contents = [ virtualenv pkgs.bashInteractive pkgs.busybox pkgs.shadow pkgs.file pkgs.git # Include git for version info ]; config = { Cmd = ["/bin/python" "-m" "uvicorn" "app.main:app" "--host" "0.0.0.0" "--port" "8082"]; Env = [ "PYTHONUNBUFFERED=1" "LD_LIBRARY_PATH=${pkgs.file.out}/lib" "S3_ENDPOINT" "S3_ACCESS_KEY" "S3_SECRET_KEY" "S3_BUCKET" "S3_REGION" "HOST" "PORT" "LOG_LEVEL" ]; }; }; }); }; }