From c5eb628248c1251a7f10f9e88e5a9013874de161 Mon Sep 17 00:00:00 2001 From: derped Date: Sun, 29 Jan 2023 14:34:19 +0100 Subject: [PATCH] Update emacs web-mode configuration. --- pkgsets/emacs/web-mode.nix | 64 +++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 15 deletions(-) diff --git a/pkgsets/emacs/web-mode.nix b/pkgsets/emacs/web-mode.nix index 99b1f7d..5f3cb61 100644 --- a/pkgsets/emacs/web-mode.nix +++ b/pkgsets/emacs/web-mode.nix @@ -6,11 +6,22 @@ mkIf (elem "emacs::web-mode" config.machine.pkgs) { programs.emacs.init.usePackage = { web-mode = { enable = true; + init = "(require 'sgml-mode)"; + hook = [ + "(web-mode . (lambda () (sgml-electric-tag-pair-mode)))" + '' + (web-mode . (lambda () + (when (and (buffer-file-name) + (equal (file-name-extension (buffer-file-name)) "svelte")) + (lsp)))) + '' + ]; # bind = {}; mode = [ ''("\\.html\\'" . web-mode)'' ''("\\.css\\'" . web-mode)'' ''("\\.html?\\'" . web-mode)'' + ''("\\.svelte\\'" . web-mode)'' ''("\\.phtml\\'" . web-mode)'' ''("\\.tpl\\.php\\'" . web-mode)'' ''("\\.[agj]sp\\'" . web-mode)'' @@ -20,6 +31,21 @@ mkIf (elem "emacs::web-mode" config.machine.pkgs) { ''("\\.djhtml\\'" . web-mode)'' ]; config = '' + (setq web-mode-markup-indent-offset 2) + (setq web-mode-css-indent-offset 2) + (setq web-mode-code-indent-offset 2) + (setq web-mode-sql-indent-offset 2) + (setq web-mode-script-padding 2) + (setq web-mode-style-padding 2) + (setq web-mode-part-padding 2) + (setq web-mode-block-padding 2) + (setq web-mode-enable-comment-annotation 't) + + (setq web-mode-enable-current-element-highlight 't) + + (setq web-mode-enable-sql-detection 't) + (setq web-mode-auto-close-style 2) + (setq web-mode-engines-alist '(("php" . "\\.phtml\\'") ("blade" . "\\.blade\\.")) @@ -34,26 +60,34 @@ mkIf (elem "emacs::web-mode" config.machine.pkgs) { }; typescript-mode = { enable = true; - hook = lib.optional (elem "emacs::lsp" config.machine.pkgs) + hook = [ "(typescript-mode . (lambda () (subword-mode)))" ] + ++ lib.optional (elem "emacs::lsp" config.machine.pkgs) ''(typescript-mode . (lambda () (lsp)))''; mode = [ ''("\\.ts\\'" . typescript-mode)'' + ''("\\.tsx?\\'" . typescript-tsx-mode)'' ]; + init = '' + (define-derived-mode typescript-tsx-mode typescript-mode "tsx") + ''; + config = '' + (setq typescript-indent-level 2) + ''; + }; + # https://github.com/NixOS/nixpkgs/pull/150239 + tree-sitter = { + enable = true; + package = (epkgs: [ epkgs.tree-sitter (epkgs.tree-sitter-langs.withPlugins(p: epkgs.tree-sitter-langs.plugins ++ [ p.tree-sitter-markdown p.tree-sitter-tsx ]))]); + hook = [ + "(typescript-mode . tree-sitter-hl-mode)" + "(typescript-tsx-mode . tree-sitter-hl-mode)" + ]; + config = '' + (tree-sitter-require 'tsx) + (add-to-list 'tree-sitter-major-mode-language-alist '(typescript-tsx-mode . tsx)) + ''; + }; - # tide = { - # enable = true; - # after = [ "typescript-mode" "company" "flycheck" ]; - # hook = [ - # "(typescript-mode . tide-setup)" - # "(typescript-mode . tide-hl-identifier-mode)" - # "(before-save . tide-format-before-save)" - # ]; - # config = '' - # (flycheck-mode +1) - # (setq flycheck-check-syntax-automatically '(save mode-enabled)) - # (setq company-tooltip-align-annotations t) - # ''; - # }; impatient-mode = { enable = true; };