This project is my personal literate Emacs[fn:1] configuration.
If you’re a complete beginner, you will find more user-friendly and less tailor-made configs out there.
Feel free to consider it a jumping-off-point for your own custom config. Just know that nothing in this config should be considered good practice, it’s mostly just how I (think I) like things to be.
If you’re interested in trying out Emacs using my config, here are the necessary steps:
- install Emacs[fn:2] if you haven’t
- =git clone –recurse-submodules=[fn:3] this repository
make
which will tangle the libraries, setup[fn:4] youruser-init-file
and install all[fn:5] packages
Use wal-customize-group
or add your customization manually to your custom-file
.
This config is daemon-ready, i.e. if you start Emacs with the --daemon
flag, the config will make sure that any customization that requires a frame will only be loaded once a frame was created.
You can install either a systemd
service[fn:6] or just execute emacs --daemon
in a terminal (or your login shell’s configuration).
In any case, an Emacs daemon will start. To connect, you can use, for example, emacsclient -cn
.
Custom functions and variables use the wal-
scope[fn:7] and belong to their respective library’s package. Many libraries define a group for customization purposes.
With a few exceptions, each library has a Header and a Footer that contains declarations for its package, as well as either a Packages section or several sections grouping packages.
The configuration is subdivided into several libraries/packages. The order of evaluation of the libraries is determined by wal-load--core-packages
and customizabale wal-additional-packages
which are defined in the prelude package.
The library consists of:
- general settings
- useful functions, commands and macros
- setting up packages
- key bindings
- a bridge to my own packages
- configuring Emacs, Dired and Org
- visuals
- completion
- programming languages, lsp and version control
- DevOps
- editing, finding and fixing things
- movement
- project and window management
- terminal
- the Internet
- editing this config
[fn:1] I’m on Emacs 30. There’s no guarantee anything below works although some effort is made that it may with a few tweaks (or by using compat
. VC packages require 29 since they depend on package-vc-install
. These are mainly my own packages harpoon
, partial-recall
, junk
, bydi
and whale-line
which you can also install following the instructions there.
[fn:2] If you’re feeling adventurous, build from source.
[fn:3] This repo uses my Emacs package helper repo dinghy
for many goals of its makefile.
[fn:4] If your user-init-file
is not ~/.emacs.d/init.el
you need to run make EMACS_INIT_FILE=<path_to_your_init> install
.
You might want to run make ensure-init
after version updates to make sure you still have a working bootstrap snippet.
[fn:5] Packages that belong to an expansion pack (mainly language-specific packages) or its extras need to be installed manually by calling wal-install-expansion-pack
.
You can also force installation of all base packages manually by running Emacs with custom flag --ensure
.
[fn:6] Also confer the manual.
[fn:7] There are some exceptions, like the general
definers for leader keys.