{ # config, pkgs, lib, ... }: let inherit (lib) getExe mkForce; in { programs.zed-editor.enable = true; programs.zed-editor = { extensions = [ "bash" "fsharp" "justfile" "nix" "typst" ]; userSettings = { vim_mode = true; ui_font_size = mkForce 14; buffer_font_size = mkForce 14; # features = {inline_completion_provider = "none";}; auto_update = false; languages = { "FSharp" = { language_servers = [ "fsautocomplete" ]; }; "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 = ["-l" "120"]; }; }; }; "Python" = { format_on_save = "on"; formatter = [ { language_server = { name = "ruff"; }; } ]; language_servers = ["ruff" "pylsp"]; }; }; lsp = { bash-language-server = { binary = { path = getExe pkgs.bash-language-server; env = { "SHELLCHECK_PATH" = getExe pkgs.shellcheck; "SHFMT_PATH" = getExe pkgs.shfmt; }; }; }; fsautocomplete = { binary = { path = getExe pkgs.fsautocomplete; }; settings = { AutomaticWorkspaceInit = true; FSharp.ExternalAutocomplete = true; FSharp.linting.fsharplint.enabled = true; FSharp.linting.fsharplint.configFile = "fsharplint.json"; FSharp.formatting.fantomas.enabled = true; }; }; clangd = { binary = { arguments = []; path = "${pkgs.clang-tools}/bin/clangd"; }; }; # rust-analyzer = { # binary = { # arguments = []; # path = getExe pkgs.rust-analyzer; # }; # }; pylsp = { binary = { # arguments = ["server"]; path = getExe pkgs.python313Packages.python-lsp-server; }; }; ruff = { binary = { arguments = ["server"]; path = getExe pkgs.ruff; }; }; nil = { binary = { arguments = []; path = getExe pkgs.nil; }; settings.formatting.command = [(getExe pkgs.alejandra)]; }; # texlab = { # binary = { # arguments = []; # path = getExe pkgs.texlab; # }; # }; tinymist = { binary = { arguments = []; path = getExe pkgs.tinymist; }; }; # json-language-server = { # binary = { # arguments = ["--stdio"]; # path = getExe pkgs.nodePackages.vscode-json-languageserver; # }; # }; yaml-language-server = { binary = { arguments = ["--stdio"]; path = getExe pkgs.yaml-language-server; }; }; }; telemetry = { diagnostics = false; metrics = false; }; }; }; }