This repository contains my configuration for GNU Emacs.
It is intended to be used only by me, not by other people. Anyway, here are the main features of my config.
- No Org-mode for emacs config because good old
.el
files are much more convenient for me. - Unusable key bindings: I use hundreds and hundreds of non-standard key bindings that are suitable for me. Besides, I use dvorak layout, so my bindings may look really weird for other people. I use my code (from keys.el) based on bind-key to manage those tons of keys.
- I prefer to split my config into multiple files instead of keeping
everything in a single one. And it is really easy to search them
using imenus. I just press
s-s
(which is bound toal/imenus-search-elisp-dir
from al-imenus.el) and jump towith-eval-after-load
clause or performisearch
oroccur
if I need to search for something. - I use an insane mix of quelpa/melpa/GNU Guix to install/upgrade Emacs packages. Do not try this at home ☺.
- My Emacs config is intended to be robust. I mean it does not require any third-party packages to be started successfully. So I can easily deploy my config on a fresh system: I just clone the repo and make ~/.emacs.d/init.el file a symlink to my init.el. Actually, this process is even more simple, as I don’t do this manually — I use my config script to fetch and deploy all my configs including this Emacs config.
- And I don’t use use-package anymore (see commit 2e49f03). I used to
do it until I realized the importance of the previous point. When you
use
use-package
in your config, it becomes a required dependency for starting Emacs, so on a “fresh” system, you need to install it at first, before you can use your config. Also someday it may be changed in a way that will break your system, and you’ll have to fix your config without using it. - My Emacs start time is always less than a second according to
M-x emacs-init-time
(actually, I have this value in myinitial-scratch-message
so I know the init time very well), because I don’trequire
packages without a reason as some people do. Instead, I usewith-eval-after-load
everywhere.
As you can see, this repository consists of the following directories:
- init: The files that are loaded on Emacs start. As described above, init.el is the “main” init file. It defines some major things and loads the rest files from this directory.
- utils: These are my various auxiliary small packages with the
additional code (for Emacs itself and for external packages) that is
not needed for start-up. All of the code there have “al/” prefix and
are placed in files that provide “al-…” features. My init files are
full of things like:
(with-eval-after-load 'eshell ;; ... (when (require 'al-eshell nil t) ;; ... ))
So these utils are loaded only if and when they are needed. Also there are many interactive commands there which are autoloaded (I use
al/update-autoloads
command to update these autoloads).In the past these utils were placed in a separate repository and had “utl-” prefix.
- data: Just some Emacs related data (like eshell aliases or my yasnippets) that I use.