dotfiles

Alpine Linux dotfiles

git clone git://git.lin.moe/dotfiles.git

  1;;; package --- 初始化各种独立应用工具
  2;;; Commentary:
  3;;; Code:
  4
  5;;; 剪切板
  6(use-package clipetty
  7  :hook (after-init . global-clipetty-mode))
  8
  9
 10;; magit
 11(use-package magit
 12  :after git-email
 13  :hook (magit-mode . git-email-magit-setup)
 14  :demand t)
 15
 16(use-package git-email
 17  :vc (git-email :url "https://codeberg.org/suhail/git-email.git"
 18                 :branch "default"
 19                 :rev :newest
 20                 :doc "./doc/git-email.texi")
 21  :init
 22  (unless (fboundp 'member-if)
 23    (defalias 'member-if 'cl-member-if))
 24  (with-eval-after-load 'magit
 25    (git-email-magit-setup))
 26  :config
 27  (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-map
 32              ("M-." . #'git-email-send-email)))
 33
 34;; 彩色括号
 35(use-package rainbow-delimiters
 36  :hook (prog-mode . rainbow-delimiters-mode))
 37
 38;; 翻译
 39(use-package gt
 40  :config
 41  (setq gt-default-translator
 42        (gt-translator
 43         :taker (gt-taker
 44                 :langs '(en zh)
 45                 :text 'word
 46                 :prompt t)
 47         :engines (list (gt-bing-engine)
 48                        (gt-google-engine))
 49         :render (gt-buffer-render)))
 50  :bind
 51  (("C-c t" . gt-translate)))
 52;; dired 插件
 53(use-package dired-subtree)
 54(use-package dired
 55  :ensure nil
 56  :init
 57  (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  :hook
 68   (dired-mode . (lambda () (dired-omit-mode)))
 69  :config
 70   (setq dired-omit-files   ;; hide .dot files when in dired-omit-mode
 71      (concat dired-omit-files "\\|^\\..+$"))
 72  :bind (:map dired-mode-map
 73              ("C->" . dired-omit-mode)
 74              ("q" . quit-window)
 75              ("TAB" . dired-subtree-toggle)
 76              ("V" . dired-view-file-other-window)))
 77
 78;; 邮件
 79;; 收件配置
 80(use-package mu4e
 81  :ensure nil
 82  :pin manual
 83  :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 mu4e
 87  :config
 88  
 89  (add-to-list 'display-buffer-alist
 90               `(,(regexp-quote mu4e-main-buffer-name)
 91                 display-buffer-same-window))
 92  
 93  (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")
108
109  (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 t
114        mu4e-search-include-related t)
115
116  (setq mu4e-maildir-shortcuts '(( :name "Inbox"
117                                   :key ?i
118                                   :maildir "/Inbox")
119                                 ( :name "Archive"
120                                   :key ?a
121                                   :maildir "/Archive")
122                                 ( :name "Drafts"
123                                   :key ?d
124                                   :maildir "/Drafts")))
125
126  (setq mu4e-bookmarks '(( :name "Today's messages"
127                           :query "date:today..now AND NOT maildir:/Junk"
128                           :key ?t)
129                         ( :name "Flagged"
130                           :key ?f
131                           :query "flag:flagged")
132
133                         ( :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)
136
137                         ( :name "Business(Linakesi)"
138                           :key ?k
139                           :favorite t
140                           :query "contact:zhoulinsen@linakesi.com AND NOT maildir:/Trash NOT maildir:/Archive AND NOT flag:trashed")
141
142                         ( :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-alert
146  :hook (after-init . mu4e-alert-enable-notifications)
147  :config
148  (setq mu4e-alert-interesting-mail-query
149        (concat
150         "flag:unread"
151         " AND NOT flag:trashed"
152         " AND NOT maildir:/Trash"
153         " AND NOT maildir:/Junk")))
154
155;; 发件配置
156(use-package smtpmail
157  :init
158  (add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)
159  (setq send-mail-function 'smtpmail-send-it
160        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 'ssl
165        smtpmail-smtp-service 465
166        epg-pinentry-mode 'loopback)
167  :config
168  (setq mml-secure-openpgp-sign-with-sender t
169        mml-secure-openpgp-encrypt-to-self t
170        mml-secure-openpgp-signers '("7EB223B9B0D814B9")
171        message-kill-buffer-on-exit 1
172        gnus-agent nil))
173
174(use-package erc
175  :init
176  (defun run-erc ()
177    (interactive)
178    (erc-tls :server "chat.lin.moe"
179             :port 6697
180             :nick "lindsay"
181             :user "lindsay/irc.oftc.net")
182    (erc-tls :server "chat.lin.moe"
183             :port 6697
184             :nick "lindsay"
185             :user "lindsay/irc.libera.chat"))
186
187  :bind (:map erc-mode-map
188              ("RET" . nil)
189              ("C-c C-c" . #'erc-send-current-line))
190  :config
191  (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))
205
206(use-package vterm
207  :config
208  (setq
209   vterm-shell "zsh"
210   vterm-buffer-name-string "<vterm> %s")
211  
212  (advice-add 'vterm--enter-copy-mode :after (lambda () (god-local-mode)))
213  (advice-add 'vterm--exit-copy-mode :after (lambda () (god-local-mode -1)))
214  
215  :bind
216  (:map vterm-mode-map
217        ("C-u" . vterm--self-insert)))
218
219(use-package multi-vterm
220  :init
221  (defun multi-vterm-at (location)
222    (interactive
223     (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  :bind
228  ("C-c C-<return>" . multi-vterm-at))
229
230
231(use-package flyspell
232  :hook (text-mode . flyspell-mode)
233  :config
234  (setq-default ispell-program-name "aspell"))
235
236(use-package casual
237  :bind (:map dired-mode-map
238              ("C-o" . #'casual-dired-tmenu)
239              ("s" . #'casual-dired-sort-by-tmenu)
240              ("/" . #'casual-dired-search-replace-tmenu)))
241
242(use-package dired-preview
243  :bind (:map dired-mode-map
244              ("M-," . dired-preview-mode)))
245
246(use-package shr-tag-pre-highlight
247  :ensure t
248  :after shr
249  :config
250  (add-to-list 'shr-external-rendering-functions
251               '(pre . shr-tag-pre-highlight)))
252
253(use-package gnus
254  :config
255  (setq
256   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 t
263   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 elfeed
268  :config
269  (setq elfeed-db-directory (concat (file-name-as-directory my-orgbase) ".elfeed")))
270
271
272(use-package elfeed-org
273  :after elfeed
274  :init
275  (elfeed-org)
276  :config
277  (setq rmh-elfeed-org-files (list my-orginbox)))
278
279
280(use-package empv
281  :bind-keymap ("C-c m" . empv-map))
282
283(provide 'init-apps)
284;;; init-apps.el ends here