diff --git a/.mbsyncrc b/.mbsyncrc new file mode 100644 index 0000000..32ade29 --- /dev/null +++ b/.mbsyncrc @@ -0,0 +1,24 @@ +IMAPAccount personal +Host mailu.apps.sukany.cz +User martin@sukany.cz +Pass treasure-Hunter +TLSType IMAPS +Port 993 + +IMAPStore personal-remote +Account personal + +MaildirStore personal-local +SubFolders Verbatim +Path ~/.mail/personal/ +Inbox ~/.mail/personal/INBOX + +Channel personal +Far :personal-remote: +Near :personal-local: +Patterns * +Create Near +SyncState * +Expunge Both +Sync All + diff --git a/.msmtprc b/.msmtprc new file mode 100644 index 0000000..5c5c202 --- /dev/null +++ b/.msmtprc @@ -0,0 +1,15 @@ +defaults +auth on +tls on +tls_starttls off +logfile ~/.msmtp.log + +account personal +host mailu.apps.sukany.cz +port 465 +from martin@sukany.cz +user martin@sukany.cz +password treasure-Hunter + +account default : personal + diff --git a/README b/README new file mode 100644 index 0000000..2d8a506 --- /dev/null +++ b/README @@ -0,0 +1,8 @@ +# instalace mailu: +brew install mu isync msmtp + +pak mbsync personal (musi existovat .mbsyncrc) + +pak +mu init --maildir=~/.mail --my-address=martin@sukany.cz +mu index diff --git a/config.el b/config.el index 2d6600e..5bafc37 100644 --- a/config.el +++ b/config.el @@ -69,6 +69,7 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))." ;; -------------------------------------------------- ;; Org ;; -------------------------------------------------- + (setq org-directory "~/org/") (after! org @@ -402,3 +403,143 @@ Funguje v libovolném textu, včetně Markdown linků (např. [x](./...))." (when (executable-find "fd") (setq projectile-generic-command "fd . -0 --type f --hidden --follow --exclude .git --color=never"))) + +;; mu4e +(add-to-list 'load-path (expand-file-name "/opt/homebrew/opt/mu/share/emacs/site-lisp/mu/mu4e")) +(after! mu4e + (setq mu4e-maildir "~/.mail" + mu4e-get-mail-command "mbsync personal" + mu4e-update-interval 300 + mu4e-change-filenames-when-moving t + mu4e-view-show-images t)) +(after! mu4e + (setq mu4e-maildir (expand-file-name "~/.mail") + mu4e-get-mail-command "mbsync personal" + mu4e-update-interval 300 + mu4e-change-filenames-when-moving t + mu4e-view-show-images t + + ;; TADY je to důležité: + mu4e-sent-folder "/personal/Sent" + mu4e-drafts-folder "/personal/Drafts" + mu4e-trash-folder "/personal/Trash" + mu4e-refile-folder "/personal/Archive")) +(after! mu4e + (setq sendmail-program "msmtp" + message-send-mail-function #'message-send-mail-with-sendmail + mail-specify-envelope-from t + message-sendmail-envelope-from 'header)) + +(setq user-mail-address "martin@sukany.cz" + user-full-name "Martin Sukany") + +(map! :map mu4e-view-mode-map + :localleader + "l l" #'org-store-link + "l i" #'org-insert-link) + +(map! :map mu4e-headers-mode-map + :localleader + "l l" #'org-store-link + "l i" #'org-insert-link) + + + +;;; ================================ +;;; Emacspeak robust ON/OFF for Doom +;;; Default: OFF (won't auto-restart) +;;; Keys: +;;; SPC t s -> Speech ON +;;; SPC t S -> Speech OFF +;;; ================================ + +(defconst my/emacspeak-dir (expand-file-name "~/.emacspeak")) +(defconst my/emacspeak-wrapper (expand-file-name "~/.local/bin/emacspeak-mac")) + +;; Emacspeak uses this to start the speech server. +(setq dtk-program my/emacspeak-wrapper) + +;; State flags +(defvar my/emacspeak-loaded nil) +(defvar my/emacspeak-enabled nil) + +;; Hard inhibit: when non-nil, Emacspeak is NOT allowed to start/restart the server. +(defvar my/emacspeak-inhibit-server t) + +(defun my/emacspeak--ensure-loaded () + "Load Emacspeak once, safely, without breaking Doom startup." + (unless my/emacspeak-loaded + (setq my/emacspeak-loaded t) + (setq emacspeak-directory my/emacspeak-dir) + ;; Load late-ish (but still inside the command that enables it) + (load-file (expand-file-name "lisp/emacspeak-setup.el" emacspeak-directory)) + + ;; After Emacspeak is present, install inhibition advices. + ;; These prevent the common 'it restarts by itself' problem. + (with-eval-after-load 'dtk-speak + (dolist (fn '(dtk-initialize dtk-start-process dtk-speak)) + (when (fboundp fn) + (advice-add + fn :around + (lambda (orig &rest args) + (if my/emacspeak-inhibit-server + ;; OFF mode: do nothing (and crucially: don't restart speaker) + nil + (apply orig args))))))))) + +(defun my/emacspeak-on () + "Enable speech (and allow server start)." + (interactive) + (setq my/emacspeak-inhibit-server nil) + (my/emacspeak--ensure-loaded) + (setq my/emacspeak-enabled t) + (when (fboundp 'dtk-restart) + (ignore-errors (dtk-restart))) + (when (fboundp 'dtk-speak) + (ignore-errors (dtk-speak "Emacspeak on."))) + (message "Emacspeak ON")) + +(defun my/emacspeak-off () + "Disable speech robustly (stop + prevent auto-restart)." + (interactive) + ;; First: inhibit any future attempts to start/restart. + (setq my/emacspeak-enabled nil) + (setq my/emacspeak-inhibit-server t) + + ;; Stop current speech if any. + (when (fboundp 'dtk-stop) + (ignore-errors (dtk-stop))) + + ;; Kill the server process hard (if it exists). + (when (boundp 'dtk-speaker-process) + (let ((p dtk-speaker-process)) + (when (processp p) + (ignore-errors (set-process-sentinel p nil)) + (ignore-errors (delete-process p)))) + (setq dtk-speaker-process nil)) + + (message "Emacspeak OFF (server restart inhibited)")) + +;; Doom leader keys +(map! :leader + (:prefix ("t" . "toggle") + :desc "Speech ON" "s" #'my/emacspeak-on + :desc "Speech OFF" "S" #'my/emacspeak-off)) +(setq dtk-speech-rate 300) + + +;; emacspeak additional settings +;;(setq emacspeak-speak-messages nil) +;;(setq emacspeak-audio-indentation nil) +(setq emacspeak-speak-echo nil) +(setq emacspeak-character-echo nil) +;;(setq emacspeak-word-echo nil) +(setq emacspeak-line-echo t) +;;(setq emacspeak-speak-messages nil) +(global-set-key (kbd "C-c SPC") #'emacspeak-speak-buffer) +(add-hook 'transient-post-exit-hook #'ignore) + +(advice-add 'transient--show :after + (lambda (&rest _) + (dtk-speak (buffer-string)))) + diff --git a/custom.el b/custom.el new file mode 100644 index 0000000..acc4918 --- /dev/null +++ b/custom.el @@ -0,0 +1,14 @@ +;;; -*- lexical-binding: t -*- +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(smtpmail-smtp-server "mailu.apps.sukany.cz") + '(smtpmail-smtp-service 465)) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) diff --git a/init.el b/init.el index 68a6d2b..23358af 100644 --- a/init.el +++ b/init.el @@ -52,6 +52,9 @@ tmux upload + :email + mu4e + :os (:if (featurep :system 'macos) macos)