working with pyproject-nix flake

This commit is contained in:
Prunebutt 2025-10-15 21:41:56 +02:00
parent bb1b8eecb9
commit e047bcd136
2 changed files with 134 additions and 71 deletions

203
flake.nix
View file

@ -3,8 +3,10 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# pyproject-nix.url = "github:pyproject-nix/pyproject.nix";
# pyproject-nix.inputs.nixpkgs.follows = "nixpkgs";
pyproject-nix = {
url = "github:pyproject-nix/pyproject.nix";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
};
@ -13,78 +15,139 @@
nixpkgs,
flake-utils,
...
}:
flake-utils.lib.eachDefaultSystem (system: let
pkgs = nixpkgs.legacyPackages.${system};
}@inputs: let
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
project = inputs.pyproject-nix.lib.project.loadPyproject {
projectRoot = ./.;
};
projectName = project.pyproject.project.name;
python = pkgs.python3;
pyproject = builtins.fromTOML (builtins.readFile ./pyproject.toml);
project = pyproject.project;
package = pkgs.python3Packages.buildPythonPackage {
pname = project.name;
inherit (project) version;
format = "pyproject";
src = ./.;
build-system = with pkgs.python3Packages; [
uv-build
];
# # test dependencies
nativeCheckInputs = with pkgs; [
# python3Packages.mypy
# python3Packages.pytest
taplo
];
# checkPhase = '''';
propagatedBuildInputs = with pkgs; [
python3Packages.click
] ++ builtins.map (dep: pkgs.python3Packages.${dep}) project.dependencies;
inswapperModel = pkgs.stdenv.mkDerivation {
name = "inswapper";
src = pkgs.fetchurl {
url = "https://huggingface.co/thebiglaskowski/inswapper_128.onnx/resolve/main/inswapper_128.onnx";
hash = "sha256-5KPwjHU8ty0E4Qqg99vj3uu/OVZ9Tq1tzgjpiqSeFq8=";
};
editablePackage = pkgs.python3.pkgs.mkPythonEditablePackage {
pname = project.name;
inherit (project) scripts version;
root = "$PWD";
unpackPhase = ''true'';
phases = [
# "installPhase"
];
installPhase = let dest = "$out/var/lib/${projectName}"; in /*shell*/''
ls -l "$src"
mkdir -p "${dest}"
cp $src ${dest}/inswapper_128.onnx
'';
};
in {
devShells.${system}.default = let
arg = project.renderers.withPackages { inherit python;};
pythonEnv = python.withPackages arg;
in pkgs.mkShell {
packages = [ pythonEnv inswapperModel];
shellHook = ''
export FOO=${inswapperModel}/var/lib/${projectName}/inswapper_128.onnx
echo "Binary at '$FOO'"
'';
};
packages.${system} = let
attrs = project.renderers.buildPythonPackage {
inherit python;
};
protestswap = (python.pkgs.buildPythonPackage ( attrs // {
buildInputs = [ inswapperModel ];
} ));
in {
devShells = {
default = pkgs.mkShell {
inputsFrom = [
package
];
buildInputs = [
# our package
editablePackage
#################
# VARIOUS TOOLS #
#################
pkgs.python3Packages.build
pkgs.python3Packages.ipython
####################
# EDITOR/LSP TOOLS #
####################
# LSP server:
pkgs.python3Packages.python-lsp-server
# LSP server plugins of interest:
pkgs.python3Packages.pylsp-mypy
pkgs.python3Packages.pylsp-rope
pkgs.python3Packages.python-lsp-ruff
];
};
# inherit inswapperModel;
# "${projectName}" = protestswap;
default = pkgs.symlinkJoin {
name = "${projectName}";
paths = [inswapperModel protestswap];
};
packages = {
"${project.name}" = package;
default = self.packages.${system}.${project.name};
};
});
};
};
}
# flake-utils.lib.eachDefaultSystem (system: let
# pyproject = builtins.fromTOML (builtins.readFile ./pyproject.toml);
# project = pyproject.project;
#
# package = pkgs.python3Packages.buildPythonPackage {
# pname = project.name;
# inherit (project) version;
# format = "pyproject";
#
# src = ./.;
#
# build-system = with pkgs.python3Packages; [
# uv-build
# ];
#
# # # test dependencies
# nativeCheckInputs = with pkgs; [
# # python3Packages.mypy
# # python3Packages.pytest
# taplo
# ];
#
# # checkPhase = '''';
#
# propagatedBuildInputs = with pkgs; [
# python3Packages.click
# python3Packages.insightface
#
# ] ++ builtins.map (dep: pkgs.python3Packages.${dep}) project.dependencies;
# };
#
# editablePackage = pkgs.python3.pkgs.mkPythonEditablePackage {
# pname = project.name;
# inherit (project) scripts version;
# root = "$PWD";
# };
# in {
# devShells = {
# default = pkgs.mkShell {
# inputsFrom = [
# package
# ];
#
# buildInputs = [
# # our package
# editablePackage
#
# #################
# # VARIOUS TOOLS #
# #################
#
# pkgs.python3Packages.build
# pkgs.python3Packages.ipython
# pkgs.python3Packages.insightface
# inswapperModel
#
# ####################
# # EDITOR/LSP TOOLS #
# ####################
#
# # LSP server:
# pkgs.python3Packages.python-lsp-server
#
# # LSP server plugins of interest:
# pkgs.python3Packages.pylsp-mypy
# pkgs.python3Packages.pylsp-rope
# pkgs.python3Packages.python-lsp-ruff
# ];
# };
# };
#
# packages = {
# "inswapper-model" = inswapperModel;
# "${project.name}" = package;
# default = self.packages.${system}.${project.name};
# };
# });

View file

@ -1,6 +1,6 @@
[project]
name = "protestswap"
version = "0.1.0"
version = "0.0.1"
license-files = ["LICEN[CS]E*"]
description = "A minimal pyproject.toml"
authors = [ ]