Files
.hive/templates/_uv-python/flake.nix
T
2026-06-19 17:53:01 +02:00

96 lines
2.9 KiB
Nix

{
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];
};
};
};
}