1;;; package --- 初始化各种独立应用工具2;;; Commentary:3;;; Code:45;;; 剪切板6(use-package clipetty7 :hook (after-init . global-clipetty-mode))8910;; magit11(use-package magit12 :after git-email13 :hook (magit-mode . git-email-magit-setup)14 :demand t)1516(use-package git-email17 :vc (git-email :url "https://codeberg.org/suhail/git-email.git"18 :branch "default"19 :rev :newest20 :doc "./doc/git-email.texi")21 :init22 (unless (fboundp 'member-if)23 (defalias 'member-if 'cl-member-if))24 (with-eval-after-load 'magit25 (git-email-magit-setup))26 :config27 (setenv "INFOPATH"28 (concat (file-name-directory (find-library-name "git-email"))29 ":" (getenv "INFOPATH")))30 (setq git-email-compose-email-function #'mu4e-compose-new)31 :bind (:map dired-mode-map32 ("M-." . #'git-email-send-email)))3334;; 彩色括号35(use-package rainbow-delimiters36 :hook (prog-mode . rainbow-delimiters-mode))3738;; 翻译39(use-package gt40 :config41 (setq gt-default-translator42 (gt-translator43 :taker (gt-taker44 :langs '(en zh)45 :text 'word46 :prompt t)47 :engines (list (gt-bing-engine)48 (gt-google-engine))49 :render (gt-buffer-render)))50 :bind51 (("C-c t" . gt-translate)))52;; dired 插件53(use-package dired-subtree)54(use-package dired55 :ensure nil56 :init57 (require 'dired-x)58 (defun dired-view-file-other-window()59 "In Dired, view file or diretory in other buffer."60 (interactive)61 (let ((file (dired-get-file-for-visit)))62 (if (file-directory-p file)63 (or (and (cdr dired-subdir-alist)64 (dired-goto-subdir file))65 (dired-other-window file))66 (view-file-other-window file))))67 :hook68 (dired-mode . (lambda () (dired-omit-mode)))69 :config70 (setq dired-omit-files ;; hide .dot files when in dired-omit-mode71 (concat dired-omit-files "\\|^\\..+$"))72 :bind (:map dired-mode-map73 ("C->" . dired-omit-mode)74 ("q" . quit-window)75 ("TAB" . dired-subtree-toggle)76 ("V" . dired-view-file-other-window)))7778;; 邮件79;; 收件配置80(use-package mu4e81 :ensure nil82 :pin manual83 :load-path "/usr/share/emacs/site-lisp/mu4e"84 :bind (("C-x m" . mu4e-compose-new))85 :hook (mu4e-compose-mode . (lambda () (auto-save-mode -1)))86 :commands mu4e87 :config8889 (add-to-list 'display-buffer-alist90 `(,(regexp-quote mu4e-main-buffer-name)91 display-buffer-same-window))9293 (keymap-unset mu4e-search-minor-mode-map "M-<right>")94 (keymap-unset mu4e-search-minor-mode-map "M-<left>")95 (setf (plist-get (alist-get 'trash mu4e-marks) :action)96 (lambda (docid msg target)97 (mu4e--server-move docid (mu4e--mark-check-target target) "-N")))98 (require 'mu4e-notification)99 (setq mu4e-maildir "~/.mail")100 (setq mu4e-get-mail-command "mbsync -a -c ~/.config/mbsync/config"101 mu4e-update-interval 300)102 (setq user-mail-address "i@lin.moe"103 user-full-name "Linsen Zhou"104 mu4e-sent-folder "/Sent"105 mu4e-drafts-folder "/Drafts"106 mu4e-trash-folder "/Trash"107 mu4e-refile-folder "/Archive")108109 (setq mu4e-headers-thread-root-prefix '("* " . "□ ")110 mu4e-headers-thread-child-prefix '(" >" . "│ ")111 mu4e-headers-thread-first-child-prefix '(" >" . "⚬ ")112 mu4e-headers-thread-last-child-prefix '(" >" . "└ "))113 (setq mu4e-change-filenames-when-moving t114 mu4e-search-include-related t)115116 (setq mu4e-maildir-shortcuts '(( :name "Inbox"117 :key ?i118 :maildir "/Inbox")119 ( :name "Archive"120 :key ?a121 :maildir "/Archive")122 ( :name "Drafts"123 :key ?d124 :maildir "/Drafts")))125126 (setq mu4e-bookmarks '(( :name "Today's messages"127 :query "date:today..now AND NOT maildir:/Junk"128 :key ?t)129 ( :name "Flagged"130 :key ?f131 :query "flag:flagged")132133 ( :name "Mailing list"134 :query "flag:list AND NOT maildir:/Trash AND NOT maildir:/Junk NOT maildir:/Archive AND NOT flag:trashed"135 :key ?l)136137 ( :name "Business(Linakesi)"138 :key ?k139 :favorite t140 :query "contact:zhoulinsen@linakesi.com AND NOT maildir:/Trash NOT maildir:/Archive AND NOT flag:trashed")141142 ( :name "Unread messages"143 :query "flag:unread AND NOT maildir:/Trash AND NOT maildir:/Junk AND NOT flag:trashed"144 :key ?u))))145(use-package mu4e-alert146 :hook (after-init . mu4e-alert-enable-notifications)147 :config148 (setq mu4e-alert-interesting-mail-query149 (concat150 "flag:unread"151 " AND NOT flag:trashed"152 " AND NOT maildir:/Trash"153 " AND NOT maildir:/Junk")))154155;; 发件配置156(use-package smtpmail157 :init158 (add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)159 (setq send-mail-function 'smtpmail-send-it160 user-full-name "Linsen Zhou"161 user-mail-address "i@lin.moe"162 smtpmail-smtp-server "smtp.lin.moe"163 smtpmail-smtp-user "i@lin.moe"164 smtpmail-stream-type 'ssl165 smtpmail-smtp-service 465166 epg-pinentry-mode 'loopback)167 :config168 (setq mml-secure-openpgp-sign-with-sender t169 mml-secure-openpgp-encrypt-to-self t170 mml-secure-openpgp-signers '("7EB223B9B0D814B9")171 message-kill-buffer-on-exit 1172 gnus-agent nil))173174(use-package erc175 :init176 (defun run-erc ()177 (interactive)178 (erc-tls :server "chat.lin.moe"179 :port 6697180 :nick "lindsay"181 :user "lindsay/irc.oftc.net")182 (erc-tls :server "chat.lin.moe"183 :port 6697184 :nick "lindsay"185 :user "lindsay/irc.libera.chat"))186187 :bind (:map erc-mode-map188 ("RET" . nil)189 ("C-c C-c" . #'erc-send-current-line))190 :config191 (defun erc-mark-all-read ()192 (interactive)193 (setq erc-modified-channels-alist nil)194 (erc-modified-channels-display))195 (setq erc-server "irc.oftc.net"196 erc-user-full-name "Linsen Zhou"197 erc-nick "linsey"198 erc-autojoin-channels-alist '(("OFTC" "#alpine-zh" "#alpine-commits")))199 (setq erc-hide-list '("JOIN" "PART" "QUIT")200 erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT"201 "324" "329" "332" "333" "353" "477")202 erc-track-exclude '("#alpine-commits" "#alpine-commit@OFTC"))203 (add-to-list 'erc-modules 'notifications)204 (add-to-list 'erc-modules 'spelling))205206(use-package vterm207 :config208 (setq209 vterm-shell "zsh"210 vterm-buffer-name-string "<vterm> %s")211212 (advice-add 'vterm--enter-copy-mode :after (lambda () (god-local-mode)))213 (advice-add 'vterm--exit-copy-mode :after (lambda () (god-local-mode -1)))214215 :bind216 (:map vterm-mode-map217 ("C-u" . vterm--self-insert)))218219(use-package multi-vterm220 :init221 (defun multi-vterm-at (location)222 (interactive223 (let* ((default-dir (file-truename default-directory))224 (args (find-file-read-args "Location: " default-dir)))225 (list (car args))))226 (let ((default-directory location)) (multi-vterm)))227 :bind228 ("C-c C-<return>" . multi-vterm-at))229230231(use-package flyspell232 :hook (text-mode . flyspell-mode)233 :config234 (setq-default ispell-program-name "aspell"))235236(use-package casual237 :bind (:map dired-mode-map238 ("C-o" . #'casual-dired-tmenu)239 ("s" . #'casual-dired-sort-by-tmenu)240 ("/" . #'casual-dired-search-replace-tmenu)))241242(use-package dired-preview243 :bind (:map dired-mode-map244 ("M-," . dired-preview-mode)))245246(use-package shr-tag-pre-highlight247 :ensure t248 :after shr249 :config250 (add-to-list 'shr-external-rendering-functions251 '(pre . shr-tag-pre-highlight)))252253(use-package gnus254 :config255 (setq256 user-full-name '"Linsen Zhou"257 user-mail-address '"i@lin.moe"258 gnus-startup-file '"~/orgs/.newsrc"259 gnus-directory "~/.config/emacs/news/"260 message-directory "~/.config/emacs/mail/"261 nnfolder-directory "~/.config/emacs/mail/archive"262 gnus-always-read-dribble-file t263 gnus-select-method '(nntp "raye.mistivia.com"264 (nntp-open-connection-function nntp-open-tls-stream)265 (nntp-port-number 563)266 (nntp-address "raye.mistivia.com"))))267(use-package elfeed268 :config269 (setq elfeed-db-directory (concat (file-name-as-directory my-orgbase) ".elfeed")))270271272(use-package elfeed-org273 :after elfeed274 :init275 (elfeed-org)276 :config277 (setq rmh-elfeed-org-files (list my-orginbox)))278279280(use-package empv281 :bind-keymap ("C-c m" . empv-map))282283(provide 'init-apps)284;;; init-apps.el ends here