nixos-config/modules/emacs.nix

66 lines
1.8 KiB
Nix

{ config, lib, pkgs, ... }:
let
emacsConfigText = builtins.readFile ./emacs/init.el + (if config.chvp.mail-client.enable then config.chvp.mail-client.mu4eConfig else "") + ''
(provide 'init)
;;; init.el ends here
'';
emacsPkg = pkgs.emacsWithPackagesFromUsePackage {
config = emacsConfigText;
package = pkgs.emacsPgtk;
alwaysEnsure = true;
# mu4e is included in the mu package and should be used from there
extraEmacsPackages = epkgs: lib.optional config.chvp.mail-client.enable pkgs.mu;
};
in
{
options.chvp.emacs = {
enable = lib.mkOption {
default = true;
example = false;
};
package = lib.mkOption { };
};
config = lib.mkIf config.chvp.emacs.enable {
nixpkgs.overlays = [
(self: super: {
mu = super.mu.overrideAttrs (old: {
version = "1.5.13";
src = self.fetchFromGitHub {
owner = "djcb";
repo = "mu";
rev = "6d67e146fecb5aa512a7eff4b8044225af0dc5ce";
sha256 = "0ip7nd7z2l60a3dc1aic34hpab4alb0rmxlk9778nz3v88735iik";
};
});
})
];
chvp = {
emacs.package = emacsPkg;
zfs.homeLinks = [
{ path = ".emacs.d"; type = "cache"; }
];
};
home-manager.users.charlotte = { ... }: {
services.emacs = {
enable = true;
client.enable = true;
socketActivation.enable = true;
package = emacsPkg;
};
home = {
file = {
".emacs.d/early-init.el".source = ./emacs/early-init.el;
".emacs.d/init.el".text = emacsConfigText;
};
packages = [
(pkgs.writeShellScriptBin "emacs" ''${emacsPkg}/bin/emacsclient -c "$@"'')
(pkgs.writeShellScriptBin "emacsclient" ''${emacsPkg}/bin/emacsclient "$@"'')
];
sessionVariables = { EDITOR = "emacs"; };
};
};
};
}