Commit graph

18077 commits

Author SHA1 Message Date
Henrik Lissner
a29041735c
tweak(cli): read $DOOMPATH like $EMACSLOADPATH
$EMACSLOADPATH is read to pre-fill load-path. Empty entries therein are
substituted with the default value of load-path. I am mirroring this
behavior with the $DOOMPATH variable.
2022-09-25 17:52:07 +02:00
Henrik Lissner
1a1e7b808b
fix(cli): doom env: deny DOOMPROFILE more precisely
The former regexp was too permissive. Not that it was an issue, but it's
one thing less to worry about.
2022-09-25 17:52:05 +02:00
Henrik Lissner
9c72b0e81f
nit: early-init: update commentary 2022-09-25 13:28:29 +02:00
Henrik Lissner
fa345fcc62
refactor: early-init: distinguish failure/fallthrough states
If lisp/doom.el does not exist, then we assume the user isn't loading a
Doom config and fall through to $EMACSDIR/early-init.el, if it exists.
However, `load`'s NOERROR argument suppresses more than just
file-missing errors -- it suppress permissions errors and other
legitimate IO errors that I want to treat as error states, not
fall-through states. This commit fixes that.

* early-init.el (gc-cons-threshold): Set a reasonable more default for
  gc-cons-threshold for non-Doom configs (16mb), instead of
  most-positive-fixnum, which would eventually cause
  freezing/stuttering for non-Doom profiles.
2022-09-25 13:25:15 +02:00
Henrik Lissner
e61af32307
fix: early-init: wrong-type-argument stringp nil
early-init-file is nil in most cases, at this point, so use
user-init-file instead.
2022-09-25 13:08:11 +02:00
Henrik Lissner
1cddb5c369
fix(cli): doom doctor: void-variable key error
A regression introduced in 4efaf68, cause by an incomplete refactoring
of the loop, where not all instances of `key` were changed into `group`
and `name`.

Amend: 4efaf6837b
Fix: #6840
2022-09-25 11:43:00 +02:00
Henrik Lissner
8bf308f9b1
fix: failure to recognize X switches in PGTK builds
This is a regression introduced in 1c4217a.

Doom unsets command-line-x-option-alist when it reasonably suspects it's
not running in an X environment. The heuristic for that is checking when
`initial-window-system` is set to `x`, but as it turns out, PGTK builds
of Emacs set this to `pgtk`, so PGTK users were deprived of Emacs' X
switches, like --geometry, --foreground, --font, etc (they'd throw an
"Unknown option" error at startup). This was fixed.

However, this heuristic isn't perfect. Not all PGTK users are on X (I'd
hazard to guess most of them aren't). So a more reliable check is
needed (and it's too early in the startup process for us to call
display-graphic-p on any frame). The `(not IS-LINUX)` or `(or IS-MAC
IS-WINDOWS)` I had previously used (before 1c4217a) wasn't enough
either, because users can (and do) install X on these
systems (especially where WSL is involved). Still, until I've found a
better one, this is an acceptable workaround.

Amend: 1c4217aa27
2022-09-25 11:35:48 +02:00
Henrik Lissner
731764ae71
fix(cli): doom install: wrong-number-of-args error
This corrects a typo that snuck into 6c76b98.

Amend: 6c76b98dbb
2022-09-24 23:09:17 +02:00
Henrik Lissner
594d70292d
refactor: remove use-package from doom-keybinds.el
One step toward a use-package-less future.

Ref: dda848e089
2022-09-24 22:10:02 +02:00
Henrik Lissner
ffad2bc49e
perf: move doom-init-ui-h to window-setup-hook
This has little effect on startup time now, but seems to buy 100-200ms
with some 3.0 optimizations that will come soon.
2022-09-24 22:10:02 +02:00
Henrik Lissner
5f37069402
fix(cli): excessive "cannot find X" logs
It doesn't really matter if these files can't be found, and it only
services to fill up the logs with noise.
2022-09-24 22:10:02 +02:00
Henrik Lissner
c20ba77ff7
tweak: employ startup optimizations even in debug mode
It's kind of a pain to have different behavior when you're debugging.
Some errors may not present without them, so best to remain predictable
and permit these optimizations even when debug mode is on.
2022-09-24 22:10:02 +02:00
Henrik Lissner
29dfce32bd
fix(doom-dashboard): hide benchmark until available
The dashboard has a chance to display before doom-init-time is
calculated. To prevent the resulting type error, hide it until it is
ready.
2022-09-24 22:10:02 +02:00
Henrik Lissner
8c442d84b9
perf: custom-dont-initialize = t
defcustom does some initialization work to accommodate the possibility
that the user has set the variable before it was defined.  This work is
unneeded so early at startup, so I disable it (temporarily).

In the future, Doom will use defcustom more, as it's a helpful
indication to readers what variables I intended for configuration (and
helps with discovery of options through `M-x doom/help-custom-variable`
or `M-x customize`). As that transition occurs, the benefit of this
optimization will begin to show, but for now its effect on startup time
is negligible.

* lisp/doom.el (warning-suppress-types): set this immediately. Since its
  default value is nil and this happens so early at startup, we don't
  have to be considerate of defaults. Plus, this custom-dont-initialize
  optimization can cause breakage if a warning is thrown *before* before
  this setting is changed.
2022-09-24 22:10:02 +02:00
Henrik Lissner
1c32e317cc
tweak(lib): log calling hook from doom-run-hook
Makes it easier to trace hooks through logs.
2022-09-24 22:10:02 +02:00
Henrik Lissner
4efaf6837b
refactor: introduce doom-module-context
Where f9201eb introduced a general context system, this one introduces
one for modules, to simplify our let-bind game when interacting with
modules, and to more efficiently expose module state to modulep! (which
gets called at runtime a great deal, so its performance is important).

* lisp/doom-lib.el (doom-log): simplify macro and introduce
  doom-inhibit-log variable.
* lisp/doom-modules.el (modulep!): fix reported file path if modulep!
  fails to find the local module.
* lisp/lib/debug.el (doom-debug-variables): disable doom-inhibit-log
  when debug mode is on.

Ref: f9201eb218
2022-09-24 22:09:46 +02:00
Henrik Lissner
5d2313155c
fix: overriding doom-version's plist
setplist will overwrite a symbol's previous properties (like
documentation).
2022-09-24 22:09:39 +02:00
Henrik Lissner
71b2b09f5c
fix(cli): doom-cli-load: replace load! w/ doom-load
load! effectively loads (file-name-concat (dir!) PATH) which, in this
case, is concatenating two absolute file paths. Emacs does the right
thing and loads PATH, but I don't want to rely on this good fortune as
it could be broken in a future update.
2022-09-24 22:09:39 +02:00
Henrik Lissner
f9201eb218
refactor: introduce doom-context
Introduces a system to announce what execution contexts are active, so I
can react appropriately, emit more helpful logs/warnings in the case of
issues, and throw more meaningful errors.

* bin/doom: load module CLIs in the 'modules' context.
* lisp/cli/doctor.el: load package files in 'packages' context.
* lisp/doom-cli.el:
  - (doom-before-init-hook, doom-after-init-hook): trigger hooks at the
    correct time. This may increase startup load time, as the benchmark
    now times more of the startup process.
  - (doom-cli-execute, doom-cli-context-execute,
    doom-cli-context-restore, doom-cli-context-parse,
    doom-cli--output-benchmark-h, doom-cli-call, doom-cli--restart,
    doom-cli-load, run!): remove redundant context prefix in debug logs,
    it's now redundant with doom-context, which doom-log now prefixes
    them with.
* lisp/doom-lib.el (doom-log): prefix doom-context to doom-log output,
  unless it starts with :.
* lisp/doom-packages.el (package!, doom-packages--read): throw error if
  not used in a packages.el file or in the context of our package
  manager.
* lisp/doom-profiles.el (doom-profile--generate-init-vars,
  doom-profile--generate-load-modules): use modules doom-context instead
  of doom-init-time to detect startup.
* lisp/doom-start.el (doom-load-packages-incrementally-h): move function
  closer to end of doom-after-init-hook.
* lisp/doom.el:
  - (doom-before-init-hook, doom--set-initial-values-h,
    doom--begin-init-h): rename doom--set-initial-values-h to
    doom--begin-init-h and ensure it runs as late in
    doom-before-init-hook as possible, as that is the point where Doom's
    "initialization" formally begins.
  - (doom-after-init-hook): don't trigger at the end of command-line-1
    in non-interactive sessions. This will be triggered manually in
    doom-cli.el's run!.
* lisp/lib/config.el (doom/reload, doom/reload-autoloads,
  doom/reload-env): use 'reload' context for reload commands.
* modules/lang/emacs-lisp/autoload.el (+emacs-lisp-eval): use 'eval'
  context.
* modules/lang/org/config.el: remove doom-reloading-p; check for
  'reload' doom context instead.
2022-09-24 22:09:05 +02:00
Henrik Lissner
1c4217aa27
refactor: minor refactors & commentary revision
* lisp/doom-cli.el:
  - reference backport source commit.
  - doom-cli--restart: a type check is all we need here. This is a
    programmer error, not a user error.
* lisp/doom-editor.el (recentf): mention recentf-show-abbreviated (added in
  emacs-mirror/emacs@32906819ad)
* lisp/doom-keybinds.el (doom-init-leader-keys-h): move to
  doom-after-init-hook, in case the user customizes leader variables in
  a previous hook (like emacs-startup-hook or after-init-hook).
* lisp/doom-start.el: use eval-when! to compile out the section on
  non-macOS systems (when Doom gets around to compiling its core files,
  later).
* modules/config/literate/autoload.el (+literate-config-file): use
  file-name-concat instead of string concat. This relaxes the
  requirement that doom-user-dir end in a /; a requirement I intend to
  fully phase out.
* modules/lang/emacs-lisp/autoload.el (+emacs-lisp-non-package): remove
  empty map! macro in flycheck-emacs-lisp-check-form. The macro already
  no-ops at compile-time/in noninteractive sessions since b480ed51a3.
* modules/ui/hl-todo/config.el (hl-todo-keyword-faces): revise
  commentary for default hl-todo keywords.

Ref: emacs-mirror/emacs@32906819ad
Ref: b480ed51a3
2022-09-24 20:31:34 +02:00
Henrik Lissner
f0431b6fac
fix(lib): setq!: use set-default-toplevel-value
This is more correct, as we never want to use this to set buffer-local
variables.
2022-09-24 20:31:34 +02:00
Henrik Lissner
eda2e30721
fix(lib): doom-load: use doom-profile-error
...for errors emitted from the profile directory (basically just the
init file).
2022-09-24 20:31:34 +02:00
Henrik Lissner
a4b58311da
refactor(lib): simplify fn!, add-transient-hook!
* lisp/doom-lib.el:
  - (fn!): unroll the loop into a single, fast setplist that
    doesn't require a cl-lib macro (autoloading which seems to throw an
    error on flatpak/snap builds; still investigating that one).
  - (add-transient-hook!): Removes a redundant let-bind.  `sym` is
    already lexically bound outside the function. This will break
    anywhere lexical-binding is nil though. Not sure if I should cater
    to that scenario...
2022-09-24 20:31:34 +02:00
Henrik Lissner
6c76b98dbb
refactor: use doom-module-*-file variables; add two
- Adds doom-module-packages-file and doom-module-metadata-file.
- Uses them and the other doom-module-*-file variables where they were
  previously hardcoded.
- Add .el extension to doom-module-{init,config}-file; it is now the
  consumer's responsibility to strip/change/keep the extension as they
  see fit.
2022-09-24 20:31:34 +02:00
Henrik Lissner
d33478dc79
feat(lib): backport file-name-with-extension 2022-09-24 18:46:22 +02:00
Henrik Lissner
2fc3442508
nit: revise init hook docstrings & load order commentary 2022-09-24 18:46:21 +02:00
Henrik Lissner
a3a275624e
refactor: record doom-init-time in doom-after-init-hook 2022-09-24 18:46:21 +02:00
Henrik Lissner
dda848e089
module: add :config use-package
I intend to phase out the internal usage of use-package in Doom's core
and modules. The macro is too complex and magical for our needs.

That said, until we've fully removed it, this :config use-package is
hardcoded to be enabled-by-default, until use-package has been
refactored out of core and modules. It'd be wise not to add it to your
doom! blocks yet.
2022-09-24 18:46:21 +02:00
Henrik Lissner
e61441af52
refactor: use defcustom to define doom-first-*-hook
This will soon be done by convention for variables Doom expects users to
customize.
2022-09-24 18:46:21 +02:00
Henrik Lissner
5a5195b84d
fix: add :depth field to modules
This introduces a depth field for modules so that they may dictate their
load order explicitly, it also treats depths <= -100 or >= 100 as
special depths, which will be loaded early, before their respective
doom-{before,after}-module-{init,config}-hook. This permits psuedo
modules like :core and :user modules to be treated as normal modules
without too many special cases.

This also fixes a module load order issue on Emacs 29 (#6813), caused by
emacs-mirror/emacs@4311bd0bd7, which changed the return value order of
hash-table-{keys,values} causing modules to be loaded in reverse order;
resulting in the loss of evil keybinds, among other things.

Other notable changes:
- Changes the data structure for module data caches from a list to a
  vector. Uses less memory and permits faster lookups. Also adds two
  depth fields to the front of it.
- Changes the signature of doom-module-list and doom-package-list.
- Renames doom--read-packages -> doom-packages--read for consistency
  with naming convention.
- Add doom-module-depth function.
- Adds a temporary doom-core-dir/init.el file, which is responsible for
  loading doom-*.el.

Fix: #6813
Ref: emacs-mirror/emacs@4311bd0bd7
2022-09-24 18:46:21 +02:00
Henrik Lissner
772f9f26d9
fix: prevent error on tagless doom-version
This would throw an error when we eventually drop the -pre tag in
doom-version.
2022-09-24 11:52:38 +02:00
Henrik Lissner
19f9e1fdd7
fix: doom-module-locate-path: try load-suffixes 2022-09-24 11:52:34 +02:00
Henrik Lissner
fef7c27bbc
feat: add doom-module-locate-paths function
This is a common idiom within Doom's internals, to create a list
of (existing) module files in any desired order.
2022-09-23 18:03:31 +02:00
Antonio Ruiz
e9ef904eee docs(calendar): say calfw instead of the calendar 2022-09-21 01:05:34 +02:00
Antonio Ruiz
fc2682e4ff fix(notmuch): use new workspace name in +notmuch/quit
This change was meant to be included in the first commit where I changed
the default notmuch workspace name.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
6fc1aa9c62 feat(rss): only call elfeed if necessary
If our *rss* workspace is already populated by elfeed buffers, there is
no reason to re-initialize elfeed.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
3f9e62dab7 feat(notmuch): use a different workspace name
The workspace name *notmuch* is more consistent with Doom's other app
workspace names like *mu4e* and *rss*.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
b2154b5f9b fix(irc): do not emit an error when calling =irc
When the *IRC* workspace is already populated by circe buffers, there is
no reason to emit an error, just switch to the *IRC* workspace and do
nothing.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
31a6fa77d0 feat(calendar): only initialize calfw if necessary
If the *calendar* workspace is already populated with calfw buffers,
there is no reason to re-initialize calfw.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
9d14d093c0 feat(calendar): use a different workspace name
The workspace name *calendar* is more consistent with other app
workspaces like *mu4e*, *notmuch*, *rss*, and *IRC*.
2022-09-21 01:05:34 +02:00
Antonio Ruiz
32baf538ee feat(mu4e): only call mu4e if necessary
If we are already reading emails in Mu4e or composing a message, there
is no reason to go back to the main window.
2022-09-21 01:05:34 +02:00
TEC
f6bddc8fe2 tweak(mu4e): autoload +mu4e-lock-available
+mu4e-lock-available seems like a potential entry-point to the mu-lock
functionality, e.g. on startup check if another Emacs process has mu4e
active, and so it might as well be turned into an autoload.
2022-09-21 00:58:30 +02:00
TEC
4d9ea6853b tweak(mu4e): don't reverse dired marks to attach
Originally this was added to have the order of attached files match the
order of mark selection. Recent usage indicates that this was either
misguided or the behaviour has changed, as this now achieves the opposite
effect --- with nreverse files are attached in reverse order. Removing
nreverse provides the expected behaviour.
2022-09-21 00:56:33 +02:00
TEC
2662d68ae8 fix(mu4e): only widen the mu4e headers frame
It's a bit silly to just unconditionally widen the current frame when
you could have the mu4e headers view in another frame entirely. Instead
we can look for the mu4e headers buffer, and only widen frames where it
is the active buffer.
2022-09-21 00:56:20 +02:00
Samuel Tschiedel
9b73ce3ad8 fix(magit): remap magit-browse-thing to forge-browse-*
When using evil +everywhere, we disable the default forge bindings.
We must then explicitly remap magit-browse-thing, as it's just a
placeholder command (bound in multiple places).
2022-09-21 00:54:09 +02:00
TEC
e2608cbdd5 tweak(literate): clear the tangle output buffer
While this is a hidden buffer, it's raised when an error occurs. In such
situations, it can be a little confusing to see the result of every
tangle to date instead of just the last tangle. It's easy enough to
simple clear the buffer at the start of the tangle process.
2022-09-21 00:53:30 +02:00
Henrik Lissner
028de9483f
fix: load compiled module files, if available
Not that they'll be compiled anytime soon, but just in case.
2022-09-20 17:32:00 +02:00
Henrik Lissner
31be70b565
tweak(cli): add --debug-init if $DEBUG=1
For more debug output, and sooner.
2022-09-20 13:34:58 +02:00
Henrik Lissner
b7b66e6202
fix: $DOOMDIR loading twice and too early
An unintended change snuck into 2c14eff. The :core and :user virtual
modules are no longer stripped from the module list before iterating
through (and loading) them. This meant that Doom would load these two
like regular modules (and first, since these two are always at the start
of the list).

This is harmless for :core, because it has no init.el or config.el, but
:user does! This means $DOOMDIR/{init,config}.el would be loaded
twice (once before all other modules and again afterwards), causing load
order issues (like #6818).

Fix: #6818
Amend: 2c14eff7f1
2022-09-20 13:03:47 +02:00
Henrik Lissner
c5de95f722
perf: defer init for frame's buffer-predicate
Ensures that it doesn't pull in the buffer library so early in the
startup process, or gets called prematurely.
2022-09-20 02:29:14 +02:00