Giter Club home page Giter Club logo

emacs-config's Introduction

About

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.

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 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 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.
  • 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 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/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.

emacs-config's People

Contributors

alezost avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.