{ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; flake-parts.url = "github:hercules-ci/flake-parts"; pyproject-nix.url = "github:pyproject-nix/pyproject.nix"; pyproject-nix.inputs.nixpkgs.follows = "nixpkgs"; uv2nix.url = "github:pyproject-nix/uv2nix"; uv2nix.inputs.pyproject-nix.follows = "pyproject-nix"; uv2nix.inputs.nixpkgs.follows = "nixpkgs"; pyproject-build-systems.url = "github:pyproject-nix/build-system-pkgs"; pyproject-build-systems.inputs.pyproject-nix.follows = "pyproject-nix"; pyproject-build-systems.inputs.uv2nix.follows = "uv2nix"; pyproject-build-systems.inputs.nixpkgs.follows = "nixpkgs"; }; outputs = inputs @ { flake-parts, pyproject-nix, uv2nix, pyproject-build-systems, ... }: let projectName = "YOUR_PROJECT_NAME"; # TODO: Fill in your project name in flake-parts.lib.mkFlake {inherit inputs;} { systems = ["x86_64-linux"]; perSystem = { pkgs, self', ... }: let workspace = uv2nix.lib.workspace.loadWorkspace {workspaceRoot = ./.;}; python = pkgs.lib.head (pyproject-nix.lib.util.filterPythonInterpreters { inherit (workspace) requires-python; inherit (pkgs) pythonInterpreters; }); overlay = workspace.mkPyprojectOverlay { sourcePreference = "wheel"; }; pythonBase = pkgs.callPackage pyproject-nix.build.packages { inherit python; }; pythonSet = pythonBase.overrideScope ( pkgs.lib.composeManyExtensions [ pyproject-build-systems.overlays.wheel overlay ] ); editableOverlay = workspace.mkEditablePyprojectOverlay { root = "$REPO_ROOT"; }; editablePythonSet = pythonSet.overrideScope editableOverlay; devvenv = editablePythonSet.mkVirtualEnv "${projectName}-dev-env" workspace.deps.all; venv = pythonSet.mkVirtualEnv "${projectName}-env" workspace.deps.default; in { packages.default = self'.packages.${projectName}; packages.${projectName} = (pkgs.callPackage pyproject-nix.build.util {}).mkApplication { inherit venv; package = pythonSet.${projectName}; }; apps.default = self'.apps.${projectName}; apps.${projectName} = { type = "app"; program = "${self'.packages.default}/bin/${projectName}"; }; devShells.default = pkgs.mkShell { packages = [ devvenv pkgs.uv ]; env = { UV_NO_SYNC = "1"; UV_PYTHON = editablePythonSet.python.interpreter; UV_PYTHON_DOWNLOADS = "never"; }; shellHook = '' unset PYTHONPATH export REPO_ROOT=$(git rev-parse --show-toplevel) ''; }; devShells.uv = pkgs.mkShell { packages = with pkgs; [python3 uv]; }; }; }; }