6.6 KiB
My Emacs Configuration
- Introduction
- Core Configuration
- Org Mode Configuration
- Terminal Configuration
- Programming Configuration
- Miscellanea
- Summary
Introduction
I’ve crafted my Emacs configuration, I cheekily call hamacs, in a literate programming model, heavily inspired by my recent journey into Henrik Lissner's Doom Emacs and Spacemacs. While I used both extensively, I decided I would roll my own as Emacs people like myself, tend to be control freaks (at least a little bit).
The advantage to rolling yer own is I tend to use what I add, leading to less bloat. In reality, this is more fun.
Using literate programming for my Emacs configuration gives me an easy way to share my code. So yes, feel free to steal whatever you find interesting, as sharing makes our community great. Notice that functions and features I have written begin with ha-
, but everything else is either stock Emacs or a package I download using straight (see bootstrap for how for details) and configured with use-package (see either this introduction or this wiki page for those details)… meaning most blocks of code should work on its own.
My configuration is broken into chapters around particular subjects, applications or programming languages. This allows me to selectively load individual chapters. For instance, currently, I’m not doing much with Ruby, so I just remove it from the end of my bootstrap. I also going load my UI configuration if I am using the Terminal (doesn’t happen much, actually). So jump to the chapters of interest.
Hit me up with questions on Mastodon: @howard@emacs.ch.
If you want to try the entire process, after installing Emacs, clone this repo with:
git clone https://github.com/howardabrams/hamacs
And then, run:
./initialize
To create ~/.emacs.d/init.el which starts the process loading the files.
Core Configuration
- Bootstrap
- configures
straight
and loads basic libraries the rest of the code depends on. It then loads the following files in order. - Configuration
- contains most of my configuration, setting up my sequence key menus, evil, etc.
- Evilness
- configuration for using VI, er,
vim
keybindings in Emacs. - GUI Display
- sets up the visual aspects of an Emacs GUI, including themes and fonts.
- Dashboard
- sets up initial window layout of the
main
project with a dashboard. - Data
- functions for dealing with a buffer-full of data.
Org Mode Configuration
- Initial Org Configuration
- configures the basics for org-mode formatted files. Specific features come from their own files.
- Word Processing
- attempts to make Org files visually look like a word processor, including turning off the colors for headers, and instead increasing their size.
- Clipboard
- automatically converting HTML from a clipboard into Org-formatted content.
- Journaling
- for writing journal entries and tasks.
- Publishing
- code for publishing my website, www.howardism.org.
- Sprint Notes
- functions for working with the my Org-focused sprint file.
- Agendas
- attempts to "supe-up" my task list.
- Capturing Notes
- my engineering notebook.
Terminal Configuration
If you know me, I appreciate the light-weight nature of Eshell (see this talk at EmacsConf 2022), but Eshell doesn’t work that well with some of my remote work.
- Eshell
- customization and enhancement to the Emacs shell.
- Remote Access
- my interface to systems using SSH and Vterm.
Programming Configuration
While I’m a language polyglot, I usually focus on one or two languages at a time, and my configuration may acquire a wee bit of cruft. That said, I’m attempting to convert over to LSP (with varying degrees of success).
- General Programming
- configuration for all programming languages, or at least, the simple ones.
- Emacs Lisp
- additions to Emacs Lisp programming.
- Python
- configuration for working with Python and LSP.
- Scheme
- configuration for Guile and Racket.
- Clojure
- configuration for Clojure.
- Ruby
- configuration for Ruby.
Miscellanea
- Applications
- optional applications, like Twitter and Telegram.
- reading email using
notmuch
in a Hey fashion. - RSS Reader
- configuration of
elfeed
as well as my RSS feeds. - IRC
- connection to IRC servers using rcirc and bitlbee.
- Passwords
- code for generating passwords.
Summary
The elisp directory contains non-literate code.
Other functions and files come from essays written on my blog. To help with this synchronization, I created a support/final-initialize.el file, but that shouldn’t be too interesting to others.
You may ask yourself, Howard, why are you still using Github. The only reason is that Org files automatically get rendered as HTML with the code block correctly syntax highlighted. This may change. 🤓