Commit Graph

56 Commits

Author SHA1 Message Date
108158876c fix(cli): inability to find user-emacs-directory
user-emacs-directory is nil in batch sessions, which early-init.el
wasn't expecting, which caused bin/doom to refuse to run out of a
non-standard location.

Fix: #6777
2022-09-16 17:01:57 +02:00
405f6cdd1e fix: load-file-suffixes not being restored
This setting (along with load-file-rep-suffixes) is simplified at
startup to optimize file IO at startup, but it was supposed to be undone
at the end of doom-start (in doom-before-init-hook). Unfortunately, the
restoration hook was not reaching their top-level bindings, causing
dynamic modules (like vterm-modules.so) to fail to load.
2022-09-16 13:07:28 +02:00
b914830403 refactor!: complete profile gen and init systems
BREAKING CHANGE: This commit makes three breaking changes:

- Doom now fully and dynamically generates (and byte-compiles) your
  profile and its init files, which includes your autoloads, loading
  your init files and modules, and then some. This replaces
  doom-initialize-modules, doom-initialize-core-modules, and
  doom-module-loader, which have been removed. This has also improved
  startup time by a bit, but if you use these functions in your CLIs,
  for instance, this will be a breaking change.
- `doom sync` is now required for Doom to see your profiles (and must be
  run whenever you change them, or when you up/downgrade Emacs across
  major versions).
- $DOOMDIR/init.el is now read much earlier than it used to be. Before
  any of doom-{ui,keybinds,editor,projects}, before any autoloads are
  loaded, and before your load-path has been populated with your
  packages. It now runs in the context of early-init.el, giving users
  freer range over what they can affect, but a more minimalistic
  environment to do it in.

  If you must have some logic run when all that is set up, add it to one
  of the module hooks added in e08f68b or 283308a.

This also poses a significant change to Doom's load order (see the
commentary change in lib/doom.el), along with the following (non
breaking) changes:

1. Adds a new `doom profiles sync` command. This will forcibly resync
   your profiles, while `doom sync` will only do so if your profiles
   have changed.
2. Doom now fully and dynamically generates (and byte-compiles) your
   user-init-file, which includes loading all your init files, modules,
   and custom-file. This replaces the job of doom-initialize-modules,
   doom-initialize-core-modules, and doom-module-loader, which have been
   removed. This has also improved startup time by a bit.
3. Defines new doom-state-dir variable, though not used yet (saving that
   and the other breaking changes for the 3.0 release).
4. Redesigns profile directory variables (doom-profile-*-dir) to prepare
   for future XDG-compliance.
5. Removed unused/unimportant profile variables in doom.el.
6. Added lisp/doom-profiles.el. It's hardly feature complete, but it's
   enough to power the system as it is now.
7. Updates the "load order" commentary in doom.el to reflect these
   changes.
2022-09-16 01:14:23 +02:00
42d88421ba refactor: move startup optimizations to doom.el
I move our hackiest and least offensive startup optimizations to core,
so they're easy for me to keep track of (they'll likely change often,
between major Emacs releases), to keep them from affecting non-Doom
profiles, and make it easy for readers to use as a reference.
2022-09-16 01:14:22 +02:00
07d22adb4a nit: revise comments, reformat config sections 2022-09-16 01:14:21 +02:00
2396262cfa nit: revise commentary in early-init.el 2022-09-06 23:28:39 +02:00
89506983fe refactor: early-init comments, loaders, & recursion guards 2022-09-06 22:55:48 +02:00
c05e61536e refactor: make early-init.el Doom's universal bootstrapper
This centralizes Doom's core startup optimizations and, as a
side-effect, reduces the runtime of bin/doom commands substantially.
This also simplifies the user story for loading Doom remotely (for batch
sessions or doomscripts).
2022-09-06 22:55:47 +02:00
1dac4ac37b refactor: move file-name-handler-alist hack to early-init
In the future, early-init.el (among other parts of Doom) will be
byte-compiled, plus I'd rather keep these optimizations in one place.

Ref: 1d8c61698b
2022-09-06 22:55:46 +02:00
efa3e9791f fix: remove inhibit-redisplay hack
If an error occurs before this is restored, this can leave Emacs in a
state where it appears frozen and won't redraw. This can be overcome by
hooking into the debugger, but I'll try that another day.
2022-09-06 22:55:46 +02:00
3a5e34d67b fix: premature doom init in doom sub-profiles
Ensures that Doom doesn't prematurely initialize itself if a non-Doom
config tries to load Doom.
2022-08-02 20:22:31 +02:00
b9933e6637 refactor!: restructure Doom core
BREAKING CHANGE: This restructures the project in preparation for Doom
to be split into two repos. Users that have reconfigured Doom's CLI
stand a good chance of seeing breakage, especially if they've referred
to any core-* feature, e.g.

  (after! core-cli-ci ...)

To fix it, simply s/core-/doom-/, i.e.

  (after! doom-cli-ci ...)

What this commit specifically changes is:
- Renames all core features from core-* to doom-*
- Moves core/core-* -> lisp/doom-*
- Moves core/autoloads/* -> lisp/lib/*
- Moves core/templates -> templates/

Ref: #4273
2022-07-30 22:41:13 +02:00
44f169740e tweak: more debug output at startup
Particularly to do with profiles, in case the user starts Emacs with
--debug or --debug-init.
2022-07-28 12:01:02 +02:00
48e3603dfe fix: envvars in profiles.el not being set 2022-07-28 12:01:02 +02:00
5af38fb08e feat: make bin/doom profile aware
- Fixes Doom's former inability to (trivially) juggle multiple profiles
  based on the same EMACSDIR (see #6593).
- Adds '--profile NAME' switch to bin/doom (also recognized
  $DOOMPROFILE).
- Adds new doom-profile* variables. These will eventually replace
  doom-{local,etc,cache}-dir and doom-{autoloads,env}-file.

This is intentionally messy to ensure backwards compatibility for a
little while longer. This will be fixed over the next couple weeks.

Ref: #6593
2022-07-28 12:01:02 +02:00
1ecb5c7b9b fix: fall back to $EMACSDIR/profiles/*
Formerly, profiles.el and $EMACSDIR/profiles/* were mutually exclusive.
I.e. if the file existed, it'd never check the directory. Now, it will
check the directory if the requested profile isn't in profiles.el, or
the file didn't exist.

Amend: 5b6b204bcb
2022-07-27 13:54:12 +02:00
fbc5fd7f8a nit: revise comments in early-init.el 2022-07-27 12:11:51 +02:00
5b6b204bcb feat: allow Doom be used as a config bootloader
This allows users to use Doom core to switch between Emacs configs (they
don't have to be Doom configs either). Taking after Chemacs, these
configs (called "profiles") can be declared in $EMACSDIR/profiles.el or
implicitly as directories under $EMACSDIR/profiles/ (symlinks work too).
Launch a profile with `emacs --profile foo` or by setting $DOOMPROFILE:
`DOOMPROFILE=foo emacs`.

An example profiles.el looks like this:

   ((doomemacs (user-emacs-directory . "~/.config/emacs")
               (env ("DOOMDIR" . "~/.config/doom")))
    (spacemacs (user-emacs-directory . "~/.config/spacemacs"))
    (prelude   (user-emacs-directory . "~/.config/prelude"))
    (altdoom   (user-emacs-directory . "~/.config/doomemacs")
               (env ("DOOMDIR" . "~/.config/doomprivate1")))
    (altdoom2  (user-emacs-directory . "~/.config/doomemacs")
               (env ("DOOMDIR" . "~/.config/doomprivate2"))))

Chemacs users will find the format of this file familiar; the biggest
differences are:

- Keys are symbols, not strings
- There is no, special "default" profile. The fallback profile is the
  Doom Emacs config doing the bootloading, living in ~/.config/emacs or
  ~/.emacs.d. If you don't like that, set $DOOMPROFILE in your dotfiles
  to the name of another profile.

WARNING: bin/doom does not understand --profile or $DOOMPROFILE yet. To
sync a particular profile, you'll have to run its bin/doom directly,
e.g.

To sync the "global" doom:
  ~/.config/emacs/bin/doom sync
To sync your "altdoom" (and "altdoom2") profiles:
  ~/.config/doomemacs/bin/doom sync
2022-07-27 12:11:51 +02:00
5108ffc44d feat: backport --init-directory for 27/28 users
--init-directory was added in Emacs 29. This backports it for 27/28
users, so users can trivially load an Emacs config living in another
directory (will be necessary for future versions of Doom's sandbox).
However, for this to work, Doom needs to live in ~/.emacs.d or
~/.config/emacs.

Ref: emacs-mirror/emacs@8eaf04de83
2022-07-27 11:16:54 +02:00
1402db5129 refactor: how Doom starts up
Restructures Doom's primary core files and entry points to prepare for
backports (from the new CLI) coming soon.

- Removes $EMACSDIR/init.el.
- Doom configures Emacs to ignore ~/.emacs and ~/_emacs files.
- Doom's bootstrapper for interactive sessions was moved out of core.el
  and doom-initialize into doom-start.el. This change is preparation for
  Doom's new profile system (coming soon™️), where this bootstrapper
  will be dynamically generated.
- core.el and early-init.el have been reorganized, comment headers moved
  around, and comments updated to reflect these changes.
2022-06-18 16:54:45 +02:00
a831946afb feat: no startup optimizations if debug mode is on 2022-02-17 21:14:27 +01:00
e5e301b3e4 refactor: remove redundant load-file advice
A mistake that snuck into 55c1cac while backporting some code from the
CLI rewrite. It was harmless and likely had no side effects, however.

Amend: 55c1cac43f
2022-01-08 18:55:02 +01:00
55c1cac43f tweak: suppress redisplays cause by site-lisp at startup 2021-12-12 22:43:40 +01:00
68ed4e6298 tweak: suppress 'Loading X...' messages at startup
From site-files, particularly. This *might* fix the white flash while
Emacs is starting up in some scenarios.
2021-11-25 01:22:58 +01:00
98f44a006a fix: unset default-input-method in early-init.el
set-language-environment sets default-input-method, which is unwanted.

Fix: #5046
2021-11-04 01:08:43 +01:00
0ab6aba056 perf: inhibit redisplay/echo area at startup
Unnecessary redraws can add 0.2-0.4s to startup times in some cases,
especially where site-files are involved (which spam *Messages* with
"Loading X..." messages; which force redraws).

May also indirectly fix #5643 by deferring redisplay (and therefore
window-buffer-change-functions, which triggers doom-init-ui-hook, which
triggers both Doom's dashboard and persp-mode).

Also removes a redundant set-language-environment call.

Ref #5643
2021-10-18 01:15:09 +02:00
68d8364aea refactor: adopt CalVer and reorganize core.el
Doom is adopting CalVer (starting at 21.12) and, later, I'll move Doom's
core out to a separate repo, where it'll stay with SemVer (starting at
3.0).
2021-10-10 18:36:46 +02:00
d79cea2e4c Minor refactors, reformatting, & comment revision 2021-07-11 17:52:08 -04:00
6ad4f0698e Fix #4995: adapt to more renamed comp-* symbols
Two more variables were renamed upstream.
2021-05-11 19:03:18 -04:00
ea389b8eb2 Restore file-name-handler-alist a little sooner
Too late, and we risk read encoding issues when loading compressed elisp
files.
2021-05-07 02:32:51 -04:00
e2a11d24fd core: minor refactors and comment revisions 2021-05-06 18:36:32 -04:00
bddb2b2a2d Refactor early-init.el 2021-04-21 21:45:04 -04:00
5da3641aad Move init.el to early-init.el
Our first step toward dropping 26.x support. Allows our optimizations to
reach a little further into the startup.
2021-01-09 02:55:08 -05:00
29d8f44254 Add comments 2020-11-16 19:27:39 -05:00
6a82eedeea Respect Xresources
This was disabled because of configs, but I'll leave it to the user to
resolve those issues.
2020-10-30 19:09:31 -04:00
b857566239 Minor refactors 2020-10-20 16:52:39 -04:00
b245abfe72 Set comp-deferred-compilation in early-init.el
Seems it's necessary for some and not others.

The emacs experience(TM).
2020-10-06 14:38:32 -04:00
29b12de83e Fix #3901: unset comp-deferred-compilation later 2020-10-06 02:08:17 -04:00
394a18096e Disable comp-deferred-compilation in early-init.el 2020-08-18 20:32:34 -04:00
900ec70ee3 Ensure menu/tool/scroll bars are disabled 2020-02-21 12:49:57 -05:00
8a9d8f03e2 Fix void-function set-scroll-bar-mode #2310
When emacs is built without GUI support.
2020-01-05 20:12:24 -05:00
f78f71a74c Minor refactors & comment revision 2020-01-01 23:52:02 -05:00
a02cfdc365 No-op package--ensure-init-file completely
Rather than setting package--init-file-ensured to nil. It's less work
for Emacs at startup and is functionally equivalent.
2019-12-27 01:44:40 -05:00
bbc6f19381 Ignore X resources for Emacs 27+
A negligible boost in startup speed.
2019-09-06 15:40:38 -04:00
d59405b282 Minor comment revision & refactors 2019-07-23 00:30:45 +02:00
81ab3dbc5d Simplify and decouple init files
The two doom-gc-* variables in init.el couples the rest of the config to
these two files. The bulk of GC/file-handler optimization was moved into
core.el and simplified (all that idle-timer voodoo was overkill).

Also adds (setq frame-inhibit-implied-reize t) to early-init, which
speeds up startup a fair bit in some edge cases with larger fonts.

squash! Simplify and decouple init files
2019-07-22 02:30:38 +02:00
3ea805cc94 Minor experimental startup optimizations
Definitely premature optimization.
2019-03-02 03:54:04 -05:00
ddaf1e5b67 Fix wrong-type-arg error on menu-bar-open
Due to malformed menu-bar-lines frame property. Same for tool-bar-lines
as well.
2018-09-28 21:13:27 -04:00
a9b4fe2960 Hard code gc-cons-threshold in early-init.el
In the interest of DRY-ness, I avoid redefining `doom-gc-cons-upper-limit`. This value is likely to diverge from the default value of `doom-gc-cons-upper-limit` in the future anyway.
2018-09-19 18:14:01 -04:00
fae47fc448 Emacs27+: reduce number of GCs on startup from 4 to 1
Signed-off-by: Edwin Török <edwin@etorok.net>
2018-09-19 21:51:43 +01:00