Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/alezost/emacs-config

My ".emacs"
https://github.com/alezost/emacs-config

dotfiles emacs-configuration emacs-lisp

Last synced: about 2 months ago
JSON representation

My ".emacs"

Awesome Lists containing this project

README

        

** About

This repository contains my configuration for [[https://www.gnu.org/software/emacs/][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 [[https://orgmode.org/worg/org-contrib/babel/intro.html#literate-programming][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
[[file:init/keys.el][keys.el]]) based on [[https://github.com/jwiegley/use-package/blob/master/bind-key.el][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 [[https://github.com/alezost/imenus.el][imenus]]. I just press =s-s= (which is bound to
=al/imenus-search-elisp-dir= from [[file:utils/al-imenus.el][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 [[https://github.com/quelpa/quelpa][quelpa]]/[[https://melpa.org/][melpa]]/[[https://guix.gnu.org/][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 [[file:init/init.el][init.el]]. Actually, this
process is even more simple, as I don't do this manually — I use my
[[https://gitlab.com/alezost-config/config][config]] script to fetch and deploy all my configs including this Emacs
config.

- And I don't use [[https://github.com/jwiegley/use-package/][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:

- [[file:init][init]]: The files that are loaded on Emacs start. As described above,
[[file:init/init.el][init.el]] is the "main" init file. It defines some major
things and loads the rest files from this directory.

- [[file:utils][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:

#+BEGIN_SRC emacs-lisp
(with-eval-after-load 'eshell
;; ...
(when (require 'al-eshell nil t)
;; ...
))
#+END_SRC

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 [[https://github.com/alezost/emacs-utils][separate repository]] and had
"utl-" prefix.

- [[file:data][data]]: Just some Emacs related data (like eshell aliases or my
yasnippets) that I use.