From a751485bf08fb751e92a62ca17fb3530296f0ceb Mon Sep 17 00:00:00 2001 From: GarandPLG Date: Wed, 11 Feb 2026 16:07:36 +0100 Subject: [PATCH] Add ruff LSP and Python tooling to Zed config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add uv, python314, and ruff to extra packages. Enable Python format‑on‑save, use ruff as formatter and language server, and set tab size to 4. Configure ruff LSP with a bash wrapper and detailed inlay‑hint options. --- modules/home/zed/extra-packages.nix | 3 +++ modules/home/zed/user-settings/languages.nix | 12 ++++++++++- modules/home/zed/user-settings/lsp.nix | 22 ++++++++++++++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/modules/home/zed/extra-packages.nix b/modules/home/zed/extra-packages.nix index 2461d5e..93f0219 100644 --- a/modules/home/zed/extra-packages.nix +++ b/modules/home/zed/extra-packages.nix @@ -5,5 +5,8 @@ nixd alejandra opencode + uv + python314 + ruff ]; } diff --git a/modules/home/zed/user-settings/languages.nix b/modules/home/zed/user-settings/languages.nix index cc5ea2b..295444e 100644 --- a/modules/home/zed/user-settings/languages.nix +++ b/modules/home/zed/user-settings/languages.nix @@ -4,7 +4,17 @@ _: { "nixd" "!nil" ]; - Python.language_servers = ["!basedpyright"]; + Python = { + format_on_save = "on"; + formatter.language_server.name = "ruff"; + code_actions_on_format."source.organizeImports.ruff" = true; + language_servers = [ + "ruff" + "!ty" + "!basedpyright" + ]; + tab_size = 4; + }; YAML.tab_size = 2; JavaScript = { formatter.language_server.name = "biome"; diff --git a/modules/home/zed/user-settings/lsp.nix b/modules/home/zed/user-settings/lsp.nix index 1d43b08..0702cda 100644 --- a/modules/home/zed/user-settings/lsp.nix +++ b/modules/home/zed/user-settings/lsp.nix @@ -72,5 +72,27 @@ }; }; }; + ruff = { + binary = { + path = lib.getExe pkgs.bash; + arguments = [ + "-c" + "if [ -e flake.nix ]; then nix develop --command ruff server; else ruff server; fi" + ]; + }; + initialization_options = { + check.command = "ruff check ."; + inlayHints = { + maxLength = null; + lifetimeElisionHints = { + enable = "skip_trivial"; + useParameterNames = true; + }; + closureReturnTypeHints = { + enable = "always"; + }; + }; + }; + }; }; }