Emacs: Difference between revisions
imported>Tobias.bora No edit summary |
imported>Tobias.bora No edit summary |
||
Line 16: | Line 16: | ||
{{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.}} | {{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.}} | ||
==== | ==== Emacs or emacs-gtk ==== | ||
As of July 2021, the Nix community offers [https://github.com/nix-community/emacs-overlay/blob/f177e5d14ad2e1edceb63f3ab8aa9748ebe6383c/default.nix#L104 7 variants of GNU Emacs] as overlays: emacsGit, emacsGcc, emacsPgtk, emacsPgtkGcc, emacsUnstable, emacsGit-nox, and emacsUnstable-nox. | Note that [https://github.com/NixOS/nixpkgs/pull/189543 since 2022-09], the package called <code>emacs</code> is now installing the lucid toolkit instead of gtk. The reason is that emacs is less stable with gtk especially in daemon mode. However, the lucid flavor of emacs will not take into account the gtk theme (since it is not even gtk) and looks quite… ugly (see comparisons [https://emacs.stackexchange.com/questions/33065/on-linux-why-should-one-choose-lucid-over-gtk-gui-for-emacs here]). If you still prefer the gtk version of emacs, you can install instead <code>emacs-gtk</code> (before 2022-09 this package does not exist and emacs defaults to the gtk version) | ||
==== Unstable branches ==== | |||
As of July 2021, the Nix community offers [https://github.com/nix-community/emacs-overlay/blob/f177e5d14ad2e1edceb63f3ab8aa9748ebe6383c/default.nix#L104 7 variants of GNU Emacs] as overlays: emacsGit, emacsNativeComp ([https://github.com/nix-community/emacs-overlay/pull/223 formerly] emacsGcc), emacsPgtk, emacsPgtkNativeComp ([https://github.com/nix-community/emacs-overlay/pull/223 formerly] emacsPgtkGcc), emacsUnstable, emacsGit-nox, and emacsUnstable-nox. | |||
===== Pure GTK ===== | ===== Pure GTK ===== |
Revision as of 15:21, 20 September 2022
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
Emacs or emacs-gtk
Note that since 2022-09, the package called emacs
is now installing the lucid toolkit instead of gtk. The reason is that emacs is less stable with gtk especially in daemon mode. However, the lucid flavor of emacs will not take into account the gtk theme (since it is not even gtk) and looks quite… ugly (see comparisons here). If you still prefer the gtk version of emacs, you can install instead emacs-gtk
(before 2022-09 this package does not exist and emacs defaults to the gtk version)
Unstable branches
As of July 2021, the Nix community offers 7 variants of GNU Emacs as overlays: emacsGit, emacsNativeComp (formerly emacsGcc), emacsPgtk, emacsPgtkNativeComp (formerly 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)
Packages
One can mix and match whether Emacs packages are installed by Nix or Emacs. This can be particularly useful for Emacs packages that need to be built, such as vterm. One way to install Emacs packages through Nix is by the following, replacing emacsPgtkGcc
with the variant in use:
environment.systemPackages = with pkgs; [ ... ((emacsPackagesFor emacsPgtkGcc).emacsWithPackages (epkgs: [ epkgs.vterm ])) ... ];
To make the packages available to emacsclient
, one can do the following:
services.emacs.package = with pkgs; ((emacsPackagesFor emacsPgtkGcc).emacsWithPackages (epkgs: [ epkgs.vterm ]));
Note that some packages may have strange characters like +
that would be considered as a syntax error by nix. To avoid that, make sure to write it in quotes and to prepend it with the package set that you want l (even if you used with epkgs; …
) like epkgs."ido-completing-read+"
.