Add Emacs config with install scripts for laptop and work

Shared: init.el / early-init.el with Vertico stack, Corfu, Eglot,
treesit-auto, Catppuccin Mocha, doom-modeline, Magit, avy, harpoon,
embark, wgrep, expand-region, envrc, org-mode, and drop-in lang loader.

Lang configs split by stow target:
- shared: elisp, org
- laptop: C/C++, Rust, Go, LaTeX (AUCTeX + latexmk + Zathura)
- work:   C#, JS/TS/HTML/CSS/React (apheleia+prettier), Copilot

install-personal.sh: Fedora — gcc/clang, rustup, Go, texlive, zathura
install-work.sh: Ubuntu 24.04 WSL — dotnet-sdk-10.0, Node 22 via nvm, ts-ls

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-29 15:12:32 -04:00
parent b0ed92c0cf
commit 9ac5b2beff
13 changed files with 486 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
;;; lisp/langs/web.el --- JS / TS / HTML / CSS / React -*- lexical-binding: t -*-
;; web-mode for JSX, TSX, and HTML template files
(use-package web-mode
:mode (("\\.jsx\\'" . web-mode)
("\\.tsx\\'" . web-mode)
("\\.html?\\'" . web-mode))
:custom
(web-mode-markup-indent-offset 2)
(web-mode-css-indent-offset 2)
(web-mode-code-indent-offset 2))
;; typescript-language-server handles JS, TS, JSX, TSX
(with-eval-after-load 'eglot
(add-to-list 'eglot-server-programs
'((js-mode js-ts-mode typescript-ts-mode tsx-ts-mode web-mode)
. ("typescript-language-server" "--stdio")))
(add-to-list 'eglot-server-programs
'((html-mode mhtml-mode)
. ("vscode-html-language-server" "--stdio")))
(add-to-list 'eglot-server-programs
'((css-mode css-ts-mode)
. ("vscode-css-language-server" "--stdio"))))
(dolist (hook '(js-mode-hook js-ts-mode-hook
typescript-ts-mode-hook tsx-ts-mode-hook
web-mode-hook
html-mode-hook mhtml-mode-hook
css-mode-hook css-ts-mode-hook))
(add-hook hook #'eglot-ensure))
;; Async formatting via Prettier (apheleia runs formatters without blocking)
(use-package apheleia
:hook ((js-mode . apheleia-mode)
(js-ts-mode . apheleia-mode)
(typescript-ts-mode . apheleia-mode)
(tsx-ts-mode . apheleia-mode)
(css-mode . apheleia-mode)
(css-ts-mode . apheleia-mode)
(web-mode . apheleia-mode))
:config
(setf (alist-get 'web-mode apheleia-mode-alist) '(prettier)))