{ pkgs, ... }: { programs.helix = { extraPackages = with pkgs; [ rust-analyzer rustfmt nil nixfmt-rfc-style python311Packages.python-lsp-server clang-tools black emmet-ls vscode-langservers-extracted nodePackages.typescript-language-server nodePackages."@astrojs/language-server" ]; settings = { theme = "tokyonight"; editor = { line-number = "relative"; cursor-shape = { insert = "bar"; normal = "block"; select = "underline"; }; whitespace.render = { space = "all"; tab = "all"; newline = "none"; }; whitespace.characters = { space = "·"; nbsp = "⍽"; tab = "→"; newline = "⏎"; tabpad = "·"; # Tabs will look like "→···" (depending on tab width) }; cursorline = true; lsp.display-messages = true; }; }; languages = { language-server.emmet-ls = { command = "emmet-ls"; args = [ "--stdio" ]; }; language-server.astro-ls = { command = "astro-ls"; args = [ "--stdio" ]; config = { typescript.tsdk = "${pkgs.typescript}/lib/node_modules/typescript/lib"; environment = "node"; }; }; language = [ { name = "html"; language-servers = [ "vscode-html-language-server" "emmet-ls" ]; } { name = "astro"; scope = "source.astro"; injection-regex = "astro"; file-types = [ "astro" ]; roots = [ "package.json" "astro.config.mjs" ]; language-servers = [ "astro-ls" "emmet-ls" ]; auto-format = true; } ]; }; }; }