WARNING: THIS GIST IS OUT OF DATE AND NO LONGER RELEVANT
- Native-comp was enabled by default in nixpgks
- Pgtk is not enabled by default, for that you can either override the derivation or use emacsPgtk from the nix-community emacs overlay if you don't want to build it yourself
Add the nix-community overlay to your nixpkgs. You can add the following to your configuration.nix (NixOS, non-user specific) or to your home-manager's home.nix. Note in the case of the latter, this will not be available for installation via nix-env.
{
nixpkgs.overlays = [
(import (builtins.fetchTarball {
url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
}))
];
}
See nixos or home-manager options for more information on adding overlays.
echo "import (builtins.fetchTarball {
url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
})" >> $HOME/.config/nixpkgs/overlays/emacs.nix
As this package is installed via an overlay, it is not built by the Hydra CI/CD pipeline that underlies nixpkgs. Instead, the binary is built by the nix-community hydra and pushed to Cachix. Follow the instructions here to add the nix-community cachix.
nix-env -iA cachix -f https://cachix.org/api/v1/install
cachix use nix-community
You will need to ensure that you are are installing the emacs overlay from the nixos-unstable unstable channel, not the nixpkgs-unstable channel. If you are using home-manager, you will need to set your default channel to nixos-unstable (you can do this on non-NixOS systems, the difference is that nixos-unstable lags behind nixpkgs-unstable due to requiring more comprehensive tests before deployment). Alternatively, you can separately import nixos-unstable import <nixos-unstable> { overlays = [ overlay1 overlay2 ]; }
separately, and use a separate channel specifically for emacs.
If you followed option 2, the following will work.
nix-env -iA nixpkgs.emacsGcc
More likely, you will want to declaratively install in your configuration.nix or home.nix.
Home-manager provides a handy module, you can also add extra packages such as vterm.
{
programs.emacs = {
enable = true;
package = pkgs.emacsGcc;
extraPackages = (epkgs: [ epkgs.vterm ] );
};
}
Alternatively you can add something like the following to you configuration.nix system packages
{
emacsWithPackages = (pkgs.emacsPackagesGen pkgs.emacsGcc).emacsWithPackages (epkgs: ([epkgs.vterm]));
}
As of 2020-08-03 the above works on fedora/ubuntu/debian and under NixOS. If you get an immediate segfault upon starting emacs, please ensure that your font is appropriately configured.
Thanks for the update ❤️ . Glad to hear about native-comp being enabled in the default builds.
I just tried adding a pgtk variant package (https://github.com/edrex/nixpkgs/tree/emacs-pgtk) but the result is running under xwayland, not sure what's up with that. Did I miss a flag (seems withGTK3 should default to true when
withPgtk = true
) or is it broken?With this, there would be 4 variants (
emacs
with lucid,emacs-gtk
with the old busted gtk/X hybrid, pgtk, andnox
. Each of these does its own ELN/ELC precompilation steps, which take awhile (~30mins on my gen8 i7).Is there anything we could do to share steps among the variants? Are the eln cache outputs the same with the different UI options? If so maybe we could split that into a shared package? That alone would help enormously, since the bulk of the build time is precompilation.
'Twere me, there would just be
emacs
with pgtk andnox
, but I get that it would go against community norms to ship an unofficial patchset as the default. Any recent progress with pgtk upstream, or is it stuck?I actually switched to helix awhile back, so I don't have too much of a horse in the game, but I still open up emacs to
do my laundryahem use magit.