• Stars
    star
    6,646
  • Rank 5,933 (Top 0.2 %)
  • Language
    Emacs Lisp
  • License
    BSD 2-Clause "Sim...
  • Created almost 16 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An Emacs configuration bundle with batteries included

Build Status Support me

A reasonable Emacs config

This is my emacs configuration tree, continually used and tweaked since 2000, and it may be a good starting point for other Emacs users, especially web developers. These days it's somewhat geared towards OS X, but it is known to also work on Linux and Windows.

Emacs itself comes with support for many programming languages. This config adds improved defaults and extended support for the following, listed in the approximate order of how much I use them, from most to least:

  • Haskell / Purescript / Elm / OCaml
  • Ruby / Ruby on Rails
  • SQL
  • CSS / LESS / SASS / SCSS
  • Javascript / Typescript / Coffeescript
  • HTML / HAML / Markdown / Textile / ERB
  • Common Lisp (with Slime)
  • Python
  • Rust
  • Clojure (with Cider and nRepl)
  • PHP
  • Erlang

In particular, there's a nice config for autocompletion with corfu, and flymake (re-using backends from flycheck) is used to immediately highlight syntax errors in Ruby, Python, Javascript, Haskell and a number of other languages.

LSP support is provided using eglot.

Supported Emacs versions

Use the latest released Emacs version available to you. The author typically uses the latest stable version.

The config should run on Emacs 26.1 or greater and is designed to degrade smoothly - see the CI build - but even basic enhancements like completion may be unavailable if your Emacs is too old.

Some Windows users might need to follow these instructions to get TLS (ie. SSL) support included in their Emacs.

Other requirements

To make the most of the programming language-specific support in this config, further programs will likely be required, particularly those that flycheck uses to provide on-the-fly syntax checking.

Installation

To install, clone this repo to ~/.emacs.d, i.e. ensure that the init.el contained in this repo ends up at ~/.emacs.d/init.el:

git clone https://github.com/purcell/emacs.d.git ~/.emacs.d

Upon starting up Emacs for the first time, further third-party packages will be automatically downloaded and installed. If you encounter any errors at that stage, try restarting Emacs, and possibly running M-x package-refresh-contents before doing so.

Updates

Update the config with git pull. You'll probably also want/need to update the third-party packages regularly too, because that's what I do, and the config assumes it:

M-x package-list-packages, then U followed by x.

You should usually restart Emacs after pulling changes or updating packages so that they can take effect. Emacs should usually restore your working buffers when you restart due to this configuration's use of the desktop and session packages.

Changing themes and adding your own customization

To add your own customization, use M-x customize, M-x customize-themes etc. and/or create a file ~/.emacs.d/lisp/init-local.el which looks like this:

... your code here ...

(provide 'init-local)

If you need initialisation code which executes earlier in the startup process, you can also create an ~/.emacs.d/lisp/init-preload-local.el file.

If you plan to customize things more extensively, you should probably just fork the repo and hack away at the config to make it your own! Remember to regularly merge in changes from this repo, so that your config remains compatible with the latest package and Emacs versions.

Please note that I cannot provide support for customised versions of this configuration.

Support / issues

If you hit any problems, please first ensure that you are using the latest version of this code, and that you have updated your packages to the most recent available versions (see "Updates" above). If you still experience problems, go ahead and file an issue on the github project.

-Steve Purcell


💝 Support this project and my other Open Source work

💼 LinkedIn profile

sanityinc.com

🐦 @sanityinc

More Repositories

1

exec-path-from-shell

Make Emacs use the $PATH set up by the user's shell
Emacs Lisp
1,325
star
2

sqlint

Simple SQL linter supporting ANSI and PostgreSQL syntaxes
Ruby
404
star
3

color-theme-sanityinc-tomorrow

A set of comprehensive Emacs color themes based on Chris Kempson's 'tomorrow' themes
Emacs Lisp
392
star
4

envrc

Emacs support for direnv which operates buffer-locally
Emacs Lisp
252
star
5

page-break-lines

Emacs: display ugly ^L page breaks as tidy horizontal lines
Emacs Lisp
222
star
6

emacs-reformatter

Define commands which run reformatters on the current Emacs buffer
Emacs Lisp
213
star
7

package-lint

A linting library for elisp package metadata
Emacs Lisp
191
star
8

nix-emacs-ci

Emacs installations for continuous integration
Nix
166
star
9

ibuffer-vc

Let Emacs' ibuffer-mode group files by git project etc., and show file state
Emacs Lisp
163
star
10

elisp-slime-nav

Slime-style navigation of Emacs Lisp source with M-. & M-,
Emacs Lisp
148
star
11

whitespace-cleanup-mode

In Emacs, intelligently call whitespace-cleanup on save
Emacs Lisp
118
star
12

setup-emacs

Github action which installs a given Emacs version
Shell
117
star
13

diredfl

Extra Emacs font lock rules for a more colourful dired
Emacs Lisp
115
star
14

ac-slime

Emacs auto-complete plugin for Slime symbols
Emacs Lisp
109
star
15

whole-line-or-region

In Emacs, operate on current line if no region is active
Emacs Lisp
106
star
16

less-css-mode

Emacs mode for LESS CSS (lesscss.org), with support for compile-on-save
Emacs Lisp
101
star
17

disable-mouse

Disable the mouse in Emacs
Emacs Lisp
100
star
18

darcs-to-git

Convert/mirror darcs repos into git repos
Ruby
96
star
19

airspeed

A lightweight Python template engine compatible with Velocity, used in OpenStack
Python
86
star
20

color-theme-sanityinc-solarized

A pair of Emacs color themes based on Ethan Schoonover's 'solarized' theme
Emacs Lisp
80
star
21

default-text-scale

Easily adjust the font size in all Emacs frames
Emacs Lisp
73
star
22

unfill

Functions providing the inverse of Emacs' fill-paragraph and fill-region
Emacs Lisp
72
star
23

jargs

GNU getopt-style command-line argument parser for Java, used in JBoss
Java
64
star
24

ibuffer-projectile

Group buffers in Emacs ibuffer-mode by their projectile root directory
Emacs Lisp
63
star
25

rails-runit

Run Rails reliably as runit services
Shell
43
star
26

paredit-everywhere

Enable some paredit features in non-lisp buffers
Emacs Lisp
38
star
27

flycheck-package

Flycheck checker for elisp package metadata
Emacs Lisp
38
star
28

postgresql-migrations

Simple Schema Migrations for PostgreSQL
PLpgSQL
36
star
29

flymake-easy

Helpers for easily building Emacs flymake checkers
Emacs Lisp
35
star
30

inheritenv

Make emacs temp buffers inherit buffer-local environment variables
Emacs Lisp
35
star
31

emacs-shfmt

Reformat shell script code in Emacs using shfmt
Emacs Lisp
33
star
32

flymake-flycheck

Use any Emacs flycheck checker as a flymake backend
Emacs Lisp
32
star
33

flymake-python-pyflakes

Emacs flymake handler for python using pyflakes
Emacs Lisp
29
star
34

flycheck-ledger

A flychecker for checking ledger files
Emacs Lisp
28
star
35

flymake-ruby

Emacs flymake handler for ruby-mode
Emacs Lisp
24
star
36

ns-auto-titlebar

In Emacs, set the MacOS transparent titlebar to match the current theme
Emacs Lisp
23
star
37

ruby-hash-syntax

In Emacs, toggle ruby hash syntax between classic and 1.9 styles
Emacs Lisp
22
star
38

windswap

Like Emacs's "windmove.el", but swaps buffers while moving
Emacs Lisp
20
star
39

osx-location

Make Emacs watch and respond to changes in geographical location on OS X
Emacs Lisp
19
star
40

flymake-jslint

Emacs flymake syntax-checker for javascript using jslint
Emacs Lisp
18
star
41

flymake-coffee

Emacs flymake handler for CoffeeScript
Emacs Lisp
15
star
42

flymake-php

Emacs flymake syntax-checker for php files
Emacs Lisp
15
star
43

mode-line-bell

Flash the Emacs mode line instead of ringing the bell
Emacs Lisp
15
star
44

adventofcode2016

Advent of Code 2016, in Haskell
Haskell
15
star
45

list-unicode-display

Search for and list unicode characters in Emacs
Emacs Lisp
15
star
46

ac-haskell-process

Haskell completion source for Emacs auto-complete package
Emacs Lisp
15
star
47

servant-elm

WIP: Generate Elm modules which talk to Haskell Servant APIs
Haskell
14
star
48

cl-libify

Update elisp code to use cl-lib instead of cl
Emacs Lisp
12
star
49

flymake-json

Emacs flymake handler for json using jsonlint
Emacs Lisp
11
star
50

emacs-nixpkgs-fmt

Reformat Nix code with nixpkgs-fmt in Emacs
Emacs Lisp
10
star
51

ac-inf-ruby

An Emacs auto-complete source for use in inf-ruby sessions
Emacs Lisp
10
star
52

flymake-shell

Emacs flymake syntax-checker for shell scripts
Emacs Lisp
9
star
53

rosettacode-clojure

My Clojure contributions to Rosettacode
Clojure
8
star
54

skewer-less

Live LESS stylesheet updates from Emacs via skewer-mode
Emacs Lisp
8
star
55

flycheck-relint

Flycheck integration for `relint`, which checks regexps in emacs lisp
Emacs Lisp
7
star
56

flymake-sass

Emacs flymake syntax-checker for sass stylesheets
Emacs Lisp
7
star
57

icfpc2017

2017 ICFP Contest - The Flux Ambassadors
Haskell
7
star
58

elm-life

Conway's Game of Life in Elm
Elm
7
star
59

ivy-smex

Use Ivy completion with Smex command matching
Emacs Lisp
6
star
60

hippie-expand-slime

Plug slime completion into Emacs' "hippie-expand"
Emacs Lisp
6
star
61

git-timemachine

Step through historic versions of git controlled file using everyone's favourite editor
Emacs Lisp
6
star
62

icfpc2015

My solo entry for the 2015 ICFP Contest - http://2015.icfpcontest.org/
Haskell
6
star
63

lively

Live-evaluated emacs lisp snippets
Emacs Lisp
6
star
64

dbdoc

Generate javadoc-style html documentation for a database schema
Python
6
star
65

adventofcode2017

Advent of Code 2017 in Haskell
Haskell
5
star
66

flymake-css

Emacs flymake syntax-checker for css using csslint
Emacs Lisp
5
star
67

company-cmake

Completion back-end for CMake
Emacs Lisp
5
star
68

wordchainsrevenge

Another run at the WordChains kata in haskell
Haskell
4
star
69

with-temp-postgres

Temporarily run postgres against a pre-existing data directory while you run a command
Shell
4
star
70

icfpc2018

2018 ICFP Contest
Haskell
4
star
71

elpa-audit

Handy functions for inspecting and comparing Emas package archives
Emacs Lisp
4
star
72

flymake-haskell-multi

Syntax-check haskell source in Emacs using both ghc and hlint
Emacs Lisp
4
star
73

adventofcode2018

Advent of Code 2018, in Haskell again because yay Haskell
Haskell
4
star
74

flymake-haml

Emacs flymake handler for haml and sass files
Emacs Lisp
4
star
75

redis-memo

Memoize clojure functions using redis as an out-of-process store for cached results
Clojure
4
star
76

dotr

Ruby wrapper for the 'dot' utility from graphviz
Ruby
3
star
77

dot-hammerspoon

My hammerspoon configuration
Lua
3
star
78

haskell-anagrams

A Haskell anagram generator, written for West London Hack Night
Haskell
3
star
79

emacs-docker

WIP: Tools for building docker images that contain emacs versions
Makefile
3
star
80

db_console

Defunct Rails plugin (now merged into Rails as script/dbconsole)
Ruby
3
star
81

gemdocindex

Generate an HTML index of your ruby gem rdocs, like a static 'gem --server'
3
star
82

color-theme-sanityinc

Two pleasant medium-contrast Emacs color themes in light and dark flavours
Emacs Lisp
3
star
83

codejam2016

Haskell solutions for qualification round of codejam 2016
Haskell
3
star
84

netstubs

Stub http and smtp servers, written in Python
Python
3
star
85

mockr

Tiny Ruby mock object library inspired by JMock
Ruby
2
star
86

fleeceminer

A toy crypto miner in ruby
Ruby
2
star
87

purcell

GitHub metadata
2
star
88

flymake-less

Emacs flymake handler for LESS stylesheets
Emacs Lisp
2
star
89

replit-j

Repl.it support for jlang
Nix
2
star
90

jquery.placeholder

Shows ghost text in empty input boxes, suggesting what the user should enter.
JavaScript
2
star
91

vm5294

"5294" Virtual Machine
Haskell
2
star
92

maintenance_server

Rails plugin providing a fallback server for mongrel
Ruby
2
star
93

farsync

A toy rsync-like tool written in ruby
Ruby
2
star
94

markov-chains-hs

A toy Markov Chain text generator in Haskell
Haskell
2
star
95

rsshole

Fetch a bunch of RSS feeds and classify new items (WIP)
Haskell
2
star
96

flymake-hlint

Emacs flymake handler for checking Haskell source code with hlint
Emacs Lisp
2
star
97

adventofcode2020

Advent of Code 2020, in J
J
2
star
98

purescript-life

WIP: purescript port of my Elm version of Conway's Game of Life (https://github.com/purcell/elm-life)
PureScript
2
star
99

adventofcodeteam

A team effort to solve all the Advent of Code challenges with Haskell in 2 days
Haskell
2
star
100

renumber_migrations

Rails plugin for renumbering clashing migrations in a project kept in svn
Ruby
2
star