dotfiles.nix/home-manager/modules/profiles/user/willem/programs/emacs/default.nix

137 lines
4.1 KiB
Nix

{
config,
pkgs,
...
}: let
aspellPackage = pkgs.aspellWithDicts (d: [d.en d.en-science d.en-computers d.fr]);
emacsPackage =
(pkgs.emacsPackagesFor pkgs.emacsGit).emacsWithPackages
(epkgs:
(with epkgs; let
company-mode = epkgs.trivialBuild {
pname = "company-mode";
version = "4203cfb";
src = pkgs.fetchFromGitHub {
owner = "company-mode";
repo = "company-mode";
rev = "4203cfbe1303ca86e61ffa31cb88d75782dbb893";
sha256 = "sha256-wj0vXlVkNEA1gD1oT3phzK5Dr/LNkiE2oRzzRmLE+20=";
};
};
mu4e = epkgs.trivialBuild {
pname = "mu4e";
version = pkgs.mu.version;
src = "${pkgs.mu}/share/emacs/site-lisp/mu4e";
};
mu4e-accounts = epkgs.trivialBuild {
pname = "mu4e-accounts";
version = "0.1";
buildInputs = [pkgs.mu];
src = let
smtpConfig = name: (
let
account = config.accounts.email.accounts.${name};
port = builtins.toString account.smtp.port;
host = account.smtp.host;
in ''
("${name}"
(mu4e-drafts-folder "/${name}/${account.folders.drafts}")
(mu4e-sent-folder "/${name}/${account.folders.sent}")
(mu4e-trash-folder "/${name}/${account.folders.trash}")
; (mu4e-maildir-shortcuts
; '( (:maildir "/${name}/${account.folders.inbox}" :key ?i)
; (:maildir "/${name}/${account.folders.sent}" :key ?s)
; (:maildir "/${name}/${account.folders.drafts}" :key ?d)
; (:maildir "/${name}/${account.folders.trash}" :key ?t)))
(smtpmail-default-smtp-server "${host}")
(smtpmail-smtp-server "${host}")
(smtpmail-smtp-service ${port} )
(smtpmail-smtp-user "${account.userName}")
(user-mail-address "${account.address}"))
''
);
smtpAccountStrings = pkgs.lib.forEach (builtins.attrNames config.accounts.email.accounts) (account: " ${(smtpConfig account)} ");
smtpAccounts = "'( ${pkgs.lib.concatStrings smtpAccountStrings} )";
in
pkgs.writeText "mu4e-accounts.el" ''
(defvar my-mu4e-account-alist ${smtpAccounts} )
(provide 'mu4e-accounts)
'';
};
org-auctex = epkgs.trivialBuild {
pname = "org-auctex";
version = "e1271557b9f36ca94cabcbac816748e7d0dc989c";
buildInputs = [epkgs.auctex];
src = pkgs.fetchFromGitHub {
owner = "karthink";
repo = "org-auctex";
rev = "e1271557b9f36ca94cabcbac816748e7d0dc989c";
sha256 = "sha256-cMAhwybnq5HA1wOaUqDPML3nnh5m1iwEETTPWqPbAvw=";
};
};
in [
all-the-icons
all-the-icons-dired
arduino-mode
async
auctex
calibredb
cdlatex
citeproc
company-mode
company-sourcekit
counsel
editorconfig
edit-indirect
format-all
gnuplot
graphviz-dot-mode
htmlize
ivy
ivy-bibtex
magit
meow
mu4e
mu4e-accounts
nix-mode
nix-update
org
org-auctex
org-contrib
org-download
org-modern
pdf-tools
plantuml-mode
polymode
poly-org
rustic
separedit
solarized-theme
swift-mode
swiper
yasnippet
])
++ (with pkgs; [
aspellPackage
gnuplot
plantuml
sqlite
]));
in {
home.file.".emacs.d/early-init.el".source = ./early-init.el;
home.file.".emacs.d/init.el".source = ./init.el;
programs.emacs.enable = true;
programs.emacs.package = emacsPackage;
services.emacs = pkgs.lib.mkIf pkgs.stdenv.isLinux {
enable = true;
client.enable = true;
startWithUserSession = true;
};
}