From a09ff10ff673c002606ef212dfd81791cd40ed3e Mon Sep 17 00:00:00 2001 From: Ryan Mulligan Date: Thu, 12 Mar 2026 08:16:06 -0700 Subject: [PATCH 1/2] python: switch active LSP modules to ty --- pkgs/modules/default.nix | 5 +---- pkgs/modules/python-base/default.nix | 2 +- pkgs/modules/python/default.nix | 17 +++++------------ pkgs/modules/ty/default.nix | 19 +++++++++++++++++++ pkgs/upgrade-map/default.nix | 2 ++ 5 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 pkgs/modules/ty/default.nix diff --git a/pkgs/modules/default.nix b/pkgs/modules/default.nix index 32263030..d9a08f13 100644 --- a/pkgs/modules/default.nix +++ b/pkgs/modules/default.nix @@ -53,10 +53,7 @@ let python = pkgs.python313; pypkgs = pkgs.python313Packages; }) - (import ./pyright-extended { - nodejs = pkgs-24_11.nodejs-18_x; - }) - (import ./pyright) + (import ./ty) (import ./ruff) (import ./nodejs { diff --git a/pkgs/modules/python-base/default.nix b/pkgs/modules/python-base/default.nix index f4279e6d..b324b80c 100644 --- a/pkgs/modules/python-base/default.nix +++ b/pkgs/modules/python-base/default.nix @@ -28,7 +28,7 @@ in description = '' Basic module for Python. Includes the interpreter and basic Replit configuration but nothing else. This may be combined with the - pyright-extended module. + ty module. ''; replit.packages = [ diff --git a/pkgs/modules/python/default.nix b/pkgs/modules/python/default.nix index eeadb4fa..a7f073e2 100644 --- a/pkgs/modules/python/default.nix +++ b/pkgs/modules/python/default.nix @@ -1,7 +1,5 @@ { python, pypkgs }: { pkgs-unstable -, pkgs-24_11 -, pkgs-23_05 , lib , ... }: @@ -60,11 +58,6 @@ let inherit pkgs python python-ld-library-path; }; - pyright-extended = pkgs.callPackage ../../pyright-extended { - nodejs = pkgs-24_11.nodejs-18_x; - yapf = pypkgs.yapf; - }; - sitecustomize = pkgs.callPackage ./sitecustomize.nix { }; uv = pkgs.callPackage ./uv { @@ -85,7 +78,7 @@ in name = "Python Tools"; displayVersion = pythonVersion; description = '' - Development tools for Python. Includes Python interpreter, Pip, Poetry, Pyright extended language server. + Development tools for Python. Includes Python interpreter, Pip, Poetry, and the ty language server. ''; replit.packages = [ @@ -108,11 +101,11 @@ in ]; }; - replit.dev.languageServers.pyright-extended = { - name = "pyright-extended"; - displayVersion = pyright-extended.version; + replit.dev.languageServers.ty = { + name = "ty"; + displayVersion = pkgs.ty.version; language = "python3"; - start = "${pyright-extended}/bin/langserver.index.js --stdio"; + start = "${pkgs.ty}/bin/ty server"; }; replit.dev.packagers.upmPython = { diff --git a/pkgs/modules/ty/default.nix b/pkgs/modules/ty/default.nix new file mode 100644 index 00000000..7efa2175 --- /dev/null +++ b/pkgs/modules/ty/default.nix @@ -0,0 +1,19 @@ +{ pkgs, lib, ... }: +{ + id = "ty"; + name = "ty LSP"; + displayVersion = pkgs.ty.version; + description = '' + Ty is an extremely fast Python type checker from Astral with an integrated language server. + ''; + replit.dev.languageServers.ty = { + name = "ty"; + displayVersion = pkgs.ty.version; + language = "python3"; + start = "${pkgs.ty}/bin/ty server"; + }; + + replit.env = { + PATH = "${pkgs.ty}/bin"; + }; +} diff --git a/pkgs/upgrade-map/default.nix b/pkgs/upgrade-map/default.nix index 1db5a6ad..445f6b40 100644 --- a/pkgs/upgrade-map/default.nix +++ b/pkgs/upgrade-map/default.nix @@ -25,6 +25,8 @@ let "go" = "go-1.19"; "go-1.23" = "go-1.24"; "go-1.24" = "go-1.25"; + "pyright" = "ty"; + "pyright-extended" = "ty"; "r-4.3" = "r-4.4"; "r-4.4" = "r-4.5"; "rust" = "rust-1.69"; From 8ee4fff089c922279342b6a4a633c5260ba06f50 Mon Sep 17 00:00:00 2001 From: Ryan Mulligan Date: Thu, 12 Mar 2026 08:39:49 -0700 Subject: [PATCH 2/2] ty: add local 0.0.21 derivation --- pkgs/modules/python/default.nix | 6 ++- pkgs/modules/ty/default.nix | 13 +++-- pkgs/ty/default.nix | 86 +++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+), 7 deletions(-) create mode 100644 pkgs/ty/default.nix diff --git a/pkgs/modules/python/default.nix b/pkgs/modules/python/default.nix index a7f073e2..7d640de6 100644 --- a/pkgs/modules/python/default.nix +++ b/pkgs/modules/python/default.nix @@ -58,6 +58,8 @@ let inherit pkgs python python-ld-library-path; }; + ty = pkgs.callPackage ../../ty { }; + sitecustomize = pkgs.callPackage ./sitecustomize.nix { }; uv = pkgs.callPackage ./uv { @@ -103,9 +105,9 @@ in replit.dev.languageServers.ty = { name = "ty"; - displayVersion = pkgs.ty.version; + displayVersion = ty.version; language = "python3"; - start = "${pkgs.ty}/bin/ty server"; + start = "${ty}/bin/ty server"; }; replit.dev.packagers.upmPython = { diff --git a/pkgs/modules/ty/default.nix b/pkgs/modules/ty/default.nix index 7efa2175..fb6c27a7 100644 --- a/pkgs/modules/ty/default.nix +++ b/pkgs/modules/ty/default.nix @@ -1,19 +1,22 @@ -{ pkgs, lib, ... }: +{ pkgs, ... }: +let + ty = pkgs.callPackage ../../ty { }; +in { id = "ty"; name = "ty LSP"; - displayVersion = pkgs.ty.version; + displayVersion = ty.version; description = '' Ty is an extremely fast Python type checker from Astral with an integrated language server. ''; replit.dev.languageServers.ty = { name = "ty"; - displayVersion = pkgs.ty.version; + displayVersion = ty.version; language = "python3"; - start = "${pkgs.ty}/bin/ty server"; + start = "${ty}/bin/ty server"; }; replit.env = { - PATH = "${pkgs.ty}/bin"; + PATH = "${ty}/bin"; }; } diff --git a/pkgs/ty/default.nix b/pkgs/ty/default.nix new file mode 100644 index 00000000..56d817b4 --- /dev/null +++ b/pkgs/ty/default.nix @@ -0,0 +1,86 @@ +{ lib +, stdenv +, rustPlatform +, fetchFromGitHub +, installShellFiles +, buildPackages +, versionCheckHook +, nix-update-script +, +}: + +rustPlatform.buildRustPackage (finalAttrs: { + pname = "ty"; + version = "0.0.21"; + + src = fetchFromGitHub { + owner = "astral-sh"; + repo = "ty"; + tag = finalAttrs.version; + fetchSubmodules = true; + hash = "sha256-/R0nw9V0IhuTxRaZNydvk/xGC5V1gYHQxBkAU/Cjsmw="; + }; + + postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' + rm ${finalAttrs.cargoRoot}/crates/ty/tests/file_watching.rs + ''; + + cargoRoot = "ruff"; + buildAndTestSubdir = finalAttrs.cargoRoot; + + cargoBuildFlags = [ "--package=ty" ]; + + cargoHash = "sha256-NaWWX6EAVkEg/KQ+Up0t2fh/24fnTo6i5dDZoOWErjg="; + + nativeBuildInputs = [ installShellFiles ]; + + preCheck = '' + export CARGO_BIN_EXE_ty="$PWD"/target/${stdenv.hostPlatform.rust.cargoShortTarget}/release/ty + ''; + + cargoTestFlags = [ + "--package=ty" + "--package=ty_python_semantic" + "--package=ty_test" + ]; + + checkFlags = [ + "--skip=python_environment::ty_environment_and_active_environment" + "--skip=python_environment::ty_environment_and_discovered_venv" + "--skip=python_environment::ty_environment_is_only_environment" + "--skip=python_environment::ty_environment_is_system_not_virtual" + "--skip=mdtest::generics/pep695/functions.md" + ]; + + nativeInstallCheckInputs = [ versionCheckHook ]; + doInstallCheck = true; + + postInstall = lib.optionalString (stdenv.hostPlatform.emulatorAvailable buildPackages) ( + let + emulator = stdenv.hostPlatform.emulator buildPackages; + in + '' + installShellCompletion --cmd ty \ + --bash <(${emulator} $out/bin/ty generate-shell-completion bash) \ + --fish <(${emulator} $out/bin/ty generate-shell-completion fish) \ + --zsh <(${emulator} $out/bin/ty generate-shell-completion zsh) + '' + ); + + passthru = { + updateScript = nix-update-script { }; + }; + + meta = { + description = "Extremely fast Python type checker and language server, written in Rust"; + homepage = "https://github.com/astral-sh/ty"; + changelog = "https://github.com/astral-sh/ty/blob/${finalAttrs.version}/CHANGELOG.md"; + license = lib.licenses.mit; + mainProgram = "ty"; + maintainers = with lib.maintainers; [ + bengsparks + figsoda + GaetanLepage + ]; + }; +})