-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathflake.nix
129 lines (115 loc) · 4.15 KB
/
flake.nix
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
{
description = "versioningit";
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";
};
systems.url = "github:nix-systems/x86_64-linux";
};
# Disclaimer: Uv2nix is new and experimental.
# Users are expected to be able to contribute fixes.
#
# Note that uv2nix is _not_ using Nixpkgs buildPythonPackage.
# It's using https://pyproject-nix.github.io/pyproject.nix/build.html
outputs =
{ self, nixpkgs, ... }@inputs:
let
inherit (nixpkgs) lib;
# Load a uv workspace from a workspace root.
# Uv2nix treats all uv projects as workspace projects.
workspace = inputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; };
# Create package overlay from workspace.
overlay = workspace.mkPyprojectOverlay {
# Prefer prebuilt binary wheels as a package source.
# Sdists are less likely to "just work" because of the metadata missing from uv.lock.
# Binary wheels are more likely to, but may still require overrides for library dependencies.
sourcePreference = "wheel"; # or sourcePreference = "sdist";
# Optionally customise PEP 508 environment
# environ = {
# platform_release = "5.10.65";
# };
};
# Extend generated overlay with build fixups
#
# Uv2nix can only work with what it has, and uv.lock is missing essential metadata to perform some builds.
# This is an additional overlay implementing build fixups.
# See:
# - https://pyproject-nix.github.io/uv2nix/FAQ.html
pyprojectOverrides = _final: _prev: {
# Implement build fixups here.
};
eachSystem = nixpkgs.lib.genAttrs (import inputs.systems);
pkgsFor = eachSystem (system: nixpkgs.legacyPackages.${system});
# # This example is only using x86_64-linux
pkgs = nixpkgs.legacyPackages.x86_64-linux;
# # Use Python 3.13 from nixpkgs
python = pkgs.python312;
# Construct package set
pythonSetFor = eachSystem (
system:
let
# injecting cairosvg from upstream nixpkgs, as it is currently not
# supported by the uv2nix_hammer project and is still in the todo list.
# https://pyproject-nix.github.io/pyproject.nix/builders/hacks.html
pkgs = pkgsFor.${system};
python = pkgs.python312;
in
# Use base package set from pyproject.nix builders
(pkgs.callPackage inputs.pyproject-nix.build.packages {
inherit python;
}).overrideScope
(
lib.composeManyExtensions [
inputs.pyproject-build-systems.overlays.default
overlay
pyprojectOverrides
]
)
);
in
{
packages = eachSystem (
system:
let
pkgs = pkgsFor.${system};
pythonSet = pythonSetFor.${system};
# version = should be read from the wrapping venv
# hardcoding for now
version = "0.1.0";
in
{
default =
let
# Package the virtual environment
# Enable no optional dependencies for production build.
venv = pythonSet.mkVirtualEnv "minimal-versioningit-env" workspace.deps.default;
in
pkgs.stdenvNoCC.mkDerivation {
pname = "minimal-versioningit";
inherit version;
src = venv;
meta = {
license = pkgs.lib.getLicenseFromSpdxId "GPL-3.0";
};
buildPhase = ''
mkdir -p $out/bin
ln -s $src/bin/hello $out/bin/
'';
};
}
);
};
}