Building reproducible Emacs (nix)

Emacs configuration ~= System configuration

  • dired uses ls, grep.el uses grep
  • info uses system's info files
  • gpg, git, make, gcc, etc…

How?

  • bunch of el files?
  • dotfiles?

Files

f(inputs) -> system

  • package definitions
  • environment definitions
  • service configurations

Problems

  • Integration
    • Sharing values between programs
  • Reproducibility
    • Version of emacs packages
    • Broken packages on updates hard to revert
    • Missing native dependencies
    • Hard to share configurations

Configuration inspiration

  • spacemacs/doom
  • Protesilaos' config
  • custom configs
  • use-package

Subconfig

  • EmacsLisp configuration
  • Emacs packages
  • Native dependencies
  • Variables
  • Service/system definitions

Examples

  • Font
  • org-roam
  • magit

Nix intro

  • virtualenv
  • lockfiles
  • profiles
  • system as a package

Current state

  • PoC configuration framework utilizing Nix and NixOS
    • Emacs package management
    • Native package management
    • System and programs configuration in one place
    • Tighter integration between programs

Future work

  • Reimplement it in guile for GNU Guix
  • From PoC to user-friendly state
  • Make a Lisp machine insipired OS

Links

Contacts

  • abcdw
  • andrew@trop.in