emacs/config/major_modes.org
2026-04-04 23:50:53 -05:00

2.1 KiB

Major Modes

I use quite a few major modes. Mostly those using tree-sitter; Which should be selected automatically. As most of these are pretty straight forward I won't bother with an explanation on each.

;; Markdown
(use-package markdown-mode
  :ensure t
  :mode ("\\.md\\'" . gfm-mode)
  :init (setq markdown-command "multimarkdown")
  :bind (:map markdown-mode-map
              ("C-c C-e" . markdown-do)))

(use-package slint-mode
  :defer t
  :config
  (add-to-list 'auto-mode-alist '("\\.slint\\'" . slint-mode)))

(use-package rainbow-mode
  :commands (rainbow-mode))

;; C
(use-feature c-ts-mode
  :custom
  (c-ts-mode-indent-offset 2)
  (c-ts-mode-indent-style 'k&r)
  :config
  (with-eval-after-load 'c-ts-mode
    (setq-local treesit-primary-parser 'c)))

;; Clojure
(use-package clojure-mode
  :ensure t
  :hook
  (clojure-mode . (lambda () (setq-local lsp-semantic-tokens-enable nil))))

(use-package clojure-ts-mode
  :ensure t
  :mode (("\\.clj\\'" . clojure-ts-mode)
         ("\\.cljs\\'" . clojure-ts-mode)
         ("\\.cljc\\'" . clojure-ts-mode))
  :hook
  (clojure-ts-mode . (lambda () (setq-local lsp-semantic-tokens-enable nil))))

;; Gleam
(use-package gleam-ts-mode
  :mode (rx ".gleam" eos))

(use-package cider
  :ensure t
  :hook
  (clojure-mode . cider-mode)
  (clojure-ts-mode . cider-mode)
  :custom
  ;; Let clojure-lsp handle these
  (cider-eldoc-display-for-symbol-at-point nil)
  (cider-use-xref nil)
  (cider-completion-at-point-enable nil))

(use-package elixir-ts-mode
  :ensure t
  :defer t
  :custom
  (lsp-elixir-server-command '("expert_darwin_arm64" "--stdio")))

(use-package heex-ts-mode
  :mode ("\\.heex\\'" . heex-ts-mode))

;; Meson
(use-package meson-mode
  :demand t
  :mode "\\.build\\'")

;; rust-mode
(use-package rust-mode
  :ensure t
  :init
  (setq rust-mode-treesitter-derive t))

(use-package rustic
  :ensure (:host github :repo "emacs-rustic/rustic")
  :after (rust-ts-mode)
  :config
  (setq rustic-cargo-clippy-trigger-fix 'on-compile
        rustic-rustfmt-args "+nightly"))

;; Scheme
(use-package geiser-chez :ensure t)