Jotain
Jotain is a custom GNU Emacs configuration built from scratch. The name is Finnish for “something.” The project includes:- A modular Emacs Lisp configuration organised by concern (
lisp/init-*.el) - A Nix expression (
emacs.nix) for building GNU Emacs from source, with every upstream build flag exposed andpkgs.emacs(nixpkgs) binary-cache parity as an invariant; git-based variants come fromnix-community/emacs-overlay - A distribution (
nix/mk-overlay.nix, exposed viaflake.nixand thedefault.nixflake-compat shim) that ships Emacs together with all ~275 tree-sitter grammars from nixpkgs - A development shell (
devenv.nix) with linters, language servers, and docs tooling (Emacs itself is not in the shell — launch it withjust run-built) - A home-manager service (
module.nix) for running Jotain as a user daemon withemacsclient - A
Justfiletask runner covering check, build, launch (just run-built), pins, and cleanup
Why Jotain?
Jotain takes a different approach from framework-based Emacs configurations like Doom or Spacemacs. Instead of layering on top of an opinionated framework, Jotain is built from scratch with:- Nix-based builds — reproducible Emacs from source with precise control over compile options, and binary-cache parity with
pkgs.emacs(nixpkgs) for the default configuration. - Modular Elisp — one file per concern (
init-ui.el,init-completion.el,init-vc.el, …). A package that only exists to enhance a built-in (e.g.dirvish→dired,magit→vc) lives in the same file as the built-in it enhances — there is no “builtins.el” / “third-party.el” split. - Modern Emacs — an Emacs 31 configuration (default build: the Emacs 31 pretest via emacs-overlay; floor:
emacs "30.1"), with native compilation, tree-sitter modes, lexical binding throughout, anduse-packagebuilt-in. setoptby default — user options (defcustom) are set viasetoptso:setcallbacks and type validation actually run.