{ description = "Flake using pyproject.toml metadata"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; pyproject-nix = { url = "github:pyproject-nix/pyproject.nix"; inputs.nixpkgs.follows = "nixpkgs"; }; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }@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; inswapperModel = pkgs.stdenv.mkDerivation { name = "inswapper_128"; src = pkgs.fetchurl { url = "https://huggingface.co/thebiglaskowski/inswapper_128.onnx/resolve/main/inswapper_128.onnx"; hash = "sha256-5KPwjHU8ty0E4Qqg99vj3uu/OVZ9Tq1tzgjpiqSeFq8="; }; phases = [ "installPhase" ]; installPhase = '' mkdir -p "$out/var/lib/insightface/models/" cp $src "$out/var/lib/insightface/models/inswapper_128.onnx" ''; }; buffaloModel = pkgs.stdenv.mkDerivation { name = "buffalo_l_Model"; src = pkgs.fetchurl { url = "https://github.com/deepinsight/insightface/releases/download/v0.7/buffalo_l.zip"; hash = "sha256-gP/jfYpZQNWac4TCAaKjjUdB8vPFHu9G67KCGKewyi8="; }; unpackPhase = /*shell*/'' ls -l $src echo $src mkdir -p "$out/var/lib/insightface/buffalo_l/" unar -D -o $out/var/lib/insightface/buffalo_l/ $src ''; nativeBuildInputs = [ pkgs.unar ]; }; postInstall = /*shell*/'' mkdir -p $out/var/lib/insightface/models/buffalo_l cp ${inswapperModel} $out/var/lib/insightface/models/inswapper_128.onnx ''; # ${pkgs.unar}/bin/unar -D -o $out/var/lib/insightface/models/buffalo_l ${buffaloModel} # ''; packageAttrs = project.renderers.buildPythonPackage { inherit python; }; packageAttrsLive = project.renderers.mkPythonEditablePackage { inherit python; }; protestswap = python.pkgs.buildPythonPackage ( packageAttrs # // { inherit postInstall; } ); in { devShells.${system}.default = let arg = project.renderers.mkPythonEditablePackage { inherit python; }; pythonEnv = python.pkgs.mkPythonEditablePackage ( arg ); in pkgs.mkShell { packages = [ pkgs.python3 pkgs.uv # buffaloModel protestswap pkgs.gcc14 ]; shellHook = /*shell*/ '' ls -l ${buffaloModel} INSIGHTFACE_ROOT_DIR=$(mktemp -d /tmp/insightface.XXXXXXXX) export INSIGHTFACE_ROOT_DIR mkdir -p "$INSIGHTFACE_ROOT_DIR" ln -s ${inswapperModel}/var/lib/insightface/models "$INSIGHTFACE_ROOT_DIR/models" ln -s ${buffaloModel}/var/lib/insightface/buffalo_l "$INSIGHTFACE_ROOT_DIR/buffalo_l" # export PROTESTSWAP_ROOT="/tmp/protestswap_models" # mkdir -p "$PROTESTSWAP_ROOT/buffalo_l" # # cp ${inswapperModel} "$PROTESTSWAP_ROOT/inswapper_128.onnx" unset PYTHONPATH uv sync . .venv/bin/activate ''; }; packages.${system}.default = protestswap; }; } # 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}; # }; # });