This check was meant to speed up noninteractive initialization of DOOM Emacs, but the performance penalty is negligible, and there's no telling what future functionality may need what's in those core modules (like doom/bootstrap). So, for simplicity, just load everything.
167 lines
6.2 KiB
EmacsLisp
167 lines
6.2 KiB
EmacsLisp
;;; core.el --- The heart of the beast
|
|
|
|
;;; Naming conventions:
|
|
;;
|
|
;; doom-... public variables or functions (non-interactive)
|
|
;; doom--... private anything (non-interactive), not safe for direct use
|
|
;; doom/... an interactive function
|
|
;; doom:... an evil operator, motion or command
|
|
;; doom|... hook function
|
|
;; doom*... advising functions
|
|
;; doom!... interaction commands exclusively for installing external dependencies
|
|
;; ...! a macro or function that configures DOOM
|
|
;; %... functions used for in-snippet logic
|
|
;; +... Any of the above, but part of a module, e.g. +emacs-lisp|init-hook
|
|
;;
|
|
;; Autoloaded functions are in core/autoload/*.el and modules/*/*/autoload.el or
|
|
;; modules/*/*/autoload/*.el.
|
|
|
|
(defvar doom-version "2.0.0"
|
|
"Current version of DOOM emacs.")
|
|
|
|
(defvar doom-debug-mode (or (getenv "DEBUG") init-file-debug)
|
|
"If non-nil, all doom functions will be verbose. Set DEBUG=1 in the command
|
|
line or use --debug-init to enable this.")
|
|
|
|
(defvar doom-emacs-dir user-emacs-directory
|
|
"The path to this emacs.d directory.")
|
|
|
|
(defvar doom-core-dir (concat doom-emacs-dir "core/")
|
|
"Where essential files are stored.")
|
|
|
|
(defvar doom-modules-dir (concat doom-emacs-dir "modules/")
|
|
"Where configuration modules are stored.")
|
|
|
|
|
|
;; Multi-host directories: I namespace `doom-etc-dir' and `doom-cache-dir' with
|
|
;; host names because I use the same (often symlinked) emacs.d across several
|
|
;; computers -- often simultaneously. Cache or other temporary files would
|
|
;; conflict otherwise.
|
|
|
|
(defvar doom-local-dir (concat doom-emacs-dir ".local/")
|
|
"Root directory for local Emacs files.")
|
|
|
|
(defvar doom-packages-dir (concat doom-local-dir "packages/")
|
|
"Where package.el and quelpa plugins (and their caches) are kept.")
|
|
|
|
(defvar doom-etc-dir
|
|
(concat doom-local-dir "etc/" (system-name) "/")
|
|
"Hostname-based directory for non-volatile temporary files. These are not
|
|
deleted or tampored with by DOOM functions. It should not be used for transient
|
|
or unstable files.")
|
|
|
|
(defvar doom-cache-dir
|
|
(concat doom-local-dir "cache/" (system-name) "/")
|
|
"Hostname-based directory for volatile temporary files. They are deleted when
|
|
`doom/clean-cache' is called. For more stable local storage, use
|
|
`doom-local-dir'.")
|
|
|
|
(defvar doom-autoload-file
|
|
(concat doom-local-dir "autoloads.el")
|
|
"Location of the autoloads file generated by `doom/reload-autoloads'.")
|
|
|
|
(defgroup doom nil
|
|
""
|
|
:group 'emacs)
|
|
|
|
|
|
;;;
|
|
;; UTF-8 as the default coding system
|
|
(set-charset-priority 'unicode) ; pretty
|
|
(prefer-coding-system 'utf-8) ; pretty
|
|
(set-terminal-coding-system 'utf-8) ; pretty
|
|
(set-keyboard-coding-system 'utf-8) ; pretty
|
|
(set-selection-coding-system 'utf-8) ; perdy
|
|
(setq locale-coding-system 'utf-8) ; please
|
|
(setq-default buffer-file-coding-system 'utf-8) ; with sugar on top
|
|
|
|
;; Configuration
|
|
(setq-default
|
|
ad-redefinition-action 'accept ; silence advised function warnings
|
|
apropos-do-all t ; make `apropos' more useful
|
|
compilation-always-kill t ; kill compilation process before starting another
|
|
compilation-ask-about-save nil ; save all buffers on `compile'
|
|
compilation-scroll-output t
|
|
confirm-nonexistent-file-or-buffer t
|
|
custom-file (concat doom-etc-dir "custom.el")
|
|
enable-recursive-minibuffers nil
|
|
debug-on-error (and (not noninteractive) doom-debug-mode)
|
|
idle-update-delay 2 ; update ui less often
|
|
url-configuration-directory (concat doom-cache-dir "url/")
|
|
;; keep the point out of the minibuffer
|
|
minibuffer-prompt-properties '(read-only t point-entered minibuffer-avoid-prompt face minibuffer-prompt)
|
|
;; History & backup settings
|
|
auto-save-default nil
|
|
auto-save-list-file-name (concat doom-cache-dir "autosave")
|
|
backup-directory-alist (list (cons ".*" (concat doom-cache-dir "backup/")))
|
|
create-lockfiles nil
|
|
history-length 1000
|
|
make-backup-files nil
|
|
vc-make-backup-files nil
|
|
;; in case of `persistent-soft'
|
|
pcache-directory (concat doom-cache-dir "pcache/"))
|
|
|
|
;; be quiet at startup
|
|
(advice-add 'display-startup-echo-area-message :override 'ignore)
|
|
(setq inhibit-startup-message t
|
|
inhibit-startup-echo-area-message user-login-name
|
|
initial-major-mode 'fundamental-mode
|
|
initial-scratch-message nil)
|
|
|
|
|
|
;;;
|
|
;; Automatic minor modes
|
|
(defvar doom-auto-minor-mode-alist '()
|
|
"Alist mapping filename patterns to corresponding minor mode functions, like
|
|
`auto-mode-alist'. All elements of this alist are checked, meaning you can
|
|
enable multiple minor modes for the same regexp.")
|
|
|
|
(defun doom|enable-minor-mode-maybe ()
|
|
"Check file name against `doom-auto-minor-mode-alist'."
|
|
(when buffer-file-name
|
|
(let ((name buffer-file-name)
|
|
(remote-id (file-remote-p buffer-file-name))
|
|
(alist doom-auto-minor-mode-alist))
|
|
;; Remove backup-suffixes from file name.
|
|
(setq name (file-name-sans-versions name))
|
|
;; Remove remote file name identification.
|
|
(when (and (stringp remote-id)
|
|
(string-match-p (regexp-quote remote-id) name))
|
|
(setq name (substring name (match-end 0))))
|
|
(while (and alist (caar alist) (cdar alist))
|
|
(if (string-match (caar alist) name)
|
|
(funcall (cdar alist) 1))
|
|
(setq alist (cdr alist))))))
|
|
|
|
(add-hook 'find-file-hook 'doom|enable-minor-mode-maybe)
|
|
|
|
|
|
;;;
|
|
;; Bootstrap
|
|
(setq gc-cons-threshold 402653184
|
|
gc-cons-percentage 0.6)
|
|
|
|
(let (file-name-handler-list)
|
|
(eval-and-compile
|
|
(require 'core-packages (concat doom-core-dir "core-packages")))
|
|
(eval-when-compile
|
|
(doom-initialize))
|
|
(setq load-path (eval-when-compile load-path))
|
|
|
|
;;; Let 'er rip
|
|
(require 'core-lib)
|
|
(require 'core-os) ; consistent behavior across Oses
|
|
(with-demoted-errors "AUTOLOAD ERROR: %s"
|
|
(require 'autoloads doom-autoload-file t))
|
|
(require 'core-ui) ; draw me like one of your French editors
|
|
(require 'core-popups) ; taming sudden yet inevitable windows
|
|
(require 'core-editor) ; baseline configuration for text editing
|
|
(require 'core-projects) ; making Emacs project-aware
|
|
(require 'core-keybinds)) ; centralized keybind system + which-key
|
|
|
|
(add-hook! 'window-setup-hook
|
|
(setq gc-cons-threshold 134217728
|
|
gc-cons-percentage 0.3))
|
|
|
|
(provide 'core)
|
|
;;; core.el ends here
|