From 1a943aea69ac7f4869fbd29dc609e56b00f5a8d0 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Fri, 23 Jan 2026 18:05:59 -0500 Subject: [PATCH] refactor: cut down on pseudo-features Way back, I added these three pseudo-features: (featurep 'dynamic-modules) (featurep 'harfbuzz) (featurep 'jansson) Why? Because some build features have pseudo features (like `tty-child-frames`, `pgtk`, and `threads`), but others don't, and I wanted more consistency around build feature detection. Years later, I realized it wasn't used much internally and only ended up confusing readers who didn't realize these were Doom's additions and not built into Emacs. Emacs' idiosyncrasies may not be nice or elegant, but they're less surprising to elisp beginners and veterans alike. --- lisp/doom.el | 1 + modules/term/vterm/config.el | 2 +- modules/tools/tree-sitter/doctor.el | 2 +- modules/ui/ligatures/config.el | 2 +- modules/ui/ligatures/packages.el | 2 +- 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lisp/doom.el b/lisp/doom.el index 5e72a9c36..7e85e9660 100644 --- a/lisp/doom.el +++ b/lisp/doom.el @@ -144,6 +144,7 @@ (push :system features) (put :system 'subfeatures doom-system) +;;; DEPRECATED: Remove in v3 ;; Emacs needs a more consistent way to detect build features, and the docs ;; claim `system-configuration-features' is not da way. Some features (that ;; don't represent packages) can be found in `features' (which `featurep' diff --git a/modules/term/vterm/config.el b/modules/term/vterm/config.el index 4f9b393e6..822750240 100644 --- a/modules/term/vterm/config.el +++ b/modules/term/vterm/config.el @@ -1,7 +1,7 @@ ;;; term/vterm/config.el -*- lexical-binding: t; -*- (use-package! vterm - :when (featurep 'dynamic-modules) + :when (bound-and-true-p module-file-suffix) ; requires dynamic-modules support :commands vterm-mode :hook (vterm-mode . doom-mark-buffer-as-real-h) :hook (vterm-mode . hide-mode-line-mode) ; modeline serves no purpose in vterm diff --git a/modules/tools/tree-sitter/doctor.el b/modules/tools/tree-sitter/doctor.el index dfe7deb38..e4b06ea53 100644 --- a/modules/tools/tree-sitter/doctor.el +++ b/modules/tools/tree-sitter/doctor.el @@ -1,6 +1,6 @@ ;;; tools/tree-sitter/doctor.el -*- lexical-binding: t; -*- -(unless (featurep 'dynamic-modules) +(unless (bound-and-true-p module-file-suffix) ; requires dynamic-modules support (error! "Emacs not built with dynamic modules support")) (if (version< emacs-version "29.1") diff --git a/modules/ui/ligatures/config.el b/modules/ui/ligatures/config.el index d4bc906be..994f62fca 100644 --- a/modules/ui/ligatures/config.el +++ b/modules/ui/ligatures/config.el @@ -149,7 +149,7 @@ isn't disabled in `+ligatures-extras-in-modes'." ;; leave the check here for safety. ((and (> emacs-major-version 27) (or (featurep 'ns) - (featurep 'harfbuzz)) + (string-match-p "HARFBUZZ" system-configuration-features)) (featurep 'composite)) ; Emacs loads `composite' at startup (after! ligature diff --git a/modules/ui/ligatures/packages.el b/modules/ui/ligatures/packages.el index dd0263a28..159d5adb4 100644 --- a/modules/ui/ligatures/packages.el +++ b/modules/ui/ligatures/packages.el @@ -2,6 +2,6 @@ ;;; ui/ligatures/packages.el (when (and (or (featurep 'ns) - (featurep 'harfbuzz)) + (string-match-p "HARFBUZZ" system-configuration-features)) (featurep 'composite)) (package! ligature :pin "6ac1634612dbd42f7eb81ecaf022bd239aabb954"))