{config, ...}: { home-manager.users.jade = {pkgs, ...}: let typstGrammar = pkgs.fetchFromGitHub { owner = "uben0"; repo = "tree-sitter-typst"; rev = "baddc325e858afff90501dbefa00ecfa28528931"; sha256 = "sha256-XZAgnpb1B8EZ2WXPj/JYSZGsmpKsnDiBFCDF0XjunOM"; }; in { home = { sessionVariables.EDITOR = "hx"; packages = [ pkgs.nil pkgs.vscode-langservers-extracted pkgs.nodePackages.typescript-language-server pkgs.emmet-language-server pkgs.typst-lsp ]; }; home.file = { ".config/helix/runtime/queries" = { source = "${typstGrammar}/queries"; }; }; programs.helix = { enable = true; settings = { theme = "gruvbox"; editor = { line-number = "relative"; bufferline = "multiple"; color-modes = true; lsp = { display-messages = true; display-inlay-hints = true; }; shell = ["nu" "-c"]; idle-timeout = 0; indent-guides = { render = true; character = "│"; }; whitespace = { render = { space = "all"; tab = "all"; newline = "none"; }; characters = { space = "·"; nbsp = "⍽"; tab = "→"; }; }; }; keys.normal = { space."=" = ":fmt"; }; }; languages = { language-server = { "nu-builtin-lsp" = { command = "${config.users.defaultUserShell}/bin/nu"; args = ["--lsp"]; }; "rust-analyzer" = { config = { check.command = "clippy"; completion.snippets.custom = { "pub fn" = { prefix = ["pfn" "pubfn"]; postfix = ["pfn"]; body = [ "pub fn $\{receiver\}() {" "\\t$1" "}" ]; scope = "type"; }; }; }; }; "emmet-language-server" = { command = "emmet-language-server"; args = ["--stdio"]; }; # "php" = { # name = "php"; # file-types = [ "php" ]; # language-server = { # command = "psalm"; # args = ["--language-server"]; # }; # }; "typst-lsp" = { command = "typst-lsp"; config = { exportPdf = "onType"; }; }; }; grammar = [ { name = "typst"; source = { git = "https://github.com/uben0/tree-sitter-typst"; rev = "baddc325e858afff90501dbefa00ecfa28528931"; # path = "${typstGrammar}"; }; } ]; language = [ { name = "nu"; language-servers = ["nu-builtin-lsp"]; } { name = "typst"; scope = "source.typst"; file-types = ["typ" "typst"]; injection-regex = "typ(st)?"; comment-token = "//"; indent = { tab-width = 2; unit = " "; }; roots = ["typst.toml"]; formatter = { command = "${pkgs.typstfmt}/bin/typstfmt"; }; auto-format = true; language-servers = ["typst-lsp"]; auto-pairs = { "(" = ")"; "{" = "}"; "[" = "]"; "$" = "$"; "\"" = "\""; }; } { name = "nix"; formatter = { command = "${pkgs.alejandra}/bin/alejandra"; args = ["--quiet"]; }; auto-format = true; } { name = "html"; roots = [".git"]; language-servers = ["vscode-html-language-server" "emmet-language-server"]; auto-format = false; } ]; }; }; }; }