{ pkgs, ...}: let # We need a version of vscode-language-servers that's less than 4.10 oldNixpkgs = import (fetchTarball "https://github.com/NixOS/nixpkgs/archive/f68797befe20fc56153363e71ea0f0b74542db4b.tar.gz") {}; in { programs.helix = { enable = true; languages = { language-server = { nixd = { command = "${pkgs.nixd}/bin/rnix-lsp"; }; typescript-language-server = { command = "${pkgs.typescript-language-server}/bin/typescript-language-server"; args = [ "--stdio" ]; config.hostInfo = "helix"; }; eslint = { command = "${oldNixpkgs.nodePackages.vscode-langservers-extracted}/bin/vscode-eslint-language-server"; args = ["--stdio"]; config = { run = "onType"; validate = "on"; nodePath = ""; rulesCustomizations = []; workingDirectory.mode = "location"; showDocumentation.enable = true; experimental = { useFlatConfig = false; }; problems = { shortenToSingleLine = false; }; codeAction = { enable = true; location = "separateLine"; }; }; }; }; language = [ { name = "nix"; auto-format = true; language-servers = [ { name = "nixd"; } ]; } { name = "typescript"; file-types = [ "tsx" "ts" ]; auto-format = true; formatter = { command = "prettier"; args = ["--parser=typescript"]; }; language-servers = [ { name = "eslint"; } { name = "typescript-language-server"; } ]; } ]; }; settings = { theme = "catppuccin_mocha"; editor = { line-number = "relative"; lsp.display-messages = true; cursor-shape = { insert = "underline"; normal = "block"; select = "block"; }; bufferline = "multiple"; }; keys = { normal = { g = { a = "code_action"; }; # Maps `ga` to show possible code actions "ret" = [ "move_line_down" "goto_first_nonwhitespace" ]; # Maps the enter key to move to start of next line X = "extend_line_above"; D = "delete_char_backward"; "S-ret" = [ "move_line_up" "goto_first_nonwhitespace" ]; }; insert = { j = { j = "normal_mode"; }; # Maps `jj` to exit insert mode }; }; }; }; }