Ask fsbot
on freenode about hell, and it will answer you that hell is
other people's .emacs
. This repo is my own hell and I like it very
much.
It is not some elisp code that is pretended to be used by other people (like prelude, emacs-starter-kit or even dopemacs). It is my own Emacs config and it is intended to be used only by me.
Anyway here is what makes this hell so warm and comfortable for me.
- 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 several files than to keep 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. - Currently I use quelpa to install/upgrade Emacs packages. I just run
al/quelpa
command (with prefix if needed) to install or upgrade some package (or all packages). However I’m going to switch to GNU Guix for managing the Emacs packages I use (this is a work in progress: some of the packages are already handled by Guix, but most are still installed using Emacs package system and quelpa). - 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/init.el is the “main” init file. It defines some major things and then 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.