Commit Graph

230 Commits

Author SHA1 Message Date
Henrik Lissner
0e851ace9b
Backport bits of CLI rewrite
The rewrite for Doom's CLI is taking a while, so I've backported a few
important changes in order to ease the transition and fix a couple bugs
sooner.

Fixes #2802, #2737, #2386

The big highlights are:

- Fix #2802: We now update recipe repos *before* updating/installing any
  new packages. No more "Could not find package X in recipe repositories".

- Fix #2737: An edge case where straight couldn't reach a pinned
  commit (particularly with agda).

- Doom is now smarter about what option it recommends when straight
  prompts you to make a choice.

- Introduces a new init path for Doom. The old way:
  - Launch in "minimal" CLI mode in non-interactive sessions
  - Launch a "full" interactive mode otherwise.
  The new way
  - Launch in "minimal" CLI mode *only* for bin/doom
  - Launch is a simple mode for non-interactive sessions that still need
    access to your interactive config (like async org export/babel).
  - Launch a "full" interactive mode otherwise.

  This should fix compatibility issues with plugins that use the
  async.el library or spawn child Emacs processes to fake
  parallelization (like org's async export and babel functionality).

- Your private init.el is now loaded more reliably when running any
  bin/doom command. This gives you an opportunity to configure its
  settings.

- Added doom-first-{input,buffer,file}-hook hooks, which we use to queue
  deferred activation of a number of packages. Users can remove these
  modes from these hooks; altogether preventing them from loading,
  rather than waiting for them to load to then disable them,
  e.g. (after! smartparens (smartparens-global-mode -1)) -> (remove-hook
  'doom-first-buffer #'smartparens-global-mode)

  Hooks added to doom-first-*-hook variables will be removed once they
  run.

  This should also indirectly fix #2386, by preventing interactive modes
  from running in non-interactive session.

- Added `doom/bump-*` commands to make bumping modules and packages
  easier, and `doom/bumpify-*` commands for converting package!
  statements into user/repo@sha1hash format for bump commits.

- straight.el is now commit-pinned, like all other packages. We also
  more reliably install straight.el by cloning it ourselves, rather than
  relying on its bootstrap.el.

  This should prevent infinite "straight has diverged from master"
  prompts whenever we change branches (though, you might have to put up
  with it one more after this update -- see #2937 for workaround).

All the other minor changes:

- Moved core/autoload/cli.el to core/autoload/process.el
- The package manager will log attempts to check out pinned commits
- If package state is incomplete while rebuilding packages, emit a
  simpler error message instead of an obscure one!
- Added -u switch to 'doom sync' to make it run 'doom update' afterwards
- Added -p switch to 'doom sync' to make it run 'doom purge' afterwards
- Replace doom-modules function with doom-modules-list
- The `with-plist!` macro was removed, since `cl-destructuring-bind`
  already serves that purpose well enough.
- core/autoload/packages.el was moved into core-packages.el
- bin/doom will no longer die if DOOMDIR or DOOMLOCALDIR don't have a
  trailing slash
- Introduces doom-debug-variables; a list of variables to toggle on
  doom/toggle-debug-mode.
- The sandbox has been updated to reflect the above changes, also:
  1. Child instances will no longer inherit the process environment of
     the host instance,
  2. It will no longer produce an auto-save-list directory in ~/.emacs.d
2020-05-15 01:33:52 -04:00
Henrik Lissner
b63ce98731
Add benchmark hook & restore switch earlier
If the user wants to remove them for some reason.
2019-12-29 18:47:12 -05:00
Henrik Lissner
c29c1b9077
Update vestigial reference to function in comment 2019-12-17 15:28:33 -05:00
Henrik Lissner
996188250b
Minor refactors & comment revision 2019-12-06 17:16:34 -05:00
Henrik Lissner
7a7b89ded1
Init packages from init.el in noninteractive sessions
This allows users to load init.el for their batch scripts, rather than
some monstrosity involving loading core/core.el and doom-initialize.
2019-11-17 01:17:34 -05:00
Henrik Lissner
17ad5594cf
Don't force init in noninteractive sessions
This allows batch scripts to load $EMACSDIR/init.el to use Doom's API.
Howevever, it puts the onus on the user to run `doom refresh` before
trying to use it.

This also indirectly addresses #2010
2019-11-04 17:20:59 -05:00
Henrik Lissner
b00f403fda
Don't init all of core in noninteractive sessions
You can therefore load ~/.emacs.d/init.el directly to bootstrap Doom for
your own batch scripts.
2019-11-01 14:12:50 -04:00
Henrik Lissner
323e0adf45
Minor refactors & reformatting across the board 2019-10-17 01:47:58 -04:00
Henrik Lissner
ea936d90c8
Handle --restore unconditionally #1893 2019-10-14 03:00:37 -04:00
Henrik Lissner
da7aef9a4c
Move --restore handler to init.el #1893 2019-10-14 02:54:29 -04:00
Henrik Lissner
fa051797f2
Move --restore handler to autoload/sessions 2019-10-07 12:56:53 -04:00
Henrik Lissner
58567b1345
Minor optimization for init.el
The lazy-loaded version library and file-name-directory calls end up
consulting file-name-handler-alist, and can trigger the GC, so we ensure
these things happen after the other optimizations.
2019-09-03 00:59:46 -04:00
Henrik Lissner
aecf3e4e63
Remove unnecessary interactive check in init.el
init.el should never be sourced non-interactively.
2019-08-28 22:08:13 -04:00
Henrik Lissner
8ac1e1a781
Refactor doom init process
- Refactors doom-initialize
- Moves doom-initialize-modules call to init.el, to more easily isolate
  it during unit testing.
2019-08-27 00:05:12 -04:00
Henrik Lissner
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
Henrik Lissner
149b2617b0
💥 revise hook/var fns naming convention (2/2)
This is second of three big naming convention changes. In this commit,
we change the naming conventions for hook functions and variable
functions:

1. Replace the bar | to indicate a hook function with a -h suffix, e.g.

     doom|init-ui -> doom-init-ui-h
     doom|run-local-var-hooks -> doom-run-local-var-hooks-h

2. And add a -fn suffix for functions meant to be set on variables,
   e.g.

     (setq magit-display-buffer-function #'+magit-display-buffer-fn)

See ccf327f8 for the reasoning behind these changes.
2019-07-22 02:30:38 +02:00
Henrik Lissner
2525822791
Move GC optimization to init.el
And reformat core.el
2019-05-15 18:30:20 -04:00
Henrik Lissner
20596cd41f
Reformat gc optimization & gc on focus-out
Also raises the gc upper limit to 512mb
2019-05-13 19:34:44 -04:00
Henrik Lissner
c6fc47cc8d
Suppress 'void-variable: after-init-time' error #1358
Old versions of Emacs complain about after-init-time being undefined.
This happens before Doom's version guard is triggered (which emits a
more helpful message).
2019-04-24 18:16:06 -04:00
Henrik Lissner
6bd7b72281
Restore startup optimizations on after-init-hook
Fixes an issue where tramp file handlers were overwritten because they
were added to file-name-handler-alist at the end of after-init-hook.
2018-12-06 17:45:50 -05:00
Henrik Lissner
1f839b4423
Revise & update comments
Fix reference to old name of a hook function.
2018-10-01 18:53:34 -04:00
Henrik Lissner
57579b883b
Refactor doom core files 2018-09-09 09:58:20 -04:00
Henrik Lissner
937f118e6a
Reset gc-cons-threshold on idle timer
And remove reset from doom-reload-hook, as it is no longer necessary
anymore. ~/.emacs.d/init.el is no longer re-evaluated at any point.
2018-09-09 09:58:18 -04:00
Henrik Lissner
eaa10946f1
Refactor startup optimizations
+ Add doom-gc-cons-upper-limit variable
+ Don't use most-positive-fixnum, in case Emacs somehow wants to
  allocate that much!
+ Don't use startup optimizations in noninteractive sessions
+ Restore gc-cons-threshold on idle timer, instead of hook (to defer the
  possible GC pause and so deferred packages can take advantage of these
  optimizations).
2018-09-03 03:58:43 +02:00
Henrik Lissner
31bcac9a1e
Refactor gc optimizations on startup
Slightly smaller default gc-cons-threshold (and default
gc-cons-percentage), for less stuttering, and use most-postive-fixnum as
a ceiling.
2018-09-02 17:28:04 +02:00
Henrik Lissner
96f2208995
Move early-init.el to init.el (for now)
Calling tool-bar-mode, menu-bar-mode or scroll-bar-mode from
early-init.el seems to cause a 15-30% slowdown in startup time, possibly
for loading the UI libraries early.

Also, loading early-init.el eagerly from init.el causes a GC hit for
Emacs 25/26 users. It's too early to use this optimization.
2018-08-31 23:44:11 +02:00
Henrik Lissner
26896fd8bb
Announce DOOM envvar to sub-processes 2018-08-26 00:20:18 +02:00
Josh Seba
58b723bc54 Load early-init.el if early-init-file is not bound *and* true
For Emacs 27, the symbol is still bound when using -Q, which means it
won't be loaded from bin/doom.
2018-07-12 16:38:58 -07:00
Henrik Lissner
f3b42a73b3
Silence early-init.el load at startup 2018-06-19 19:18:27 +02:00
Henrik Lissner
b656e68bc3
Move startup optimization to early-init
Also load early-init from init if early-init-file isn't bound. This
improves startup a modest 3-5% for Emacs 27 users.
2018-06-16 11:38:19 +02:00
Henrik Lissner
bbda434365
Move startup optimizations into init.el
Doesn't really belong in core.el and only applies to interactive
sessions.
2018-06-15 16:20:20 +02:00
Henrik Lissner
41f4a31096
Refactor init.el (minor) 2018-05-26 22:27:52 +02:00
Henrik Lissner
33e478cf33
Revert "Seriously. Don't prioritize *.elc files in noninteractive sessions!"
This reverts commit 1d54ba4a37
2018-05-26 21:09:10 +02:00
Henrik Lissner
1d54ba4a37
Seriously. Don't prioritize *.elc files in noninteractive sessions! 2018-05-25 19:22:44 +02:00
Henrik Lissner
8746c12fae
Redesign Doom bootstrap, caching & autoload generation logic
The autoloads file has been split into doom-autoload-file and
doom-package-autoload-file. The former is for Doom's modules and
standard library; the latter is for compiling all package autoloads like
load-path and auto-mode-alist (among other things).

This reduced my startup speed from ~1s to ~0.5s
2018-05-24 21:20:02 +02:00
Henrik Lissner
f058505306
New bin/doom (eventual replacement for make)
This commit adds bin/doom, which acts as the middle man that make once
was (and will stay for a while, though the documentation will shift away
from using it). It does everything the previous make interface did, but
is faster and more flexible. bin/doom should eventually replace the
makefile.

bin/doom also makes it easier to run Doom outside of ~/.emacs.d and
~/.doom.d with, for example:

  bin/doom run -p ~/.other.doom.d/ -e ~/.other.emacs.d

bin/doom.cmd is included for Windows users, but I don't recommend using
it yet. It hasn't been tested nor have I ever written a batch script
before.

Also update init.example.el with new defaults.
2018-05-21 01:38:17 +02:00
Henrik Lissner
c7e2b38368
Move core/debug.el => ./debug.el
"debug.el" conflicts with built-in debug package
2018-04-22 17:22:14 -04:00
Henrik Lissner
f3facdf642
Add simple vanilla-emacs test ground 2018-04-21 21:05:31 -04:00
Henrik Lissner
2933142d40
💥 add default init.el
Doom is moving away from supporting direct modification of its source
files, or private modules within Doom's source tree. Instead,
customizations should be relegated to ~/.doom.d/ (or ~/.config/doom/,
doom will respect XDG conventions if it sees this directory).

As suchm a default init.el is now supplied, which will break your custom
~/.emacs.d/init.el!

The quick fix:

  mkdir ~/.doom.d
  mv ~/.emacs.d/init.el ~/.doom.d/init.el

~/.doom.d/early-init.el is also available if you need to change crucial
settings before Doom loads anything. init.el will still be loaded before
any other module is.
2018-04-03 19:50:34 -04:00
Henrik Lissner
62ce9115e5 init.el => init.example.el 2017-02-20 00:23:03 -05:00
Henrik Lissner
0470a6fa0c New init.el 2017-02-20 00:23:03 -05:00
Henrik Lissner
c7a9697259 v1.3.1 bump 2017-01-07 03:03:11 -05:00
Henrik Lissner
dbacc26e11 org-mode: major rewrite + refactor 2017-01-03 22:50:52 -05:00
Henrik Lissner
4c25eaac48 Load core-ui first 2016-10-24 02:46:24 +02:00
Henrik Lissner
d187e6c044 v1.3.0 bump 2016-10-06 20:18:32 +02:00
Henrik Lissner
f39cb13583 Init core-os sooner 2016-10-06 17:28:27 +02:00
Henrik Lissner
a658d46927 Change theme/font selection; it's .emacs.local.d's responsibility 2016-10-04 22:52:43 +02:00
Henrik Lissner
4e3e624242 v1.2.9 bump 2016-10-02 23:34:54 +02:00
Henrik Lissner
ceece44fec Use (emacs-init-time) instead of manual benchmark 2016-10-02 23:34:54 +02:00
Henrik Lissner
809d5fe681 v1.2.8 bump 2016-09-23 16:14:12 +02:00