Commit graph

620 commits

Author SHA1 Message Date
Henrik Lissner
d80c5e5115
bump: :doom
bbatsov/projectile@8cc2ee8937 -> bbatsov/projectile@0a15d81be9
emacs-compat/compat@e9203e1649 -> emacs-compat/compat@9a234d0d28
emacs-straight/project@5c77d78936 -> emacs-straight/project@2a3fe4c7db
gilbertw1/better-jumper@4762221378 -> gilbertw1/better-jumper@b1bf7a3c8c
radian-software/straight.el@08e197bfa6 -> radian-software/straight.el@33fb469506
rainstormstudio/nerd-icons.el@c3d641d8e1 -> rainstormstudio/nerd-icons.el@cc6c468303
2024-10-31 21:54:20 -04:00
Henrik Lissner
ffac5ea4fa
fix: doom-module-from-path: doom-{core,user}-dir detection 2024-10-31 21:54:20 -04:00
Henrik Lissner
4d83719e58
fix: doom-module-context: make error free 2024-10-31 21:54:20 -04:00
Henrik Lissner
9aa4470683
refactor: declare doom-module->context side-effect-free 2024-10-31 21:54:20 -04:00
Henrik Lissner
fca6187021
refactor: with-doom-module: context constructor 2024-10-31 21:54:20 -04:00
Henrik Lissner
db76813c26
refactor: rename doom-features to doom-system 2024-10-31 21:54:20 -04:00
Henrik Lissner
25201a40f3
refactor: rename :core module group to :doom
I'll soon introduce a new family of core modules which will house most
of what's currently in the doom-*.el libs, moving them out of core.
2024-10-31 21:54:19 -04:00
Henrik Lissner
9ae7aa1122
tweak: centralize profile loader script
Because this file serves as a global manifest for Doom's profiles, it
should be kept in a central location for any Doom instance to consult,
rather than per-instance. Plus, post-v3 Doom will only write files to
$XDG_*_HOME and $TMPDIR, therefore I'd like to avoid writing to
$EMACSDIR.

This change shouldn't affect end-users, in any case. Run 'doom sync' to
regenerate the file, which should happen when you run 'doom upgrade'
anyway.
2024-10-31 21:54:19 -04:00
Henrik Lissner
fafdb25dd8
feat(lib): introduce doom-error & error functions 2024-10-20 02:41:51 -04:00
Henrik Lissner
49f4bf6819
fix(lib): letf!: defun* indentation 2024-10-20 02:41:51 -04:00
Henrik Lissner
15904349cf
refactor!: module API
BREAKING CHANGE: This backports some architectural choices from v3.0.
This changes Doom's module API, renaming some functions and removing
others, in order to facilitate some new features, prepare to move Doom's
modules into separate repos, and make way for two, much larger breaking
commits coming in the next few days.

This commit won't break anything for users unless they're tinkering with
Doom's internals/using its `doom-module-*` API directly. I am avoiding
broader backwards incompatibilities until the 3.0 release.

What's new:

- Negated flags. (modulep! :editor evil -everywhere) will return non-nil
  if :editor evil is active without its +everywhere flag.
- `modulep!` now takes multiple flags to simplify AND checks. E.g.

    (and (modulep! +foo)
         (modulep! +bar)
         (not (modulep! +baz)))

  Can now be expressed with:

    (modulep! +foo +bar -baz)
- Adds pcase matchers for `doom-module-context` and `doom-module`
  structs, making the following destructuring binds possible:

    (pcase-dolist ((doom-module group name flags features)
                   (hash-table-values doom-modules))
      ...)

  This will be used more in v3.0.
- Adds file cookie support to module init.el and config.el files.

Here's a summary of breaking changes made in this commit:

- `doom-module-context` was changed from a vector to a struct (record).
- `doom-modules` is now a table of `doom-module` structs, rather than
  free-form plists.
- The following macros have been renamed:
  - `doom-context-with` -> `with-doom-context`
  - `doom-module-context-with` -> `with-doom-module`
- The followings functions have been replaced/removed:
  - `doom-module-context`+`doom-module-context-get` -> `doom-module`
  - `doom-module-set` -> `doom-module--put`
  - `doom-module-p` -> `doom-module-active-p`
  - `doom-module-context-key` (is now a getter with the same name)
  - `doom-module-put` (removed)
  - `doom-module--context-field` (removed)
- The signatures for these functions have changed:
  - `doom-module-get CATEGORY &optional MODULE PROP` ->
    `doom-module-get (GROUP . MODULE) &optional PROP`
  - `doom-module-locate-path CATEGORY &optional MODULE FILE` ->
    `doom-module-locate-path (GROUP . MODULE) &optional FILE`
  - `doom-module-expand-path CATEGORY MODULE &optional FILE` ->
    `doom-module-expand-path (GROUP . MODULE) &optional FILE`
- Adds the following functions
  - `doom-module-exists-p`
  - `doom-module-key`
  - `doom-module->context`
  - `doom-module<-context`
- Removes the following variables
  - `doom-module--empty-context`

This commit results in a little redundancy, which I will address in
parts 2/3 and/or v3.0.
2024-10-20 02:41:42 -04:00
Henrik Lissner
8b9168de6e
release(modules): 24.11.0-dev
Ref: 2b39e41368
2024-10-03 02:26:28 -04:00
Henrik Lissner
df65137730
docs: warn Windows users about symlinks
This isn't important *yet*, but it will be post-v3.0, so might as well
start warning people early.
2024-10-02 21:55:50 -04:00
Henrik Lissner
896204c8f7
docs: more robust nerd-icon doctor check
Fix: #7431
2024-10-02 21:53:43 -04:00
Henrik Lissner
9df3787bc7
docs: warn about segfaults on Emacs 29.4 + PGTK
Fix: #7915
2024-10-02 21:53:40 -04:00
Henrik Lissner
c88516d6bb
docs: revise Emacs version warnings 2024-10-02 05:22:46 -04:00
Henrik Lissner
ad29be39f6
refactor(lib): add provide lines 2024-10-02 05:15:58 -04:00
Henrik Lissner
fe7b84966a
bump: straight
radian-software/straight.el@88e574ae75 -> radian-software/straight.el@08e197bfa6

- Adds support for MELPA's :rename directive.

Ref: radian-software/straight.el#1167
2024-10-02 04:49:19 -04:00
Henrik Lissner
8c7711920e
fix(lib): doom/{reload,upgrade} on Windows
On Windows, don't execute the bash script.

Fix: #8098
2024-10-02 04:12:59 -04:00
Henrik Lissner
c8a5e6ec1c
fix: map!: allow :map values to be interpolated
With the comma syntax. E.g.

  (let ((maps '(some-mode-map another-mode-map)))
    (map! :map ,maps))

This technique was used in the recent rewrite of the Racket
module (1baebda), but I forgot to include this change, so Racket users
have probably noticed some missing keybinds! This fixes that too.

Amend: 1baebdafb3
Ref: #7543
2024-09-17 17:30:57 -04:00
Henrik Lissner
037b018cdd
feat: add .doommodule files
These optional dotfiles indicate the root of a module or module
group (:lang), and will later contain module metadata. They will also
serve as an alternative to packages.el and doctor.el, and will aide the
parts of the v3.0 module API concerned with resolving the current module
from a path (`doom-module-from-path`), which currently rely too heavily
on parsing path strings.

For now, however, they're simply placeholders.
2024-09-14 20:47:39 -04:00
Henrik Lissner
66a2972ebf
fix(lib): doom/set-indent-width on Emacs >=30
A built-in `editorconfig` package was added in Emacs 30, with a somewhat
different API from the other package of the same name.

Fix: #8072
2024-09-14 15:22:09 -04:00
Henrik Lissner
fa6893eeea
tweak(lib): doom-debug-variables: add doom-log-level 2024-09-13 23:07:14 -04:00
Henrik Lissner
41987bb00f
fix(cli): persist correct doom-log-level to after-scripts 2024-09-13 23:07:13 -04:00
Henrik Lissner
0e5935f0f7
fix(cli): "Argument list too long" error from after-scripts
Because a persisted envvar was larger than MAX_ARG_STRLEN (which is
typically ~2kb).
2024-09-13 23:07:13 -04:00
Henrik Lissner
14189be77c
fix: out-of-bounds error if this-single-command-raw-keys is empty
It seems there's an edge case in EXWM where input events may occur
without keys to cause them (#8064), so these two keybind fixes need to
be ready to receive an empty vector from `this-single-command-raw-keys`.

Fix: #8064
2024-09-13 23:07:13 -04:00
Henrik Lissner
9359a81e81
fix: gui frames fail to open from emacsclient
This was a tricky regression to track down. 9753bfb tries to fix an
issue where the `default` face's :foreground changes to `#000000` in any
new frames created after the initial one (by calling `make-frame`),
because those frames' `background-color` and `foreground-color`
parameters default to "#000000" (possibly a bug with `disable-theme` too
eagerly defaulting them to black).

240493a replaces that with new, seemingly cleaner approach: setting
`frame-inherited-parameters`, which instructs `make-frame` to copy those
parameters from the last open frame, however, those parameters in the
initial daemon frame will be set to "unspecified-bg" or
"unspecified-fg" (see the docstring for `face-{back,fore}ground`), which
are invalid color strings. `make-frame` crashes tries to create a frame
with those color values, causing #8059.

Fix: #8059
Amend: 240493ae92
Amend: 9753bfb775
2024-09-12 06:06:25 -04:00
Henrik Lissner
288b6dc962
fix(cli): doom run: symlinks to XDG dirs beyond $HOME
The targets for $XDG_*_HOME symlinks weren't created correctly if they
were set to an absolute path outside of the user's $HOME.

Fix: #8062
2024-09-11 20:08:16 -04:00
Henrik Lissner
9bd9d55354
fix(lib): define doom-context-error 2024-09-11 19:46:15 -04:00
Henrik Lissner
3256fc7fca
fix: trigger defcustom setters in files opened from command-line 2024-09-11 19:46:15 -04:00
Henrik Lissner
19d68887b1
refactor: remove redundant auto-mode-alist entries
I moved these into lisp/init.el in e02d3c7, but didn't remove the old
forms (though they weren't doing anything, anyway).

Amend: e02d3c79a9
2024-09-11 19:46:15 -04:00
Henrik Lissner
70bfb9f0e9
docs: letf!: add demo & rewrite docstring 2024-09-11 19:46:15 -04:00
Henrik Lissner
a974210605
refactor(lib): letf!: use define-advice & split defun/defun* 2024-09-11 19:46:15 -04:00
Henrik Lissner
4ca5819532
fix(lib): file!: lower current-load-list priority
Also changes it to consider base buffer's filename (for `eval`
contexts).
2024-09-11 19:46:15 -04:00
Henrik Lissner
f8f2b28580
feat: add doom-log-level
Gives doom-log that capability of indicating log levels for its
messages, so that I can later work of reducing excessive logging in
`doom-debug-mode`.
2024-09-11 19:46:15 -04:00
Henrik Lissner
771fccc52b
nit: minor reformatting & revision
Also corrects the version string of obsolete variable `+mu4e-backend`.
2024-09-11 19:46:14 -04:00
Henrik Lissner
6d7a39c482
tweak: load site-lisp verbosely in debug mode 2024-09-11 19:46:14 -04:00
Henrik Lissner
546e56f1fa
fix: suppress visual startup optimizations in debug mode
Also interferes with doom/sandbox's launch targets.
2024-09-11 19:46:14 -04:00
Henrik Lissner
a8515034de
refactor: rename childframe predicate function
- The name reflected the opposite of what it detected.
- It should be treated as an internal (not public) function.
2024-09-11 19:46:14 -04:00
Henrik Lissner
240493ae92
fix: face-* calls crashing new emacsclient frames
Those `face-*` calls sometimes returned nil, causing new frames spawned
from emacsclient to quietly crash sometimes. By instead relying on
`frame-inherited-parameters` we achieve the same but more stable result.

Amend: 9753bfb775
2024-09-11 19:46:14 -04:00
Henrik Lissner
5a4aa916bc
fix: adding newly created project to known-projects
Fix: #7413
2024-09-11 03:50:57 -04:00
Henrik Lissner
a022e55c08
fix(lib): doom/sandbox: vanilla-doom+ target
Between this and 60083a2, doom/sandbox is now fully functional (this is
a stopgap fix until v3.0).

Ref: 60083a2626
Fix: #5845
Fix: #6505
Fix: #7486
2024-09-10 17:56:35 -04:00
Henrik Lissner
60083a2626
fix(lib): doom/sandbox
Fixes all the launch paths *except* for `vanilla-doom+` (Doom core +
modules - private config), which needs some work from v3 to properly
fix.
2024-09-10 17:26:54 -04:00
Henrik Lissner
86b7bef512
fix: type error if default returns nil :foreground/:background
Ref: #8059
2024-09-10 17:20:16 -04:00
Henrik Lissner
e02d3c79a9
feat: backport safe-local-variable-directories from Emacs 30 2024-09-10 04:18:39 -04:00
Henrik Lissner
632a091abb
refactor: remove unneeded optimizations
Neither of these have had enough/any impact on runtime performance to
warrant keeping them.
2024-09-09 00:35:57 -04:00
Henrik Lissner
871efdce08
refactor: windows: move doom dirs to %LOCALAPPDATA%
More appropriate location for these files on Windows than %APPDATA%.
2024-09-07 19:04:37 -04:00
Henrik Lissner
6025e141aa
perf(lib): minor optimizations
To reduce allocations in hot loops.
2024-09-07 19:04:37 -04:00
Henrik Lissner
de1ffbca11
feat: distinguish [C-m] key from RET
Now, uses can rebind ctrl+m by targeting [C-m] (or "<C-m>", same thing),
and it won't rebind RET. This will only work in GUI Emacs, however, and
there is no kkp support for this one.

Ref: 96d7e50f3e
2024-09-07 14:50:32 -04:00
Henrik Lissner
4fc11b696e
tweak: projectile: don't follow symlinks by default
Experienced users (the type to use symlinks in their projects) can add
-L back to `projectile-git-fd-args`, otherwise, its poorer UX for
beginners if Projectile indexes symlinked build artifacts (like 'result'
symlinks by Nix); i.e. things they didn't symlink themselves.

Fix: #7781
2024-09-07 14:20:29 -04:00