aboutsummaryrefslogtreecommitdiffstats
path: root/config.el
diff options
context:
space:
mode:
Diffstat (limited to 'config.el')
-rw-r--r--config.el370
1 files changed, 188 insertions, 182 deletions
diff --git a/config.el b/config.el
index ed48203..94e3089 100644
--- a/config.el
+++ b/config.el
@@ -1,31 +1,41 @@
;; -*- lexical-binding: t; -*-
-(use-package evil
- :init
- (setq evil-want-keybinding nil
- evil-want-C-u-scroll t)
- :config
- (evil-mode)
- :ensure t)
-(use-package evil-collection
- :after evil
- :ensure t
- :config
- (evil-collection-init))
+(setq user-full-name "Verdant"
+ user-mail-address "im@verdant.ee")
-(use-package olivetti)
+(require 'package)
+(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
+(add-to-list 'package-archives '("gnu" . "https://elpa.gnu.org/packages/") t)
+(add-to-list 'package-archives '("melpa" . "https://mirrors.ustc.edu.cn/elpa/melpa/") t)
+(add-to-list 'package-archives '("nongnu" . "https://mirrors.ustc.edu.cn/elpa/nongnu/") t)
+
+(add-hook 'c-mode-hook
+ (lambda ()
+ (add-hook 'before-save-hook #'clang-format-buffer nil t)))
+
+(electric-pair-mode)
(use-package yasnippet
:ensure t
:config
+ (setq yas-snippet-dirs
+ '("~/.emacs.d/snippets"))
+
(yas-global-mode 1))
+(global-set-key (kbd "C-c c") 'compile)
+
+(use-package gdscript-mode
+ :ensure t
+ :hook (gdscript-mode . eglot-ensure))
+
(use-package ivy
:ensure t
:init
(ivy-mode 1)
(counsel-mode 1)
:config
+ (global-set-key (kbd "C-x r g") nil)
(setq ivy-use-selectable-prompt t)
(setq ivy-use-preview t)
(setq ivy-fixed-height-minibuffer t)
@@ -43,14 +53,10 @@
("C-c V" . 'ivy-pop-view)
("C-x C-@" . 'counsel-mark-ring); 在某些终端上 C-x C-SPC 会被映射为 C-x C-@,比如在 macOS 上,所以要手动设置
("C-x C-SPC" . 'counsel-mark-ring)
+ ("C-x r g" . 'counsel-rg)
:map minibuffer-local-map
("C-r" . counsel-minibuffer-history)))
-;; (use-package ivy-posframe
-;; :ensure t
-;; :config
-;; (ivy-posframe-mode t))
-
(use-package ivy-rich
:ensure t
:config
@@ -101,28 +107,52 @@
:config
(setq clang-format-executable (executable-find "clang-format")))
-(use-package sis
- :config
- (sis-ism-lazyman-config "1" "2" 'fcitx5)
- (sis-global-cursor-color-mode t)
- ;; 启用 /respect/ 模式
- (sis-global-respect-mode t)
- ;; 为所有缓冲区启用 /context/ 模式
- (sis-global-context-mode t)
- ;; 为所有缓冲区启用 /inline english/ 模式
- (sis-global-inline-mode t)
- (with-eval-after-load 'evil
- ;; 强制在进入插入模式时触发 sis 的恢复逻辑
- ;;(add-hook 'evil-insert-state-entry-hook #'sis-context-restore)
- ; (add-hook 'evil-insert-state-entry-hook #'sis-set-chinese))
- ))
+(global-flycheck-mode)
-(require 'smtpmail)
+(setq dired-recursive-copies 'always)
+(setq dired-recursive-deletes 'always)
+(setq dired-dwim-target t)
-(add-to-list 'load-path "/usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14")
+(put 'dired-find-alternate-file 'disabled nil)
+(with-eval-after-load 'dired
+ (define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file)
+ (define-key dired-mode-map (kbd "^") (lambda () (interactive) (find-alternate-file ".."))))
-(setq gnutls-algorithm-priority "NORMAL:%COMPAT")
+(defun dired-sort-size () (interactive) (dired-sort-other (concat dired-listing-switches "S")))
+(defun dired-sort-extension () (interactive) (dired-sort-other (concat dired-listing-switches "X")))
+(defun dired-sort-ctime () (interactive) (dired-sort-other (concat dired-listing-switches "ct")))
+(defun dired-sort-utime () (interactive) (dired-sort-other (concat dired-listing-switches "ut")))
+(defun dired-sort-time () (interactive) (dired-sort-other (concat dired-listing-switches "t")))
+(defun dired-sort-name () (interactive) (dired-sort-other (concat dired-listing-switches "")))
+(add-hook 'dired-mode-hook
+ (lambda ()
+ (define-key dired-mode-map (kbd "C-b") nil)
+ (define-key dired-mode-map (kbd "C-f") nil)
+ (define-key dired-mode-map (kbd "C-b") #'dired-up-directory)
+ (define-key dired-mode-map (kbd "C-f") #'dired-find-file)))
+
+(global-auto-revert-mode t)
+
+;; https://kuanyui.github.io/2014/06/21/dired-tutorial-and-essential-configs/
+ (defun dired-directory-sort ()
+ "Dired sort hook to list directories first."
+ (save-excursion
+ (let (buffer-read-only)
+ (forward-line 2) ;; beyond dir. header
+ (sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max))))
+ (and (featurep 'xemacs)
+ (fboundp 'dired-insert-set-properties)
+ (dired-insert-set-properties (point-min) (point-max)))
+ (set-buffer-modified-p nil))
+
+(add-hook 'dired-after-readin-hook 'dired-directory-sort)
+
+(setq dired-listing-switches "-alh")
+
+(require 'smtpmail)
+(add-to-list 'load-path "/usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14")
+(setq gnutls-algorithm-priority "NORMAL:%COMPAT")
(defun mu4e-goodies~break-cjk-word (word)
"Break CJK word into list of bi-grams like: 我爱你 -> 我爱 爱你"
(if (or (<= (length word) 2)
@@ -182,9 +212,7 @@
(mu4e-hide-index-messages t)
:init
- (setq user-mail-address "im@verdant.ee"
- user-full-name "Verdant"
- mu4e-debug t)
+ (setq mu4e-debug t)
(setq message-send-mail-function 'sendmail-send-it
sendmail-program "/usr/bin/msmtp"
@@ -208,12 +236,24 @@
:name "Verdant"
:match-func (lambda (msg)
(when msg
- (string-prefix-p "/ljc" (mu4e-message-field msg :maildir))))
+ (string-prefix-p "/verdant" (mu4e-message-field msg :maildir))))
:vars '((mu4e-sent-folder . "/Verdant/Sent")
(mu4e-trash-folder . "/Verdant/Trash")
(mu4e-refile-folder . "/Verdant/Archive")
(mu4e-drafts-folder . "/Verdant/Drafts")
- (user-mail-address . "im@verdant.ee")))))
+ (user-mail-address . "im@verdant.ee")))
+
+ (make-mu4e-context
+ :name "Outlook"
+ :match-func (lambda (msg)
+ (when msg
+ (string-prefix-p "/outlook" (mu4e-message-field msg :maildir))))
+ :vars '((mu4e-sent-folder . "/Outlook/Sent")
+ (mu4e-trash-folder . "/Outlook/Trash")
+ (mu4e-refile-folder . "/Outlook/Archive")
+ (mu4e-drafts-folder . "/Outlook/Drafts")
+ (user-mail-address . "verdant.im@outlook.com")
+ (user-full-name . "Verdant")))))
(setq mu4e-compose-complete-only-personal t
mu4e-view-show-addresses t
@@ -272,33 +312,27 @@
:bind
(("C-x o" . ace-window)))
-(use-package dashboard
- :ensure t
- :config
- (setq dashboard-startup-banner 'logo
- dashboard-banner-logo-title "Welcome to Verdant's Emacverse!!!"
- dashboard-center-content t
- dashboard-set-heading-icons t
- dashboard-items '((recents . 10)
- (bookmarks . 5))
- dashboard-footer-messages '("verdant.el"))
-
- ;; 核心三件套
- (setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
- (dashboard-setup-startup-hook)
- (add-hook 'after-init-hook #'dashboard-open t))
+(add-hook 'after-init-hook
+ (lambda ()
+ (setq inhibit-startup-screen t)
+ (setq initial-buffer-choice "~")))
(setq custom-safe-themes t)
-(load-theme 'doom-Iosvkem)
-
-(set-face-attribute
- 'default nil
- :height 120)
+(when (display-graphic-p)
+ ;(load-theme 'ef-dark)
+ (load-theme 'doom-Iosvkem)
+ )
-(setq window-combination-resize t)
+(setq default-frame-alist '((alpha-background . 100)))
(setq x-stretch-cursor t)
+(set-fontset-font t 'han (font-spec :family "Noto Sans CJK SC"))
+(set-fontset-font t 'cjk-misc (font-spec :family "Noto Sans CJK SC"))
+(set-fontset-font t 'bopomofo (font-spec :family "Noto Sans CJK SC"))
+
+(set-frame-font (font-spec :family "FiraMono Nerd Font Mono" :size 18))
+
(setq scheme-program-name "mit-scheme")
(require 'cmuscheme)
@@ -310,152 +344,124 @@
(add-to-list 'auto-mode-alist '("\\.scm\\'" . scheme-mode))
+(use-package olivetti)
(defun setup-markdown-writing-environment ()
"为 Markdown 写作优化的环境:开启 Olivetti,关闭行号。"
(interactive)
- (variable-pitch-mode 1)
- (display-line-numbers-mode -1)
- (pixel-scroll-precision-mode 1)
- (olivetti-mode))
+ (olivetti-mode)
+
+ (display-line-numbers-mode -1)
+ )
(add-hook 'markdown-mode-hook
(lambda ()
- ;; 取消 Evil 的 TAB 绑定,使用 markdown-cycle
- (define-key evil-normal-state-local-map (kbd "TAB") 'markdown-cycle)
- (define-key evil-insert-state-local-map (kbd "TAB") 'indent-for-tab-command)))
+ (setup-markdown-writing-environment)))
-(setq dired-recursive-copies 'always)
-(setq dired-recursive-deletes 'always)
-(setq dired-dwim-target t)
+(setq org-agenda-files '("~/org/"))
+(global-set-key (kbd "C-c a") 'org-agenda)
-(put 'dired-find-alternate-file 'disabled nil)
-(with-eval-after-load 'dired
- (define-key dired-mode-map (kbd "RET") 'dired-find-alternate-file)
- (define-key dired-mode-map (kbd "^") (lambda () (interactive) (find-alternate-file "..")))) ; was dired-up-directory)
+(defun my-org-mode-setup ()
+ (setq left-margin-width 1)
+ (setq right-margin-width 2)
+ (org-restart-font-lock)
+ (font-lock-mode 1))
-(setq dired-dwim-target t)
+(add-hook 'org-mode-hook 'my-org-mode-setup)
-;; dired-sort
-(defun dired-sort-size ()
- "Dired sort by size."
- (interactive)
- (dired-sort-other (concat dired-listing-switches "S")))
+(setq org-startup-indented t
+ org-ellipsis "  "
+ org-pretty-entities t
+ org-hide-emphasis-markers nil
+ org-src-fontify-natively t
+ org-src-tab-acts-natively t
+ org-agenda-block-separator ""
+ org-fontify-whole-heading-line t
+ org-fontify-done-headline t
+ org-fontify-quote-and-verse-blocks t)
-(defun dired-sort-extension ()
- "Dired sort by extension."
- (interactive)
- (dired-sort-other (concat dired-listing-switches "X")))
+(use-package ox-reveal
+ :ensure t
+ :config
+ (global-set-key [(f12)] 'org-reveal-export-to-html-and-browse)
+ (reveal-mode 1))
+(setq org-reveal-root "https://cdn.jsdelivr.net/npm/reveal.js@4.5.0")
+
+(use-package org-noter
+:ensure t
+:config
+(setq org-noter-notes-search-path '("~/org/wiki/")))
+
+(use-package pdf-tools
+ :ensure t
+ :config
+ (pdf-tools-install)
+ (add-hook 'pdf-view-mode-hook (lambda () (display-line-numbers-mode -1)))
+ (add-hook 'pdf-view-mode-hook 'pdf-tools-enable-minor-modes)
+ (setq org-noter-always-create-frame nil)
+ (setq org-noter-window-layout 'horizontal-split) ; 强制在当前屏幕左右水平分屏
+)
-(defun dired-sort-ctime ()
- "Dired sort by create time."
+(defun my/keyboard-escape-quit()
+ "快速的 Esc 退出 minibuffer"
(interactive)
- (dired-sort-other (concat dired-listing-switches "ct")))
+ (keyboard-escape-quit))
-(defun dired-sort-utime ()
- "Dired sort by access time."
- (interactive)
- (dired-sort-other (concat dired-listing-switches "ut")))
+(global-set-key (kbd "<escape>") #'my/keyboard-escape-quit)
-(defun dired-sort-time ()
- "Dired sort by time."
- (interactive)
- (dired-sort-other (concat dired-listing-switches "t")))
+(auto-save-mode 1) (setq ring-bell-function 'ignore custom-safe-themes
+ t cursor-type 'box fringes-outside-margins t display-time-24hr-format
+ t display-time-day-and-date t display-time-interval 60
+ display-time-format "%a %b %-e %H:%M" scroll-step 1
+ scroll-conservatively 10000)
-(defun dired-sort-name ()
- "Dired sort by name."
- (interactive)
- (dired-sort-other (concat dired-listing-switches "")))
-;; 在 Dired 中,按`l`进入文件,按`h`回到上一级目录
-(add-hook 'evil-mode-hook (lambda ()
- (with-eval-after-load 'dired
- (add-hook 'dired-mode-hook
- (lambda ()
- (define-key evil-normal-state-local-map (kbd "h") nil)
- (define-key evil-normal-state-local-map (kbd "l") nil)
- (define-key evil-normal-state-local-map (kbd "h") #'dired-up-directory)
- (define-key evil-normal-state-local-map (kbd "l") #'dired-find-file))))))
+(when (display-graphic-p) (set-frame-size (selected-frame) 143 40))
-(add-hook 'dired-mode-hook
- (lambda ()
- (define-key dired-mode-map (kbd "C-b") nil)
- (define-key dired-mode-map (kbd "C-f") nil)
- (define-key dired-mode-map (kbd "C-b") #'dired-up-directory)
- (define-key dired-mode-map (kbd "C-f") #'dired-find-file)))
+;; (if (fboundp 'global-display-line-numbers-mode)
+;; (global-display-line-numbers-mode -1) (setq
+;; display-line-numbers-type nil))
-(global-set-key (kbd "<escape>") #'my/keyboard-escape-quit)
+;; (display-time-mode 1)
+(global-display-line-numbers-mode)
-(global-auto-revert-mode t) ; 另一程序修改文件让 Emacs 及时刷新 Buffer
+(setq-default delete-by-moving-to-trash t)
-(use-package org-bullets
- :ensure t
- :config
- (setq org-bullets-bullet-list '("☰" "☷" "☯" "☭")))
-(org-bullets-mode)
+(show-paren-mode 1)
-(lambda () (progn
- (setq left-margin-width 2)
- (setq right-margin-width 2)
- (set-window-buffer nil (current-buffer))))
+(setq c-basic-offset 4 tab-width 4)
-(setq org-startup-indented t
- org-ellipsis "  " ;; folding symbol
- org-pretty-entities t
- org-hide-emphasis-markers t
- ;; show actually italicized text instead of /italicized text/
- org-agenda-block-separator ""
- org-fontify-whole-heading-line t
- org-fontify-done-headline t
- org-fontify-quote-and-verse-blocks t)
+(use-package counsel :ensure t)
-(auto-save-mode 1)
-
-(setq ring-bell-function 'ignore
- custom-safe-themes t ; 禁用非法操作提示
- cursor-type 'box
- fringes-outside-margins t
- display-time-24hr-format t ; 时间使用 24 小时制
- display-time-day-and-date t ; 时间显示包括日期和时间
- display-time-interval 60 ; 刷新频率
- display-time-format "%a %b %-e %H:%M" ; 时间格式
- scroll-step 1
- scroll-conservatively 10000)
-(when (display-graphic-p)
- (set-frame-size (selected-frame) 143 40))
-(global-display-line-numbers-mode t)
-(display-time-mode 1)
-
-(setq confirm-kill-emacs #'yes-or-no-p ; 关闭 Emacs 时询问 y or n
- auto-save-visited-interval 5
- native-comp-async-report-warinings-errors nil
- backup-directory-alist `((".*" . ,temporary-file-directory))
- auto-save-file-name-transforms `((".*" ,temporary-file-directory t))
- select-enable-clipboard t
- select-enable-primary t
- interprogram-cut-function
- (lambda (text &optional push)
- (let ((process-connection-type nil))
- (let ((proc (start-process "xclip" nil "xclip" "-selection" "clipboard")))
- (process-send-string proc text)
- (process-send-eof proc))))
- interprogram-paste-function
- (lambda ()
- (shell-command-to-string "xclip -o -selection clipboard")))
-
-(setq-default delete-by-moving-to-transh t)
+(setopt use-short-answers t)
-(defun my/keyboard-escape-quit()
- "快速的 Esc 退出 minibuffer"
- (interactive)
- (keyboard-escape-quit))
+(repeat-mode 1)
+(setopt repeat-exit-key "RET")
-(global-set-key (kbd "<escape>") #'my/keyboard-escape-quit)
+(global-set-key (kbd "C-x t") (lambda () (interactive) (goto-char
+ (point-min)) (forward-line 1)
+ (org-babel-tangle)))
-(show-paren-mode 1) ; 减轻数括号的痛苦
+(setq
+ backup-by-copying t ; 自动备份
+ backup-directory-alist
+ '(("." . "~/tmp")) ; 自动备份目录
+ delete-old-versions t ; 自动删除旧的备份文件
+ kept-new-versions 3 ; 保留最近的3个备份文件
+ kept-old-versions 1 ; 保留最早的1个备份文件
+ version-control t) ; 多次备份
-(provide 'config)
+(use-package vterm :ensure t)
-(setq c-basic-offset 4
- tab-width 4)
+(use-package elfeed-org
+ :ensure t
+ :config
+ (setq rmh-elfeed-org-files (list "~/.emacs.d/elfeed.org")))
+(elfeed-org)
+
+(add-hook 'elfeed-show-mode-hook (lambda ()
+ (display-line-numbers-mode -1)
+ (olivetti-mode)))
-(use-package counsel
- :ensure t)
+(setq mastodon-instance-url "https://akk.glowisle.me"
+ mastodon-active-user "verdabt")
+
+(provide 'config)