diff options
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..7609f72 --- /dev/null +++ b/flake.nix @@ -0,0 +1,71 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + systems.url = "github:nix-systems/default"; + + pyproject-nix = { + url = "github:pyproject-nix/pyproject.nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + uv2nix = { + url = "github:pyproject-nix/uv2nix"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.pyproject-nix.follows = "pyproject-nix"; + }; + + pyproject-build-systems = { + url = "github:pyproject-nix/build-system-pkgs"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.pyproject-nix.follows = "pyproject-nix"; + inputs.uv2nix.follows = "uv2nix"; + }; + }; + + outputs = { + self, + nixpkgs, + systems, + pyproject-nix, + uv2nix, + pyproject-build-systems, + ... + }: let + inherit (nixpkgs) lib; + eachSystem = lib.genAttrs (import systems); + workspace = uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; }; + in { + devShells = eachSystem (system: let + pkgs = nixpkgs.legacyPackages.${system}; + python = pkgs.python3; + overlay = workspace.mkPyprojectOverlay { + sourcePreference = "wheel"; + }; + editableOverlay = workspace.mkEditablePyprojectOverlay { + root = "$REPO_ROOT"; + }; + editableSet = (pkgs.callPackage pyproject-nix.build.packages { + inherit python; + }).overrideScope (lib.composeManyExtensions [ + pyproject-build-systems.overlays.default + overlay + editableOverlay + ]); + venv = editableSet.mkVirtualEnv "rangifer-dev" workspace.deps.all; + in { + default = pkgs.mkShell { + packages = [ venv pkgs.uv pkgs.pyright ]; + + env = { + UV_NO_SYNC = "1"; + UV_PYTHON = "${venv}/bin/python"; + UV_PYTHON_DOWNLOADS = "never"; + }; + shellHook = '' + unset PYTHONPATH + export REPO_ROOT=$(git rev-parse --show-toplevel) + ''; + }; + }); + }; +} |