Emacs

From NixOS Wiki
Revision as of 11:07, 22 February 2022 by imported>Jeslie0 (Added information on installing emacs when using a system flake)

For reference use the emacs chapter in the nixos manual.

About

Emacs is an interactive graphical emacs lisp interpreter that comes with many applications, but is primarily used as a text and code editor. It has one of the largest repositories of packages of any similar code editor such as vim or its fork neovim.

Features

Emacs is often valued as a general purpose programming environment. Its power comes from its

  • Extensibility
  • Automatic self-documenting behaviour
  • Flexibility
  • Syntax awareness
  • language server protocol support
  • potential for reproducible portable literate configurations
Warning: Certain issues are possible, when mixing different versions of Emacs, in particular a configuration file tailored towards emacs with native compilation, may misbehave on non-native compiling versions, unless only the emacs lisp code is shared between them.

Unstable branches

As of July 2021, the Nix community offers 7 variants of GNU Emacs as overlays: emacsGit, emacsGcc, emacsPgtk, emacsPgtkGcc, emacsUnstable, emacsGit-nox, and emacsUnstable-nox.

Pure GTK

Offers better integration with wayland compositors, in particular, there's better support for sharing the kill ring contents with the system clipboard.

GCC

Branches offer a means for automatic, asynchronous native compilation of emacs lisp into native code, that is then transparently used whenver the original versions of the functions are requested.

Installation

Emacs overlay

For installing one of the unstable branches of emacs, add the following lines to /etc/nixos/configuration.nix (replace emacsPgtkGcc with the variant of your choice).

configuration.nix
{
  services.emacs.package = pkgs.emacsPgtkGcc;

  nixpkgs.overlays = [
    (import (builtins.fetchGit {
      url = "https://github.com/nix-community/emacs-overlay.git";
      ref = "master";
      rev = "bfc8f6edcb7bcf3cf24e4a7199b3f6fed96aaecf"; # change the revision
    }))
  ];

  environment.systemPackages = with pkgs; [
    emacsPgtkGcc
  ];
}

Flakes

Using a system flake, one can specify the specific revision of the overlay as a flake input, for example:

inputs.emacs-overlay.url = "github:nix-community/emacs-overlay/da2f552d133497abd434006e0cae996c0a282394";

This can then be used in the system configuration by using the self argument:

nixpkgs.overlays = [ (import self.inputs.emacs-overlay) ];

Doom Emacs

The Doom Emacs project provides a framework with a better default configuration and modules for different programming languages. Since it uses pinning in its configuration for dependencies, it is possible to package Doom Emacs with nix (see nix-doom-emacs)