Skip to content

alezost/emacs-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

About

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.

Features

  • 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 to al/imenus-search-elisp-dir from al-imenus.el) and jump to with-eval-after-load clause or perform isearch or occur 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 my initial-scratch-message so I know the init time very well), because I don’t require packages without a reason as some people do. Instead, I use with-eval-after-load everywhere.

Files

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.