Skip to content

A maximalist Emacs config tracking the latest trends

License

Notifications You must be signed in to change notification settings

enzuru/.emacs.d

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

enzu.ru .emacs.d

exwm on Slackware

This .emacs.d represents my libre attempt to build and document a maximalist Emacs configuration utilizing most (but not all) of the latest trends in the Emacs community, tailored of course to my personal taste and needs. This involves around 200 different packages.

This means spicy choices like:

  • eglot over lsp-mode
  • vert&co over helm and ivy
  • corfu over company
  • elpaca over package.el and straight.el
  • flymake over flycheck (what a comeback!)
  • meow over evil
  • lispy over paredit
  • sly over slime
  • prism over rainbow-delimiters and rainbow-blocks
  • eat over all the other terminal emulators
  • gptel over the dozens of other LLM clients

When I was starting off with Emacs, other people's customizations were deeply helpful for me as a starting point; some of those customizations still find a home in my Emacs instance today. In the spirit of free software, I hope that I can pass on the good will.

Requirements

This config makes extensive use of language servers and tree-sitter grammars. Most of my best supported languages will try to load a language server or tree-sitter grammar. If it fails to, it will warn you and give you a chance to install what is missing.

I usually only support one version of Emacs at a time. Currently I am supporting:

  • Emacs 29
  • Emacs 30

Features

Operating systems

The following operating systems are supported:

Additionally, this entire .emacs.d can be setup with native compilation, all necessary development environments below, and as your window manager by visiting my profiles repo, which can be executed on the Guix GNU/Linux distribution.

Development environments

This Emacs configuration reflects my REPL-centered exploratory programming style.

I provide an IDE and REPL for each major environment that I work in.

One can debate about which languages Emacs is actually ideal for, but Emacs is certainly a best-in-class environment for Haskell, Elixir, Common Lisp, Scheme, and Clojure.

First class

The best supported developer environments are the Lisp languages. Since they have feature rich IDEs with powerful REPLs, they do not need Eglot.

Language IDE REPL Eglot
Clojure CIDER CIDER N/A
Common Lisp SLY SLY N/A
Scheme Geiser Geiser N/A

Second class

Guix comes with pre-packaged language servers for these languages.

Language IDE REPL Eglot
C c-ts-mode Yes
C++ c++-ts-mode Yes
Go go-ts-mode go-playground Yes
Python Anaconda run-python Yes
Ruby Robe inf-ruby Yes
Rust Racer rust-playground Yes

Third class

Guix lacks pre-packaged language servers for these languages.

Language IDE REPL Eglot
Elixir Alchemist inf-elixir No
Fish fish-mode fish-completion No
Haskell Intero Dante No
JavaScript js2-mode Indium No
PHP php-mode PsySH No
SQL sql-mode emacsql No
TypeScript Tide Indium No

Fourth class

I don't even have a REPL for these languages, and quite frankly, most of these languages are best used within their respective IDEs.

Language IDE REPL Eglot
GDScript gdscript-mode Yes
Groovy groovy-mode No
Java java-ts-mode No
Kotlin kotlin-mode No
Objective-C objc-mode No
Swift swift-mode No

Tools

This configuration ships with a great many helpful tools:

Feature Tool
Benchmarker elisp-benchmarks
Bug tracker debbugs
Clipboard Clipetty
Completion (regular buffer) Corfu
Completion (minibuffer) Vert&co
Dashboard Dashboard
Docker client docker.el
Documentation searcher devdocs
Evaluation overlay eros
Gemini browser Elpher
HTTP browser EWW
Hyperlinker Hyperbole
IRC client ERC
Kubernetes client kubernetes-el
LLM client gptel
LSP client Eglot
Mail client Gnus
Mail indexer Notmuch
Modal editor Meow, Lispy
Modeline Smart Mode Line
MUD client mu.el
Music player Emms
Music streamer pianobar.el
Organization org-mode
Package manager elpaca
REST client restclient.el
Shell Eshell
Syntax checker flymake
Syntax highlighter prism
Terminal Eat
Undo visualizer undo-tree
Version control Magit
Wikipedia editor mediawiki.el
Window configuration winner-mode
Window handling windmove
Window manager exwm
Workspace manager activities.el

Themes

There are many beautiful theme families for you to enjoy:

Keystrokes

This is a modal editing setup that uses two different modal editors: Meow and Lispy. Lispy is only for Lisp languages.

I maintain the default Emacs keybindings, so I will not document them here. Meow will help you discover keystrokes after you hit SPC in keypad mode.

Normal editing

Meow cheat sheet

Run meow-tutor to learn Meow.

Meow documentation

Lisp editing

Lispy editing is activated only in major modes for Lisp languages when around parens in Meow's insert mode.

  • e evaluate s-expression
  • f forward point through parens
  • b undo
  • ] move point down
  • [ move point up
  • > slurp up next s-expression
  • < barf up s-expression
  • w move s-expression up
  • s move s-expression down
  • r raise s-expression
  • C-1 view documentation
  • C-2 view caller arguments

Lispy documentation

Movement between buffers

Movement between buffers is accomplished with windmove:

  • Shift-up
  • Shift-left
  • Shift-right
  • Shift-down

Tab management

I have keystrokes setup to emulate tmux/screen using Emacs tabs.

  • C-z(one) c(reates) a new workspace.
  • C-z(one) k(ills) a current workspace.
  • C-z(one) n(ext) workspace.
  • C-z(one) p(revious) workspace.

Custom keystrokes

These are custom keystrokes that I have setup.

When in Meow's insert mode, prepend with C-c. When in Meow's keypad mode, prepend with SPC.

  • a(g) search git repo using ag
  • b(uffer) switch buffers with autocompletion
  • i(sp) search through Lisp symbols (defaults to Emacs Lisp)
  • d(ocumentation) brings up documentation for symbol under cursor
  • e(at) brings up the Eat terminal
  • k(ill) kill buffer unconditionally
  • l(ocate) locate a file
  • o(mpile) compiles the buffer in a language appropriate way
  • p(ush) pushes the current git branch
  • r(eplace string) replace all occurrences of a string after point
  • s(tatus) shows the current git status
  • t(abs) search through tabs
  • y(ank) show list of yanked items
  • <left> previous buffer
  • <right> next buffer
  • <up> beginning of buffer
  • <bottom> bottom of buffer

Learning

Everything is very organized in the enzuru folder by feature, mode, preference, setup, operating system, and theme. While this repo should work immediately for you on a git pull, it's obviously a very personalized setup and many things won't appeal to you. If I were you, I would first take a look at my init.el and then pick a topical elisp file from there.

Happy hacking!

License

Licensed under the GPLv3; copyright is assigned to my eponymous charity enzu.ru

About

A maximalist Emacs config tracking the latest trends

Topics

Resources

License

Stars

Watchers

Forks