mirror of
https://github.com/willemml/dotfiles.nix.git
synced 2025-04-13 19:57:19 +00:00
Use emacs for email. (mu4e + offlineimap)
This commit is contained in:
parent
60189cb0e4
commit
e524e1a551
4 changed files with 157 additions and 7 deletions
34
home/accounts.nix
Normal file
34
home/accounts.nix
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
passCmd = path: "${pkgs.pass}/bin/pass ${path}";
|
||||||
|
gmailAccount = address: {
|
||||||
|
inherit address;
|
||||||
|
flavor = "gmail.com";
|
||||||
|
folders = {
|
||||||
|
drafts = "[Gmail].Drafts";
|
||||||
|
inbox = "INBOX";
|
||||||
|
sent = "[Gmail].Sent Mail";
|
||||||
|
trash = "[Gmail].Trash";
|
||||||
|
};
|
||||||
|
mu.enable = true;
|
||||||
|
offlineimap.enable = true;
|
||||||
|
passwordCommand = passCmd "gmail/${address}";
|
||||||
|
imap.tls = {
|
||||||
|
enable = true;
|
||||||
|
useStartTls = true;
|
||||||
|
};
|
||||||
|
smtp.tls = {
|
||||||
|
enable = true;
|
||||||
|
useStartTls = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
accounts.email.accounts = {
|
||||||
|
gmail = gmailAccount "willemleitso@gmail.com";
|
||||||
|
leitso = (gmailAccount "willem@leit.so") // { primary = true; };
|
||||||
|
wnuke9 = gmailAccount "wnuke9@gmail.com";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ rec {
|
||||||
};
|
};
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
./accounts.nix
|
||||||
./darwin.nix
|
./darwin.nix
|
||||||
./emacs.nix
|
./emacs.nix
|
||||||
./packages.nix
|
./packages.nix
|
||||||
|
|
118
home/emacs.nix
118
home/emacs.nix
|
@ -201,13 +201,32 @@ in
|
||||||
|
|
||||||
edit-indirect.enable = true;
|
edit-indirect.enable = true;
|
||||||
|
|
||||||
|
edit-server = {
|
||||||
|
enable = true;
|
||||||
|
command = [ "edit-server-start" ];
|
||||||
|
config = ''
|
||||||
|
(setq edit-server-new-frame nil)
|
||||||
|
'';
|
||||||
|
hook = [ "(after-init . edit-server-start)" ];
|
||||||
|
};
|
||||||
|
|
||||||
editorconfig = {
|
editorconfig = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = ''
|
init = ''
|
||||||
(editorconfig-mode 1)
|
(editorconfig-mode 1)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
async = {
|
||||||
|
enable = true;
|
||||||
|
init = ''
|
||||||
|
(require 'smtpmail-async)
|
||||||
|
|
||||||
|
(setq send-mail-function 'async-smtpmail-send-it
|
||||||
|
message-send-mail-function 'async-smtpmail-send-it)
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
flycheck = {
|
flycheck = {
|
||||||
enable = true;
|
enable = true;
|
||||||
hook = [ "(after-init . global-flycheck-mode)" ];
|
hook = [ "(after-init . global-flycheck-mode)" ];
|
||||||
|
@ -457,6 +476,93 @@ in
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mu4e =
|
||||||
|
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}"))
|
||||||
|
''
|
||||||
|
);
|
||||||
|
smtpAccounts = ''
|
||||||
|
'( ${(smtpConfig "leitso")}
|
||||||
|
${(smtpConfig "gmail")}
|
||||||
|
${(smtpConfig "wnuke9")} )
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
after = [ "async" ];
|
||||||
|
package = epkgs: pkgs.mu;
|
||||||
|
demand = true;
|
||||||
|
extraPackages = [ pkgs.gnutls pkgs.mu ];
|
||||||
|
init = ''
|
||||||
|
;-*-emacs-lisp-*-
|
||||||
|
|
||||||
|
(add-to-list 'load-path "${pkgs.mu}/share/emacs/site-lisp/mu4e")
|
||||||
|
|
||||||
|
(require 'mu4e)
|
||||||
|
|
||||||
|
(setq starttls-use-gnutls t
|
||||||
|
message-kill-buffer-on-exit t
|
||||||
|
mail-user-agent 'mu4e-user-agent)
|
||||||
|
|
||||||
|
(set-variable 'read-mail-command 'mu4e)
|
||||||
|
|
||||||
|
(defvar my-mu4e-account-alist ${smtpAccounts} )
|
||||||
|
|
||||||
|
(mapc #'(lambda (var)
|
||||||
|
(set (car var) (cadr var)))
|
||||||
|
(cdr (assoc "leitso" my-mu4e-account-alist)))
|
||||||
|
|
||||||
|
(defun my-mu4e-set-account ()
|
||||||
|
"Set the account for composing a message."
|
||||||
|
(let* ((account
|
||||||
|
(if mu4e-compose-parent-message
|
||||||
|
(let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
|
||||||
|
(string-match "/\\(.*?\\)/" maildir)
|
||||||
|
(match-string 1 maildir))
|
||||||
|
(completing-read (format "Compose with account: (%s) "
|
||||||
|
(mapconcat #'(lambda (var) (car var))
|
||||||
|
my-mu4e-account-alist "/"))
|
||||||
|
(mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
|
||||||
|
nil t nil nil (caar my-mu4e-account-alist))))
|
||||||
|
(account-vars (cdr (assoc account my-mu4e-account-alist))))
|
||||||
|
(if account-vars
|
||||||
|
(mapc #'(lambda (var)
|
||||||
|
(set (car var) (cadr var)))
|
||||||
|
account-vars)
|
||||||
|
(error "No email account found"))))
|
||||||
|
|
||||||
|
(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account)
|
||||||
|
|
||||||
|
'';
|
||||||
|
|
||||||
|
bind = {
|
||||||
|
"C-c C-u" = "my-mu4e-set-account";
|
||||||
|
};
|
||||||
|
|
||||||
|
hook = [ "(mu4e-compose-pre-hook . my-mu4e-set-account)" ];
|
||||||
|
};
|
||||||
|
|
||||||
nix-mode = {
|
nix-mode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
@ -499,7 +605,7 @@ in
|
||||||
ob-python = {
|
ob-python = {
|
||||||
enable = true;
|
enable = true;
|
||||||
after = [ "org" ];
|
after = [ "org" ];
|
||||||
config = ''
|
init = ''
|
||||||
; -*-emacs-lisp-*-
|
; -*-emacs-lisp-*-
|
||||||
(setq org-babel-python-command "${pkgs.python310}/bin/python3.10")
|
(setq org-babel-python-command "${pkgs.python310}/bin/python3.10")
|
||||||
(setq-default python-indent-guess-indent-offset-verbose nil)
|
(setq-default python-indent-guess-indent-offset-verbose nil)
|
||||||
|
@ -779,7 +885,7 @@ in
|
||||||
|
|
||||||
yasnippet = {
|
yasnippet = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = ''
|
init = ''
|
||||||
(setq yas-snippet-dirs '("${config.home.sessionVariables.ORGDIR}/snippets"))
|
(setq yas-snippet-dirs '("${config.home.sessionVariables.ORGDIR}/snippets"))
|
||||||
(yas-global-mode 1)
|
(yas-global-mode 1)
|
||||||
'';
|
'';
|
||||||
|
@ -787,18 +893,16 @@ in
|
||||||
|
|
||||||
yasnippet-snippets = {
|
yasnippet-snippets = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = ''
|
init = ''
|
||||||
(yas-reload-all)
|
(yas-reload-all)
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
arduino-mode = {
|
arduino-mode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = ''
|
|
||||||
(require 'flycheck-arduino)
|
|
||||||
'';
|
|
||||||
hook = [ "(arduino-mode . flycheck-arduino-setup)" ];
|
hook = [ "(arduino-mode . flycheck-arduino-setup)" ];
|
||||||
init = ''
|
init = ''
|
||||||
|
(require 'flycheck-arduino)
|
||||||
(setq arduino-executable "/Applications/Arduino.app/Contents/MacOS/Arduino")
|
(setq arduino-executable "/Applications/Arduino.app/Contents/MacOS/Arduino")
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
|
@ -169,6 +169,17 @@
|
||||||
package = pkgs.jdk;
|
package = pkgs.jdk;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mu.enable = true;
|
||||||
|
|
||||||
|
offlineimap = {
|
||||||
|
enable = true;
|
||||||
|
pythonFile = ''
|
||||||
|
import subprocess
|
||||||
|
def get_pass(service, cmd):
|
||||||
|
return subprocess.check_output(cmd, ).splitlines()[0]
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
starship = {
|
starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableZshIntegration = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue