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(use-package jabber
 35  :init
 36  :load-path "/usr/share/emacs/site-lisp/jabber"
 37  :bind (:map jabber-chat-mode-map
 38              ("RET" . nil)
 39              ("C-c C-c" . #'jabber-chat-buffer-send))
 40  :commands (jabber-connect jabber-connect-all)
 41  :config
 42
 43  (custom-set-faces
 44   '(jabber-activity-face ((t nil))))
 45
 46
 47  (defun jabber-mark-all-read ()
 48    (interactive)
 49    (setq jabber-activity-jids nil)
 50    (jabber-activity-mode-line-update))
 51
 52  (defun my-jabber-activity-show (jid)
 53    (and (not (member jid
 54                      '("#alpine-commits%irc.oftc.net@biboumi.koi.moe")))
 55         (jabber-activity-show-p-default jid)))
 56  (setq jabber-activity-show-p 'my-jabber-activity-show)
 57
 58  (require 'tls)
 59  (setq jabber-history-enabled t
 60        jabber-history-dir "~/orgs/.jabber-history"
 61        jabber-history-muc-enabled t
 62        jabber-muc-nick "lindsay"
 63        jabber-groupchat-buffer-format "jabber[g] - %b"
 64        jabber-chat-buffer-format "jabber[c] - %n"
 65        jabber-browse-buffer-format "jabber[b] - %n"
 66        jabber-muc-private-buffer-format "jabber[p] - %n[%g] "
 67        jabber-auto-reconnect t
 68        ;; jabber-muc-autojoin '("fscc_main@conference.conversations.im")
 69        ;; jabber-default-connection-type 'ssl ;; need gnutls-utils(cmd:gnutls-cli)
 70        jabber-account-list '(("lindsay@xmpp.jp" (:port . 5223) (:connection-type . ssl))
 71                              ("lindsay@conversations.im" (:port . 5222) (:connection-type . starttls))
 72                              ("lin@koi.moe" (:port . 5222) (:connection-type . starttls)))
 73        jabber-muc-decorate-presence-patterns '(("\\( enters the room ([^)]+)\\| has left the chatroom\\)$"))))
 74
 75;; 彩色括号
 76(use-package rainbow-delimiters
 77  :hook (prog-mode . rainbow-delimiters-mode))
 78
 79;; 翻译
 80(use-package gt
 81  :config
 82  (setq gt-default-translator
 83        (gt-translator
 84         :taker (gt-taker
 85                 :langs '(en zh)
 86                 :text 'word
 87                 :prompt t)
 88         :engines (list (gt-bing-engine)
 89                        (gt-google-engine))
 90         :render (gt-buffer-render)))
 91  :bind
 92  (("C-c t" . gt-translate)))
 93;; dired 插件
 94(use-package dired-subtree)
 95(use-package dired
 96  :ensure nil
 97  :init
 98  (require 'dired-x)
 99  (defun dired-view-file-other-window()
100    "In Dired, view file or diretory in other buffer."
101    (interactive)
102    (let ((file (dired-get-file-for-visit)))
103      (if (file-directory-p file)
104	  (or (and (cdr dired-subdir-alist)
105		   (dired-goto-subdir file))
106	      (dired-other-window file))
107        (view-file-other-window file))))
108  :hook
109   (dired-mode . (lambda () (dired-omit-mode)))
110  :config
111   (setq dired-omit-files   ;; hide .dot files when in dired-omit-mode
112      (concat dired-omit-files "\\|^\\..+$"))
113  :bind (:map dired-mode-map
114              ("C->" . dired-omit-mode)
115              ("q" . quit-window)
116              ("TAB" . dired-subtree-toggle)
117              ("V" . dired-view-file-other-window)))
118
119;; 邮件
120;; 收件配置
121(use-package mu4e
122  :ensure nil
123  :pin manual
124  :load-path "/usr/share/emacs/site-lisp/mu4e"
125  :bind (("C-x m" . mu4e-compose-new))
126  :hook (mu4e-compose-mode . (lambda () (auto-save-mode -1)))
127  :commands mu4e
128  :config
129  
130  (add-to-list 'display-buffer-alist
131               `(,(regexp-quote mu4e-main-buffer-name)
132                 display-buffer-same-window))
133  
134  (keymap-unset mu4e-search-minor-mode-map "M-<right>")
135  (keymap-unset mu4e-search-minor-mode-map "M-<left>")
136  (setf (plist-get (alist-get 'trash mu4e-marks) :action)
137      (lambda (docid msg target)
138        (mu4e--server-move docid (mu4e--mark-check-target target) "-N"))) 
139  (require 'mu4e-notification)
140  (setq mu4e-maildir "~/.mail")
141  (setq mu4e-get-mail-command "mbsync -a -c ~/.config/mbsync/config"
142        mu4e-update-interval 300)
143  (setq user-mail-address "i@lin.moe"
144        user-full-name "Linsen Zhou"
145        mu4e-sent-folder "/Sent"
146        mu4e-drafts-folder "/Drafts"
147        mu4e-trash-folder "/Trash"
148        mu4e-refile-folder "/Archive")
149
150  (setq mu4e-headers-thread-root-prefix '("* " . "□ ")
151        mu4e-headers-thread-child-prefix '(" >" . "│ ")
152        mu4e-headers-thread-first-child-prefix '(" >" . "⚬ ")
153        mu4e-headers-thread-last-child-prefix '(" >" . "└ "))
154  (setq mu4e-change-filenames-when-moving t
155        mu4e-search-include-related t)
156
157  (setq mu4e-maildir-shortcuts '(( :name "Inbox"
158                                   :key ?i
159                                   :maildir "/Inbox")
160                                 ( :name "Archive"
161                                   :key ?a
162                                   :maildir "/Archive")
163                                 ( :name "Drafts"
164                                   :key ?d
165                                   :maildir "/Drafts")))
166
167  (setq mu4e-bookmarks '(( :name "Today's messages"
168                           :query "date:today..now AND NOT maildir:/Junk"
169                           :key ?t)
170                         ( :name "Flagged"
171                           :key ?f
172                           :query "flag:flagged")
173
174                         ( :name "Mailing list"
175                           :query "flag:list AND NOT maildir:/Trash AND NOT maildir:/Junk NOT maildir:/Archive AND NOT flag:trashed"
176                           :key ?l)
177
178                         ( :name "Business(Linakesi)"
179                           :key ?k
180                           :favorite t
181                           :query "contact:zhoulinsen@linakesi.com AND NOT maildir:/Trash NOT maildir:/Archive AND NOT flag:trashed")
182
183                         ( :name  "Unread messages"
184                           :query "flag:unread AND NOT maildir:/Trash AND NOT maildir:/Junk AND NOT flag:trashed"
185                           :key ?u))))
186(use-package mu4e-alert
187  :hook (after-init . mu4e-alert-enable-notifications)
188  :config
189  (setq mu4e-alert-interesting-mail-query
190        (concat
191         "flag:unread"
192         " AND NOT flag:trashed"
193         " AND NOT maildir:/Trash"
194         " AND NOT maildir:/Junk")))
195
196;; 发件配置
197(use-package smtpmail
198  :init
199  (add-hook 'message-send-hook 'mml-secure-message-sign-pgpmime)
200  (setq send-mail-function 'smtpmail-send-it
201        user-full-name "Linsen Zhou"
202        user-mail-address "i@lin.moe"
203        smtpmail-smtp-server "smtp.lin.moe"
204        smtpmail-smtp-user "i@lin.moe"
205        smtpmail-stream-type 'ssl
206        smtpmail-smtp-service 465
207        epg-pinentry-mode 'loopback)
208  :config
209  (setq mml-secure-openpgp-sign-with-sender t
210        mml-secure-openpgp-encrypt-to-self t
211        mml-secure-openpgp-signers '("7EB223B9B0D814B9")
212        message-kill-buffer-on-exit 1
213        gnus-agent nil))
214
215(use-package erc
216  :init
217  (defun run-erc ()
218    (interactive)
219    (erc-tls :server "chat.lin.moe"
220             :port 6697
221             :nick "lindsay"
222             :user "lindsay/irc.oftc.net")
223    (erc-tls :server "chat.lin.moe"
224             :port 6697
225             :nick "lindsay"
226             :user "lindsay/irc.libera.chat"))
227
228  :bind (:map erc-mode-map
229              ("RET" . nil)
230              ("C-c C-c" . #'erc-send-current-line))
231  :config
232  (defun erc-mark-all-read ()
233    (interactive)
234    (setq erc-modified-channels-alist nil)
235    (erc-modified-channels-display))
236  (setq erc-server "irc.oftc.net"
237        erc-user-full-name "Linsen Zhou"
238        erc-nick "linsey"
239        erc-autojoin-channels-alist '(("OFTC" "#alpine-zh" "#alpine-commits")))
240  (setq erc-hide-list '("JOIN" "PART" "QUIT")
241        erc-track-exclude-types '("JOIN" "MODE" "NICK" "PART" "QUIT"
242                                  "324" "329" "332" "333" "353" "477")
243        erc-track-exclude '("#alpine-commits" "#alpine-commit@OFTC"))
244  (add-to-list 'erc-modules 'notifications)
245  (add-to-list 'erc-modules 'spelling))
246
247(use-package vterm
248  :config
249  (setq
250   vterm-shell "zsh"
251   vterm-buffer-name-string "<vterm> %s")
252  
253  (advice-add 'vterm--enter-copy-mode :after (lambda () (god-local-mode)))
254  (advice-add 'vterm--exit-copy-mode :after (lambda () (god-local-mode -1)))
255  
256  :bind
257  (:map vterm-mode-map
258        ("C-u" . vterm--self-insert)))
259
260(use-package multi-vterm
261  :init
262  (defun multi-vterm-at (location)
263    (interactive
264     (let* ((default-dir (file-truename default-directory))
265            (args (find-file-read-args "Location: " default-dir)))
266       (list (car args))))
267    (let ((default-directory location)) (multi-vterm)))
268  :bind
269  ("C-c C-<return>" . multi-vterm-at))
270
271
272(use-package flyspell
273  :hook (text-mode . flyspell-mode)
274  :config
275  (setq-default ispell-program-name "aspell"))
276
277(use-package casual
278  :bind (:map dired-mode-map
279              ("C-o" . #'casual-dired-tmenu)
280              ("s" . #'casual-dired-sort-by-tmenu)
281              ("/" . #'casual-dired-search-replace-tmenu)))
282
283(use-package dired-preview
284  :bind (:map dired-mode-map
285              ("M-," . dired-preview-mode)))
286
287(use-package shr-tag-pre-highlight
288  :ensure t
289  :after shr
290  :config
291  (add-to-list 'shr-external-rendering-functions
292               '(pre . shr-tag-pre-highlight)))
293
294(use-package gnus
295  :config
296  (setq
297   user-full-name '"Linsen Zhou"
298   user-mail-address '"i@lin.moe"
299   gnus-startup-file '"~/orgs/.newsrc"
300   gnus-directory "~/.config/emacs/news/"
301   message-directory "~/.config/emacs/mail/"
302   nnfolder-directory "~/.config/emacs/mail/archive"
303   gnus-always-read-dribble-file t
304   gnus-select-method '(nntp "raye.mistivia.com"
305                                (nntp-open-connection-function nntp-open-tls-stream)
306                                (nntp-port-number 563)
307                                (nntp-address "raye.mistivia.com"))))
308
309(use-package empv
310  :bind-keymap ("C-c m" . empv-map))
311
312(provide 'init-apps)
313;;; init-apps.el ends here