From 0b76fe490c0703af5c458acd830754f96b353c81 Mon Sep 17 00:00:00 2001 From: Julian Kuners Date: Tue, 7 Oct 2025 14:05:23 +0200 Subject: [PATCH] add `pyproject-nix` overlay --- flake.nix | 23 ++++++++++++++++++----- nix/kimp-pyk-pyproject/default.nix | 23 +++++++++++++++++++++++ nix/kimp-pyk/default.nix | 21 ++++++--------------- 3 files changed, 47 insertions(+), 20 deletions(-) create mode 100644 nix/kimp-pyk-pyproject/default.nix diff --git a/flake.nix b/flake.nix index 26a4d82..d3d8a42 100644 --- a/flake.nix +++ b/flake.nix @@ -52,8 +52,14 @@ }; kimpOverlay = final: prev: let + kimp-pyk-pyproject = final.callPackage ./nix/kimp-pyk-pyproject { + inherit uv2nix; + }; kimp-pyk = final.callPackage ./nix/kimp-pyk { - inherit pyproject-nix pyproject-build-systems uv2nix; + inherit pyproject-nix pyproject-build-systems kimp-pyk-pyproject; + pyproject-overlays = [ + (k-framework.overlays.pyk-pyproject system) + ]; python = final."python${pythonVer}"; }; kimp = final.callPackage ./nix/kimp { @@ -61,7 +67,7 @@ rev = self.rev or null; }; in { - inherit kimp; + inherit kimp kimp-pyk kimp-pyk-pyproject; }; pkgs = import nixpkgs { inherit system; @@ -90,12 +96,19 @@ ''; }; packages = rec { - inherit (pkgs) kimp uv; + inherit (pkgs) kimp uv kimp-pyk kimp-pyk-pyproject; default = kimp; }; }) // { - overlays.default = final: prev: { - inherit (self.packages.${final.system}) kimp; + overlays = { + default = final: prev: { + inherit (self.packages.${final.system}) kimp; + }; + # this pyproject-nix overlay allows for overriding the python packages that are otherwise locked in `uv.lock` + # by using this overlay in dependant nix flakes, you ensure that nix overrides also override the python package + pyk-pyproject = system: final: prev: { + inherit (self.packages.${system}.kimp-pyk-pyproject.lockFileOverlay final prev) kimp-pyk; + }; }; }; } diff --git a/nix/kimp-pyk-pyproject/default.nix b/nix/kimp-pyk-pyproject/default.nix new file mode 100644 index 0000000..3083eba --- /dev/null +++ b/nix/kimp-pyk-pyproject/default.nix @@ -0,0 +1,23 @@ +{ + lib, + callPackage, + + uv2nix, +}: +let + src = callPackage ../kimp-source { }; + + # load a uv workspace from a workspace root + workspace = uv2nix.lib.workspace.loadWorkspace { + workspaceRoot = "${src}"; + }; + + # create overlay + lockFileOverlay = workspace.mkPyprojectOverlay { + # prefer "wheel" over "sdist" due to maintance overhead + # there is no bundled set of overlays for "sdist" in uv2nix, in contrast to poetry2nix + sourcePreference = "wheel"; + }; +in { + inherit lockFileOverlay workspace; +} diff --git a/nix/kimp-pyk/default.nix b/nix/kimp-pyk/default.nix index d5dbeca..921aaa1 100644 --- a/nix/kimp-pyk/default.nix +++ b/nix/kimp-pyk/default.nix @@ -4,39 +4,30 @@ pyproject-nix, pyproject-build-systems, - uv2nix, + kimp-pyk-pyproject, + pyproject-overlays, python }: let + inherit (kimp-pyk-pyproject) lockFileOverlay workspace; + pyproject-util = callPackage pyproject-nix.build.util {}; pyproject-packages = callPackage pyproject-nix.build.packages { inherit python; }; - # load a uv workspace from a workspace root - workspace = uv2nix.lib.workspace.loadWorkspace { - workspaceRoot = callPackage ../kimp-source { }; - }; - - # create overlay - lockFileOverlay = workspace.mkPyprojectOverlay { - # prefer "wheel" over "sdist" due to maintance overhead - # there is no bundled set of overlays for "sdist" in uv2nix, in contrast to poetry2nix - sourcePreference = "wheel"; - }; - buildSystemsOverlay = import ./build-systems-overlay.nix; # construct package set - pythonSet = pyproject-packages.overrideScope (lib.composeManyExtensions [ + pythonSet = pyproject-packages.overrideScope (lib.composeManyExtensions ([ # make build tools available by default as these are not necessarily specified in python lock files pyproject-build-systems.overlays.default # include all packages from the python lock file lockFileOverlay # add build system overrides to certain python packages buildSystemsOverlay - ]); + ] ++ pyproject-overlays)); in pyproject-util.mkApplication { # default dependancy group enables no optional dependencies and no dependency-groups venv = pythonSet.mkVirtualEnv "kimp-env" workspace.deps.default;