{ config, pkgs, lib, ... }: let inherit (lib) mkIf mkEnableOption mkForce getExe; cfg = config.editor.zed; in { options = { editor.zed.enable = mkEnableOption "enable zed editor"; }; config = mkIf cfg.enable { programs.zed-editor = { enable = true; extensions = [ "nix" "latex" "typst" "justfile" ]; userSettings = { vim_mode = true; ui_font_size = mkForce 16; buffer_font_size = mkForce 16; features = {inline_completion_provider = "none";}; auto_update = false; languages = { "Nix" = { language-servers = [ "!nil" "nixd" ]; formatter = { external.command = getExe pkgs.alejandra; }; }; "Rust" = { formatter = { external = { command = getExe pkgs.rustfmt; arguments = ["--edition" "2021"]; }; }; }; "typst" = { language-servers = ["tinymist"]; format_on_save = "on"; formatter = { external = { command = getExe pkgs.typstyle; arguments = ["-i" "{buffer_path}"]; }; }; }; "Python" = { format_on_save = "on"; formatter = [ { language_server = { name = "ruff"; }; } ]; language_servers = ["ruff"]; }; }; lsp = { clangd = { binary = { arguments = []; path = "${pkgs.clang-tools}/bin/clangd"; }; }; rust-analyzer = { binary = { arguments = []; path = getExe pkgs.rust-analyzer; }; }; ruff = { binary = { arguments = []; path = getExe pkgs.ruff; }; }; nixd = { binary = { arguments = []; path = getExe pkgs.nixd; }; initialization_options.formatting.command = [(getExe pkgs.alejandra)]; }; nil = { binary = { arguments = []; path = getExe pkgs.nil; }; initialization_options.formatting.command = [(getExe pkgs.alejandra)]; }; texlab = { binary = { arguments = []; path = getExe pkgs.texlab; }; }; tinymist = { binary = { arguments = []; path = getExe pkgs.tinymist; }; }; }; telemetry = { diagnostics = false; metrics = false; }; }; }; }; }