/em

As somewhat minimal, somewhat practical, somewhat sensible Nix-packaged Emacs bundle.

Primary LanguageEmacs Lisp

What

em is a somewhat minimal, somewhat practical, somewhat sensible, Nix-packaged Emacs bundle.

It is mainly intended for Haskell development.

Installation

Nix is a prerequisite.

./install.sh

Once done, em, a basic shell wrapper around emacs is available in the user environment.

emn is a non-blocking variant of em (convenience for nix-shell usage).

Quick summary of non-default keybindings:

Window navigation & management

S-<arrows>
Directional navigation (windmove-left / right / up / down)
C-Tab
Cycle (other-window)
C-c C-<left/right>
undo/redo any window layout changes (winner-undo / redo)

Buffer navigation

M-SPC
Quick list of same-type buffers (bs-show)
S-M-SPC
Full list of buffers (ibuffer)

File/repo

`
Quick navigate in repo files (helm-ls-git-ls)
<menu>
Everything git (magit-status)
C-c m
Rename current file and buffer (rename-this-buffer-and-file)
C-<pgup> / <pgdown>
Left sidebar: move to prev/next (neotree-tab-move)

Search (incremental, via Helm)

M-s
Grep in root of current git repo (helm-grepint-grep-root)
C-<super>-s
Hoogle inside the current Nix shell (helm-hoogle-at-point)
<f1>
Interactive Emacs command/function/variable ‘apropos’ (helm-apropos)
C-x C-z
Recall results of ANY last Helm search (helm-resume)

Haskell

<f4>
Set a Cabal lib target for Dante (dante-set-lib)
open any .hs file
Dante is started, but will fail, unless you set the Cabal target before doing this. It’s also beneficial to prebuild the target in CLI beforehand.

In Haskell buffers

M-p / M-n
Navigate between error messages

Random stuff

<f10>
Insert current date
C-up
Join current line to the previous one
C-x a r
Align by regexp