|
3 | 3 |
|
4 | 4 | inputs = {
|
5 | 5 | nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
| 6 | + |
6 | 7 | utils.url = "github:gytis-ivaskevicius/flake-utils-plus";
|
7 |
| - poetry2nix = { |
8 |
| - url = "github:nix-community/poetry2nix"; |
9 |
| - inputs = { |
10 |
| - nixpkgs.follows = "nixpkgs"; |
11 |
| - flake-utils.follows = "utils/flake-utils"; |
12 |
| - }; |
13 |
| - }; |
| 8 | + |
14 | 9 | nemo = {
|
15 | 10 | url = "github:knowsys/nemo/refs/tags/v0.7.0";
|
16 | 11 | inputs = {
|
17 | 12 | nixpkgs.follows = "nixpkgs";
|
18 | 13 | utils.follows = "utils";
|
19 | 14 | };
|
20 | 15 | };
|
| 16 | + |
| 17 | + pyproject-nix = { |
| 18 | + url = "github:pyproject-nix/pyproject.nix"; |
| 19 | + inputs.nixpkgs.follows = "nixpkgs"; |
| 20 | + }; |
| 21 | + |
| 22 | + uv2nix = { |
| 23 | + url = "github:pyproject-nix/uv2nix"; |
| 24 | + inputs.pyproject-nix.follows = "pyproject-nix"; |
| 25 | + inputs.nixpkgs.follows = "nixpkgs"; |
| 26 | + }; |
| 27 | + |
| 28 | + pyproject-build-systems = { |
| 29 | + url = "github:pyproject-nix/build-system-pkgs"; |
| 30 | + inputs.pyproject-nix.follows = "pyproject-nix"; |
| 31 | + inputs.uv2nix.follows = "uv2nix"; |
| 32 | + inputs.nixpkgs.follows = "nixpkgs"; |
| 33 | + }; |
21 | 34 | };
|
22 | 35 |
|
23 | 36 | outputs =
|
24 | 37 | {
|
25 | 38 | self,
|
26 | 39 | utils,
|
27 |
| - poetry2nix, |
28 | 40 | nemo,
|
| 41 | + uv2nix, |
| 42 | + pyproject-nix, |
| 43 | + pyproject-build-systems, |
29 | 44 | ...
|
30 | 45 | }@inputs:
|
31 | 46 | let
|
32 | 47 | inherit (utils.lib) mkFlake;
|
| 48 | + inherit (inputs.nixpkgs) lib; |
| 49 | + |
| 50 | + workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; |
| 51 | + hacks = pkgs: pkgs.callPackage pyproject-nix.build.hacks { }; |
| 52 | + overlay = workspace.mkPyprojectOverlay { |
| 53 | + sourcePreference = "wheel"; |
| 54 | + }; |
| 55 | + |
| 56 | + nemoOverlay = pkgs: final: prev: { |
| 57 | + nemo-python = (hacks final).nixpkgsPrebuilt { |
| 58 | + from = nemo.packages."${pkgs.system}".nemo-python; |
| 59 | + prev = prev.requests; # ugly hack, but we require requests anyway |
| 60 | + }; |
| 61 | + }; |
| 62 | + |
| 63 | + pyprojectOverrides = final: prev: { |
| 64 | + networkit = prev.networkit.overrideAttrs (old: { |
| 65 | + nativeBuildInputs = old.nativeBuildInputs ++ [ |
| 66 | + (final.resolveBuildSystem { |
| 67 | + cmake = [ ]; |
| 68 | + cython = [ ]; |
| 69 | + scikit-build-core = [ ]; |
| 70 | + setuptools = [ ]; |
| 71 | + numpy = [ ]; |
| 72 | + }) |
| 73 | + ]; |
| 74 | + }); |
| 75 | + }; |
| 76 | + |
| 77 | + python = pkgs: pkgs.python312; |
| 78 | + |
| 79 | + pythonSet = |
| 80 | + pkgs: |
| 81 | + (pkgs.callPackage pyproject-nix.build.packages { |
| 82 | + python = python pkgs; |
| 83 | + }).overrideScope |
| 84 | + ( |
| 85 | + lib.composeManyExtensions [ |
| 86 | + pyproject-build-systems.overlays.default |
| 87 | + overlay |
| 88 | + (nemoOverlay pkgs) |
| 89 | + pyprojectOverrides |
| 90 | + ] |
| 91 | + ); |
| 92 | + |
| 93 | + virtualenv = |
| 94 | + pkgs: |
| 95 | + (pythonSet pkgs).mkVirtualEnv "knowledge-graphs-venv" ( |
| 96 | + workspace.deps.all // { nemo-python = [ ]; } |
| 97 | + ); |
33 | 98 | in
|
34 | 99 | mkFlake {
|
35 | 100 | inherit self inputs;
|
36 | 101 |
|
37 | 102 | channels.nixpkgs.overlaysBuilder = channels: [
|
38 |
| - poetry2nix.overlays.default |
39 | 103 | nemo.overlays.default
|
40 | 104 | ];
|
41 | 105 |
|
42 | 106 | outputsBuilder = channels: {
|
43 | 107 | devShells.default =
|
44 | 108 | let
|
45 | 109 | pkgs = channels.nixpkgs;
|
46 |
| - poetryEnv = pkgs.poetry2nix.mkPoetryEnv { |
47 |
| - projectDir = ./.; |
48 |
| - overrides = pkgs.poetry2nix.overrides.withDefaults ( |
49 |
| - self: super: { |
50 |
| - networkit = super.networkit.overridePythonAttrs (old: { |
51 |
| - src = pkgs.fetchFromGitHub { |
52 |
| - owner = "networkit"; |
53 |
| - repo = "networkit"; |
54 |
| - rev = "9b33495752e5b98f1401faea911c026279a0d478"; |
55 |
| - hash = "sha256-sarzPsbrXpMam16z2kKn53nAW2I99CQ67diaIYLKjCI="; |
56 |
| - fetchSubmodules = true; |
57 |
| - |
58 |
| - }; |
59 |
| - nativeBuildInputs = [ |
60 |
| - self.cython |
61 |
| - pkgs.cmake |
62 |
| - ] ++ (old.nativeBuildInputs or [ ]); |
63 |
| - |
64 |
| - buildInputs = [ self.scikit-build ] ++ (old.buildInputs or [ ]); |
65 |
| - dontUseCmakeConfigure = true; |
66 |
| - }); |
67 |
| - } |
68 |
| - ); |
69 |
| - extraPackages = pypkgs: [ pkgs.nemo-python ]; |
70 |
| - }; |
71 | 110 | in
|
72 |
| - poetryEnv.env.overrideAttrs (oldAttrs: { |
73 |
| - buildInputs = [ |
| 111 | + pkgs.mkShell { |
| 112 | + packages = [ |
| 113 | + (virtualenv pkgs) |
74 | 114 | pkgs.black
|
75 |
| - pkgs.poetry |
76 | 115 | pkgs.mypy
|
77 | 116 | pkgs.nemo
|
| 117 | + pkgs.uv |
78 | 118 | ];
|
79 |
| - }); |
| 119 | + env = |
| 120 | + { |
| 121 | + UV_NO_SYNC = "1"; |
| 122 | + UV_PYTHON_DOWNLOADS = "never"; |
| 123 | + UV_PYTHON = python pkgs; |
| 124 | + } |
| 125 | + // lib.optionalAttrs pkgs.stdenv.isLinux { |
| 126 | + LD_LIBRARY_PATH = lib.makeLibraryPath pkgs.pythonManylinuxPackages.manylinux1; |
| 127 | + }; |
| 128 | + shellHook = '' |
| 129 | + unset PYTHONPATH |
| 130 | + ''; |
| 131 | + }; |
80 | 132 | };
|
81 | 133 | };
|
82 | 134 | }
|
0 commit comments