nixos-config/home-manager/modules/emacs/default.nix
2022-05-28 17:08:20 +02:00

78 lines
1.9 KiB
Nix

{ pkgs
, config
, lib
, ...
}:
with lib; let
cfg = config.eboskma.programs.emacs;
emacs = with pkgs; ((emacsPackagesFor emacsPgtkNativeComp).emacsWithPackages (epkgs: [ epkgs.emacsql epkgs.emacsql-sqlite ]));
orgProtocolDesktop = pkgs.makeDesktopItem {
name = "org-protocol";
desktopName = "Emacs Org Protocol Handler";
icon = "emacs";
categories = [ "Development" "TextEditor" ];
keywords = [ "org-protocol" ];
type = "Application";
exec = "${emacs}/bin/emacsclient -- %u";
terminal = false;
mimeTypes = [ "x-scheme-handler/org-protocol" ];
startupWMClass = "Emacs";
};
valeToINI = generators.toINIWithGlobalSection {
mkKeyValue = generators.mkKeyValueDefault
{
mkValueString = v:
if builtins.isList v then builtins.concatStringsSep ", " v
else generators.mkValueStringDefault { } v;
} " = ";
};
in
{
options.eboskma.programs.emacs = {
enable = mkEnableOption "activate emacs";
daemon = mkOption {
description = "Whether to enable emacs daemon";
type = types.bool;
default = true;
example = false;
};
};
config = mkIf cfg.enable {
programs.emacs = {
enable = true;
package = emacs;
};
services.emacs = mkIf cfg.daemon {
enable = true;
package = emacs;
client.enable = true;
socketActivation.enable = true;
};
home.packages = with pkgs; [
(texlive.combine {
inherit (texlive) scheme-small wrapfig ulem capt-of;
})
orgProtocolDesktop
nodePackages.bash-language-server
vale
vale.data
];
home.file.".vale.ini".text = valeToINI {
globalSection = {
StylesPath = "${pkgs.vale.data}/share/vale/styles";
MinAlertLevel = "suggestion";
};
sections = {
"*" = {
BasedOnStyles = [ "vale" "proselint" "write-good" ];
};
};
};
};
}