mirror of
https://github.com/exo-explore/exo.git
synced 2026-01-30 08:40:58 -05:00
Add uv2nix to build Python packages from uv.lock. This creates a fully Nix-managed Python environment with the Rust bindings injected via overlay. Changes: - Add pyproject-nix, uv2nix, and pyproject-build-systems flake inputs - Create python/parts.nix with overlays to inject Nix-built Rust wheel - Export packages.exo on macOS (wraps exo/exo-master/exo-worker with dashboard) - Add checks.lint (ruff, all platforms) and checks.pytest (macOS only) - Simplify CI typecheck job using nicknovitski/nix-develop action - Delete .github/actions/typecheck composite action (no longer needed) - Add no-build-package for MLX packages in pyproject.toml (use wheels) The Python build is currently macOS-only since MLX requires Metal. Linux support will be added once the pyproject dependencies are simplified. Test plan: - Run `nix flake check` on macOS to verify pytest and lint pass - Build exo package on macOS: `nix build .#exo` - Verify CI pipeline passes with simplified typecheck job
300 lines
7.6 KiB
JSON
300 lines
7.6 KiB
JSON
{
|
|
"nodes": {
|
|
"crane": {
|
|
"locked": {
|
|
"lastModified": 1767744144,
|
|
"narHash": "sha256-9/9ntI0D+HbN4G0TrK3KmHbTvwgswz7p8IEJsWyef8Q=",
|
|
"owner": "ipetkov",
|
|
"repo": "crane",
|
|
"rev": "2fb033290bf6b23f226d4c8b32f7f7a16b043d7e",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "ipetkov",
|
|
"repo": "crane",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"dream2nix": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
],
|
|
"purescript-overlay": "purescript-overlay",
|
|
"pyproject-nix": [
|
|
"pyproject-nix"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1765953015,
|
|
"narHash": "sha256-5FBZbbWR1Csp3Y2icfRkxMJw/a/5FGg8hCXej2//bbI=",
|
|
"owner": "nix-community",
|
|
"repo": "dream2nix",
|
|
"rev": "69eb01fa0995e1e90add49d8ca5bcba213b0416f",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "nix-community",
|
|
"repo": "dream2nix",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"fenix": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
],
|
|
"rust-analyzer-src": "rust-analyzer-src"
|
|
},
|
|
"locked": {
|
|
"lastModified": 1768287139,
|
|
"narHash": "sha256-nsXFt0OzUi6K7dUzzJD5/v9e0Ic+fvclfIW936/43ZM=",
|
|
"owner": "nix-community",
|
|
"repo": "fenix",
|
|
"rev": "a4a3aa956931f90f35453cb519e4545e9ad7f773",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "nix-community",
|
|
"repo": "fenix",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"flake-compat": {
|
|
"flake": false,
|
|
"locked": {
|
|
"lastModified": 1696426674,
|
|
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
|
"owner": "edolstra",
|
|
"repo": "flake-compat",
|
|
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "edolstra",
|
|
"repo": "flake-compat",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"flake-parts": {
|
|
"inputs": {
|
|
"nixpkgs-lib": [
|
|
"nixpkgs"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1768135262,
|
|
"narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
|
|
"owner": "hercules-ci",
|
|
"repo": "flake-parts",
|
|
"rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "hercules-ci",
|
|
"repo": "flake-parts",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"nixpkgs": {
|
|
"locked": {
|
|
"lastModified": 1768127708,
|
|
"narHash": "sha256-1Sm77VfZh3mU0F5OqKABNLWxOuDeHIlcFjsXeeiPazs=",
|
|
"owner": "NixOS",
|
|
"repo": "nixpkgs",
|
|
"rev": "ffbc9f8cbaacfb331b6017d5a5abb21a492c9a38",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "NixOS",
|
|
"ref": "nixos-unstable",
|
|
"repo": "nixpkgs",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"nixpkgs-swift": {
|
|
"locked": {
|
|
"lastModified": 1761672384,
|
|
"narHash": "sha256-o9KF3DJL7g7iYMZq9SWgfS1BFlNbsm6xplRjVlOCkXI=",
|
|
"owner": "NixOS",
|
|
"repo": "nixpkgs",
|
|
"rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "NixOS",
|
|
"repo": "nixpkgs",
|
|
"rev": "08dacfca559e1d7da38f3cf05f1f45ee9bfd213c",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"purescript-overlay": {
|
|
"inputs": {
|
|
"flake-compat": "flake-compat",
|
|
"nixpkgs": [
|
|
"dream2nix",
|
|
"nixpkgs"
|
|
],
|
|
"slimlock": "slimlock"
|
|
},
|
|
"locked": {
|
|
"lastModified": 1728546539,
|
|
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
|
|
"owner": "thomashoneyman",
|
|
"repo": "purescript-overlay",
|
|
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "thomashoneyman",
|
|
"repo": "purescript-overlay",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"pyproject-build-systems": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
],
|
|
"pyproject-nix": [
|
|
"pyproject-nix"
|
|
],
|
|
"uv2nix": [
|
|
"uv2nix"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1763662255,
|
|
"narHash": "sha256-4bocaOyLa3AfiS8KrWjZQYu+IAta05u3gYZzZ6zXbT0=",
|
|
"owner": "pyproject-nix",
|
|
"repo": "build-system-pkgs",
|
|
"rev": "042904167604c681a090c07eb6967b4dd4dae88c",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "pyproject-nix",
|
|
"repo": "build-system-pkgs",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"pyproject-nix": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1764134915,
|
|
"narHash": "sha256-xaKvtPx6YAnA3HQVp5LwyYG1MaN4LLehpQI8xEdBvBY=",
|
|
"owner": "pyproject-nix",
|
|
"repo": "pyproject.nix",
|
|
"rev": "2c8df1383b32e5443c921f61224b198a2282a657",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "pyproject-nix",
|
|
"repo": "pyproject.nix",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"root": {
|
|
"inputs": {
|
|
"crane": "crane",
|
|
"dream2nix": "dream2nix",
|
|
"fenix": "fenix",
|
|
"flake-parts": "flake-parts",
|
|
"nixpkgs": "nixpkgs",
|
|
"nixpkgs-swift": "nixpkgs-swift",
|
|
"pyproject-build-systems": "pyproject-build-systems",
|
|
"pyproject-nix": "pyproject-nix",
|
|
"treefmt-nix": "treefmt-nix",
|
|
"uv2nix": "uv2nix"
|
|
}
|
|
},
|
|
"rust-analyzer-src": {
|
|
"flake": false,
|
|
"locked": {
|
|
"lastModified": 1768224240,
|
|
"narHash": "sha256-Pp1dDrXKPBUJReZnnDElFyHYn67XTd48zRhToheLjtk=",
|
|
"owner": "rust-lang",
|
|
"repo": "rust-analyzer",
|
|
"rev": "725349602e525df37f377701e001fe8aab807878",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "rust-lang",
|
|
"ref": "nightly",
|
|
"repo": "rust-analyzer",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"slimlock": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"dream2nix",
|
|
"purescript-overlay",
|
|
"nixpkgs"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1688756706,
|
|
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
|
|
"owner": "thomashoneyman",
|
|
"repo": "slimlock",
|
|
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "thomashoneyman",
|
|
"repo": "slimlock",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"treefmt-nix": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1768158989,
|
|
"narHash": "sha256-67vyT1+xClLldnumAzCTBvU0jLZ1YBcf4vANRWP3+Ak=",
|
|
"owner": "numtide",
|
|
"repo": "treefmt-nix",
|
|
"rev": "e96d59dff5c0d7fddb9d113ba108f03c3ef99eca",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "numtide",
|
|
"repo": "treefmt-nix",
|
|
"type": "github"
|
|
}
|
|
},
|
|
"uv2nix": {
|
|
"inputs": {
|
|
"nixpkgs": [
|
|
"nixpkgs"
|
|
],
|
|
"pyproject-nix": [
|
|
"pyproject-nix"
|
|
]
|
|
},
|
|
"locked": {
|
|
"lastModified": 1767701098,
|
|
"narHash": "sha256-CJhKZnWb3gumR9oTRjFvCg/6lYTGbZRU7xtvcyWIRwU=",
|
|
"owner": "pyproject-nix",
|
|
"repo": "uv2nix",
|
|
"rev": "9d357f0d2ce6f5f35ec7959d7e704452352eb4da",
|
|
"type": "github"
|
|
},
|
|
"original": {
|
|
"owner": "pyproject-nix",
|
|
"repo": "uv2nix",
|
|
"type": "github"
|
|
}
|
|
}
|
|
},
|
|
"root": "root",
|
|
"version": 7
|
|
}
|