Emacs Configuration Generator

Some people claim that Emacs is difficult to start with. The main problem is probably the chicken-and-egg situation: To make the most use of Emacs, you probably need to understand Emacs (Lisp), but to grok Emacs Lisp you pretty much neeed to understand the fundamentals of Emacs.

A common suggestion is to use frameworks or ready-made configurations that provide a layer of abstraction to help set up common functionality. This site is an attempt to approach the issue from a different standpoint, by having an interested user pick-and-choose what they would like to start with and provide a template to build on. Note that you will be suggested a few packages that are downloaded over the internet, from the ELPA (Emacs Lisp package archive) repositories.

Note: This site is still experimental, and there is a lot more that can be done. Any and all feedback (issues, ideas, criticisms, etc.) are always very appreciated! See this article for more details, or just send a message to my public inbox.

So if interested, fill out the form below and have a configuration file generated.


General

Some options might depend on the version of Emacs you have installed. If you know what version you will be using, set it here. Otherwise it will be assumed that you have Emacs 28.1 installed (currently most widely available version).

Appearance

You might use a custom theme for aesthetic reasons or because you have a visual impairment. Here follows a list of themes that are bundled with Emacs, that you might be interested in.


By default Emacs has a few GUI elements enabled. Some prefer to disable these, as they do everything using the keyboard. Beginners should think twice about doing this, as the GUI (especially the menu bar) provide useful pointers.




By default Emacs comes with a splash screen, including a list of useful pointers. If you are sure you don't need it anymore, it can be disabled.


User Interface

Package vertico

Completion framework

When using Emacs, you will frequently find that you will be queried information like what file to open, what buffer to switch to, a command to execute, etc. This is done using the minibuffer, a section at the bottom of the Emacs frame. Depending in the kind of input, Emacs can provide context-sensitive help to complete partial input.

Emacs default completion behaves similar to Bash, in that on pressing TAB it first attempts to expand a string up until an unambiguous point, then pops up a list of possible completions. A popular alternative to this expandingapproach is interactive narrowing, that is to say the list of candidates (files, buffers, etc.) are immediately presented and the user restricts these until they have found what they are looking for.

If interested, you can add Vertico a popular package that implements this kind of interaction.




Package consult

Extended completion utilities

If you decide to use Vertico, Consult might also be of interest. It defines a number of convenient commands that make use of narrowing completion.





If you prefer to see the line numbers at a quick glance, you might be interested want to enable line numbering. It is disabled by default, because you don't really need it most of the time. Also note that you might not want to have it enabled everywhere, as often the content of a text buffer isn't just a text file you might address line by line, but documentation or interactive applications such as a shell/REPL. It is therefore perhaps better to only enable line numbering when interacting with program code.

Enable inline line numbering?

Do you want Emacs to automatically add the closing parentheses, when you insert the opening ones? This would also apply to brackets of all sorts, quotes and in some cases additional constructs depending on the programming language. Note that if you are used to typing out the closing parenthesis, this shouldn't be an issue, as Emacs will just move over it if it were to be inserted.


Programming

Most people use Emacs for programming. This section has a few popular programming languages and tools you might be interested in.

Programming-language agnostic tools

Package eglot

LSP Support

The Language Server Protocol has become a popular method to provide language introspection (error checking, completion, ...) independently of an editor. To make use of this in Emacs, a package has to be installed.

Note that this still requires an LSP Server to be provided, for whatever language you intend to use.



Built-In Package flymake

Inline static analysis

To indicates static analysis messages on the fly, enabled this. Note that this will just enable the user-interfacing front-end, to display error messages. Depending on the language mode, you might just get syntax errors highlighted in a buffer, or when combined with a LSP client (see below) it can also provide semantic warnings. In some cases you might not see any warnings, in which case there would appear to be no back-end providing the information.

Note that this package is built-in but can be updated to add new features.




Package corfu

Pop-up completion

Enable this if you want to have Emacs display completion in a little pop-up window.

Do not confuse this with a completion framework. They are used for querying the user for information, this completes text in a buffer.



Package dape

DAP Support

The Debugger Adapter Protocol is an method to integrate debugging capabilities independently of an editor. To make use of this in Emacs, a package has to be installed.

Note that this still requires an debugger with DAP capabilities to be provided, for whatever language you intend to use.





Version control

Package magit

Git client

The well known Git client Magit is one of the most popular packages, and is said to make using Git easier.



Package diff-hl

Indication of local VCS changes

If you wish to see at a quick glance what section of a file have been added, modified or removed, you might be interested in highlighting these changes next to the content of the buffer.



Programming languages and Programming-adjacent languages

While Emacs has support for a number of languages out of the box (C, C++, Python, Perl, Lisp, Fortran, XML, HTML, Pascal, Ruby, TCL, TeX, ...), some can make use of some additional configuring, while others need external packages.

Package ada-mode

Ada Support

Package clojure-mode

Clojure Support

Package proof-general

Coq Support

Package csharp-mode

C# Support

Package d-mode

D Support

Package elixir-mode

Elixir Support

Package go-mode

Go Support

Package haskell-mode

Haskell Support

Package j-mode

J Support

Package json-mode

JSON Support

Package julia-mode

Julia Support

Package kotlin-mode

Kotlin Support

Package lua-mode

Lua Support

Package nasm-mode

NASM Support

Package php-mode

PHP Support

Package raku-mode

Raku Support

Package rust-mode

Rust Support

Package scala-mode

Scala Support

Package sly

Additional Lisp support

Package sml-mode

Standard ML Support

Package swift-mode

Swift Support

Package typescript-mode

Typescript Support

Package yaml-mode

YAML Support

Package sweeprolog

SWI-Prolog Support

While Emacs has Prolog support built-in, this package provides further integration for recent versions of SWI-Prolog, configuring auto-completion, jump-to-definition, on-the-fly-error-checking, etc. next to the usual stuff like loading files into a the top-level.


Writing

LaTeX

Package auctex

LaTeX support

Via AucTeX, Emacs has good support for working with LaTeX, including help when inserting macros, quick math-mode input, automated building and viewing of documents and inline preview.



Markdown

Package markdown-mode

Markdown support

The Markdown markup language is commonly used for documentation. If you use it, adding this package might be convenient.

Org Mode

Built-In Package org

Outline-based notes management and organizer

The well known markup format for Emacs, Org Mode can be used for anything from managing appointments, writing manuals, literate programs or executing code like a programming notebook.

While Org Mode is bundled in by default, you can decide to fetch a new newer version that what is provided by default by your Emacs installation.



Package org-contrib

Additional Org-mode related functionality

If interested in Org Mode, you might also like these extensions that are not distributed with Org by default.

Utilities

Applications

Package crdt

Collaborative Editing

If you have friends using Emacs, this package might be of use if you need to work on the same files at the same time, so that everyone can see what everyone else is doing. The package uses Conflict-free replicated data types to synchronise the buffer state, without the need for a central server or service.

Built-In Package rcirc

IRC Client

IRC remains popular, especially among Emacs users. If you want to hang out in a chat room or need to contact a project you are having issues with, having a basic IRC configuration can be of use.



Package editorconfig

EditorConfig support

A popular method to ensure consistent formatting and indentation between editors is EditorConfig. If you need to use this, add this package.


Package eat

In-Emacs Terminal Emulation

As is so often the case with Emacs, while there is built-in terminal Emulator term, there are alternative implementations that are developed independently and might provide interesting features (such as user options, performance, functionality, etc.) that might be of interest. One such example in the third-party terminal emulator EAT (Emulate a terminal). If you find yourself using a terminal emulator a lot, consider using this package.

Note: While terminal emulation is available, a much richer way of interacting with your system might be directly in a shell in a regular buffer. This is implemented by the shell command. The advantage of this approach is that you can interact and manipulate the shell history just like any other buffer.



Text manipulation and navigation

Since everything is just a text buffer in Emacs, general purpose utilities and commands have wide applicability. This section suggests a few popular examples.

Package avy

Jump to arbitrary positions

This package provides functionality to jump to to any position (and manipulate it) using very few keystrokes. For this, you look at the position where you want point to be, invoke Avy, and then enter the sequence of characters displayed at that position.



Editor emulation

Emacs is programmable and the default behaviour can be modified, improved or disabled. As such it follows that it is possible to emulate the behaviour and user experience of other editors.

An example: CUA (Common User Access) are the conventions popularised by IBM in the 1980's, that are used by most other programmes. Think of copying using Control+C, pasting using Control+V.

Emacs not only predates these conventions, but stands in conflict with the bindings by default. An attempt at resolving this can be done usingcua-mode. If you find yourself struggling with Emacs bindings, enabling this might help overcome your initial difficulties.


Package evil

Vim Emulation

If you have previous experience with Vim, you might find that this emulation package could help with transitioning to Emacs. Note that as a full Emulation layer over Emacs, it might shadow other functionality inside of Emacs. Resolving these issues will require additional configuration, if you want to stick with full emulation. Also note, if you are just interested in vi-level emulation, Emacs already has a built-in package called viper that will take care of that.




Package brief

Brief Emulation

An editor more popular during the time of MS DOS, can also be emulated by Emacs.

Miscellaneous

Finally a few useful options, tricks and hacks that are suggested.