{ description = "Flake using pyproject.toml metadata"; inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # pyproject-nix.url = "github:pyproject-nix/pyproject.nix"; # pyproject-nix.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; }; outputs = { self, nixpkgs, flake-utils, ... }: flake-utils.lib.eachDefaultSystem (system: let pkgs = nixpkgs.legacyPackages.${system}; 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; }; 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 #################### # 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 = { "${project.name}" = package; default = self.packages.${system}.${project.name}; }; }); }