/emacs.d

My personal Emacs settings

Primary LanguageEmacs Lisp

emacs.d

My personal Emacs settings with inspiration from:

Considerations

This emacs.d makes Emacs into a highly productive editor for me. I try to keep the following in mind when maintaining it:

  • Let Emacs be Emacs. Don’t attempt to transform it into another editor.
  • Keep the configuration as small as possible.
  • Improve upon unusable default settings.
  • Build the configuration from scratch. Avoid Emacs distributions such as syl20bnr/spacemacs, bbatsov/prelude or hlissner/doom-emacs. This is not a comment on the quality or purpose of such distributions, they’re just not for me.
  • Keep the number of external packages to a minimum.
    • Eschew heavy-weight packages that fundamentally change how Emacs works.
    • Prefer packages that compose well with the rest of Emacs.
  • Try to unify keybindings across similar modes (e.g. o and C-o in dired and grep). Keybindings can be notoriously inconsistent across modes.
  • Be vigilant in throwing away keybindings, packages or other configuration that remains unused for long periods.
  • Don’t complicate org-mode too much. I use org to manage much of my life and a minimum configuration exists to accomplish this.
    • Avoid additional org packages as org itself is more than big enough.
  • Make code navigation quick and easy.
    • Most non-trivial code repositories contain a high number of source files and navigating them efficiently is key to my productivity.
  • Limit responsibilities. I.e. I have tried and failed to use Emacs for email and RSS.

Language Server Protocol

The Makefile contains targets for installing servers that implement the Language Server Protocol (LSP).

Once installed, eglot should detect and use the servers automatically.

This configuration enables formatting on save by default. To disable this behavior, add the relevant mode(s) to mpolden/inhibit-format-before-save. Example:

(setq mpolden/inhibit-format-before-save '(foo-mode))

gopls

To enable staticcheck when using the gopls language server, create a .dir-locals.el file in project directory containing:

((go-mode
  . ((eglot-workspace-configuration
      . ((:gopls . ((staticcheck . t))))))))

Version compatibility

Lowest supported Emacs version is the one found in Debian stable. No guarantees for older versions.

Setup

Clone the repository:

git clone https://github.com/mpolden/emacs.d

Install symlink in ~/.emacs.d:

This will overwrite any existing file or symlink!

$ cd emacs.d
$ make install

Start Emacs!

Local customizations

Local customizations can be added to lisp/init-local.el. This file is in .gitignore.

Setting the variable mpolden/inhibited-features (e.g. in lisp/init-local.el) allows inhibiting loading of one or more features, i.e. files in lisp. Example:

(setq mpolden/inhibited-features '(init-foo init-bar))