Compare commits

...

9 Commits

Author SHA1 Message Date
Zelong Kuang
4a779a480c Update 2026-04-11 00:00:04 +10:00
Zelong Kuang
7fb855f332 replace moodline with Doom modeline 2026-04-10 23:59:41 +10:00
Zelong Kuang
b03af9e719 Update 2026-04-10 18:21:13 +10:00
Zelong Kuang
3490e9daa9 Update 2026-04-08 15:25:39 +10:00
Zelong Kuang
14ecd3b17a Update 2026-04-06 19:51:57 +10:00
Zelong Kuang
2fe4ba46e8 Update 2026-04-05 21:31:02 +10:00
Zelong Kuang
a47707a471 small mod 2026-04-03 22:48:09 +11:00
Zelong Kuang
2b6faa0e39 Update 2026-04-03 19:00:38 +11:00
Zelong Kuang
c3b368711e Update 2026-04-03 15:54:22 +11:00
30 changed files with 487 additions and 385 deletions

1
.gitignore vendored
View File

@@ -68,3 +68,4 @@ history
/easysession /easysession
/tramp-rpc /tramp-rpc
/straight/ /straight/
/eaf/

View File

@@ -10,14 +10,16 @@
(setq package-enable-at-startup nil) (setq package-enable-at-startup nil)
(setq native-comp-jit-compilation t) (setq native-comp-jit-compilation nil)
(setq native-comp-async-report-warnings-errors nil) (setq native-comp-async-report-warnings-errors nil)
(add-to-list 'load-path (expand-file-name "lisp/" user-emacs-directory)) (add-to-list 'load-path (expand-file-name "lisp/" user-emacs-directory))
(add-to-list 'load-path (expand-file-name "site-lisp/" user-emacs-directory))
(setq use-package-enable-imenu-support t) (setq use-package-enable-imenu-support t)
(setq load-prefer-newer noninteractive) (setq load-prefer-newer noninteractive)
(setenv "LSP_USE_PLISTS" "true") ;; Lsp-mode plists (setenv "LSP_USE_PLISTS" "true") ;; Lsp-mode plists
(setenv "LIBGS" "/opt/homebrew/lib/libgs.dylib")
;; PERF: Many elisp file API calls consult `file-name-handler-alist'. ;; PERF: Many elisp file API calls consult `file-name-handler-alist'.
;; Setting it to nil speeds up startup significantly. ;; Setting it to nil speeds up startup significantly.
@@ -40,7 +42,7 @@
inhibit-startup-screen t inhibit-startup-screen t
inhibit-startup-echo-area-message user-login-name inhibit-startup-echo-area-message user-login-name
inhibit-default-init t inhibit-default-init t
initial-major-mode 'fundamental-mode ;; initial-major-mode 'l-mode
initial-scratch-message nil) initial-scratch-message nil)
;; Faster to disable these here (before they've been initialized) ;; Faster to disable these here (before they've been initialized)

View File

@@ -37,10 +37,11 @@
(require 'init-workspace) (require 'init-workspace)
;; (require 'init-god) ;; (require 'init-god)
(require 'init-meow) ;; (require 'init-meow)
(require 'init-input) (require 'init-input)
(require 'init-utils) (require 'init-utils)
;; (require 'init-eaf)
(require 'init-coding) (require 'init-coding)
(require 'init-vcs) (require 'init-vcs)
@@ -53,13 +54,13 @@
(require 'init-org) (require 'init-org)
(require 'init-tex) (require 'init-tex)
;; (require 'init-markdown)
(require 'init-typst)
(require 'init-cc) (require 'init-cc)
(require 'init-python) (require 'init-python)
(require 'init-haskell) (require 'init-haskell)
(require 'init-rust) (require 'init-rust)
(require 'init-ocaml) (require 'init-ocaml)
(require 'init-typst)
(provide 'init) (provide 'init)
;;; Code: ;;; Code:

View File

@@ -1,7 +1,7 @@
;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
(use-package benchmark-init :demand t (use-package benchmark-init :demand t
:hook (elpaca-elpaca-after-init . benchmark-init/deactivate)) :hook (elpaca-after-init . benchmark-init/deactivate))
;; Load some component of large package (org, magit etc.) before complete mount ;; Load some component of large package (org, magit etc.) before complete mount
(defvar elemacs-incremental-packages '(t) (defvar elemacs-incremental-packages '(t)
@@ -88,19 +88,19 @@ If this is a daemon session, load them all immediately instead."
(exec-path-from-shell-initialize))) (exec-path-from-shell-initialize)))
(setq custom-file (expand-file-name "~/.emacs.d/custom.el")) (setq custom-file (expand-file-name "~/.emacs.d/custom.el"))
(add-hook 'elpaca-elpaca-after-init-hook (lambda () (load custom-file 'no-error 'no-message))) (add-hook 'elpaca-after-init-hook (lambda () (load custom-file 'no-error 'no-message)))
;; Start server ;; Start server
(use-package server (use-package server
:ensure nil :ensure nil
:autoload server-running-p
:hook (emacs-startup . (lambda () :hook (emacs-startup . (lambda ()
(unless server-mode (unless (server-running-p)
(server-mode 1))))) (server-mode 1)))))
;; Save place
(use-package saveplace (use-package saveplace
:ensure nil :ensure nil
:hook (elpaca-elpaca-after-init . save-place-mode)) :hook (elpaca-after-init . save-place-mode))
(use-package display-line-numbers (use-package display-line-numbers
:ensure nil :ensure nil
@@ -136,7 +136,7 @@ If this is a daemon session, load them all immediately instead."
(use-package paren (use-package paren
:ensure nil :ensure nil
:hook (elpaca-elpaca-after-init . show-paren-mode)) :hook (elpaca-after-init . show-paren-mode))
;; ;; Show trailing whitespace only in prog-mode and text-mode ;; ;; Show trailing whitespace only in prog-mode and text-mode
;; (add-hook 'prog-mode-hook (lambda () (setq show-trailing-whitespace t))) ;; (add-hook 'prog-mode-hook (lambda () (setq show-trailing-whitespace t)))
@@ -151,7 +151,8 @@ If this is a daemon session, load them all immediately instead."
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks" '("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$" "\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/" "\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/" "^/tmp/" "^/var/folders/.+$" "^/ssh:" "^/rpc:" "/persp-confs/"
"^/sshx:" "^/sudo:"
(lambda (file) (file-in-directory-p file package-user-dir))) (lambda (file) (file-in-directory-p file package-user-dir)))
recentf-auto-cleanup 'never) recentf-auto-cleanup 'never)
:config :config
@@ -160,7 +161,7 @@ If this is a daemon session, load them all immediately instead."
(use-package savehist (use-package savehist
:ensure nil :ensure nil
:hook (elpaca-elpaca-after-init . savehist-mode) :hook (elpaca-after-init . savehist-mode)
:init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers :init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers
history-length 1000 history-length 1000
savehist-additional-variables '(mark-ring savehist-additional-variables '(mark-ring
@@ -200,14 +201,6 @@ If this is a daemon session, load them all immediately instead."
x-stretch-cursor t x-stretch-cursor t
window-combination-resize t) window-combination-resize t)
(define-key global-map (kbd "C-<wheel-up>") nil)
(define-key global-map (kbd "C-<wheel-down>") nil)
(global-set-key (kbd "s-a") 'mark-whole-buffer) ;;对应Windows上面的Ctrl-a 全选
(global-set-key (kbd "s-c") 'kill-ring-save) ;;对应Windows上面的Ctrl-c 复制
(global-set-key (kbd "s-s") 'save-buffer) ;; 对应Windows上面的Ctrl-s 保存
(global-set-key (kbd "s-v") 'yank) ;对应Windows上面的Ctrl-v 粘贴
(global-set-key (kbd "s-z") 'undo) ;对应Windows上面的Ctrol-z 撤销
(setq kill-ring-max 200) (setq kill-ring-max 200)
;; Save clipboard contents into kill-ring before replace them ;; Save clipboard contents into kill-ring before replace them
(setq save-interprogram-paste-before-kill t) (setq save-interprogram-paste-before-kill t)
@@ -219,7 +212,7 @@ If this is a daemon session, load them all immediately instead."
(use-package browse-kill-ring (use-package browse-kill-ring
:bind ("C-c k" . browse-kill-ring) :bind ("C-c k" . browse-kill-ring)
:hook (elpaca-elpaca-after-init . browse-kill-ring-default-keybindings) :hook (elpaca-after-init . browse-kill-ring-default-keybindings)
:init (setq browse-kill-ring-separator "────────────────" :init (setq browse-kill-ring-separator "────────────────"
browse-kill-ring-separator-face 'shadow)) browse-kill-ring-separator-face 'shadow))
@@ -227,7 +220,7 @@ If this is a daemon session, load them all immediately instead."
:init :init
(setq scroll-conservatively 3 (setq scroll-conservatively 3
scroll-margin 0) scroll-margin 0)
:hook (elpaca-elpaca-after-init . ultra-scroll-mode)) :hook (elpaca-after-init . ultra-scroll-mode))
(use-package helpful (use-package helpful
:bind (([remap describe-function] . helpful-callable) :bind (([remap describe-function] . helpful-callable)
@@ -267,14 +260,14 @@ If this is a daemon session, load them all immediately instead."
;; (setq auto-save-file-name-transforms ;; (setq auto-save-file-name-transforms
;; `((".*" ,(concat user-emacs-directory "auto-save/") t))) ;; `((".*" ,(concat user-emacs-directory "auto-save/") t)))
(setq tramp-default-method "rpc") (use-package tramp
:config
(use-package tramp) (setq tramp-default-method "rpc"))
(use-package tramp-hlo (use-package tramp-hlo
:config :hook (elpaca-after-init . tramp-hlo-setup))
(tramp-hlo-setup))
(use-package msgpack)
(use-package tramp-rpc (use-package tramp-rpc
:ensure (tramp-rpc :host github :repo "ArthurHeymans/emacs-tramp-rpc") :ensure (tramp-rpc :host github :repo "ArthurHeymans/emacs-tramp-rpc")
:config :config

View File

@@ -1,12 +1,13 @@
;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
(define-prefix-command 'orgmode-map) (define-key global-map (kbd "C-<wheel-up>") nil)
(global-set-key (kbd "C-c n") 'orgmode-map) (define-key global-map (kbd "C-<wheel-down>") nil)
(global-set-key (kbd "s-a") 'mark-whole-buffer) ;;对应Windows上面的Ctrl-a 全选
(define-key orgmode-map (kbd "a") #'org-agenda) (global-set-key (kbd "s-c") 'kill-ring-save) ;;对应Windows上面的Ctrl-c 复制
(define-key orgmode-map (kbd "n") #'org-capture) (global-set-key (kbd "s-s") 'save-buffer) ;; 对应Windows上面的Ctrl-s 保存
(define-key orgmode-map (kbd "t") #'org-todo-list) (global-set-key (kbd "s-v") 'yank) ;对应Windows上面的Ctrl-v 粘贴
(global-set-key (kbd "s-x") 'execute-extended-command) ;对应Windows上面的Ctrol-z 撤销
(global-set-key (kbd "s-z") 'undo) ;对应Windows上面的Ctrol-z 撤销
(setq duplicate-line-final-position 1) (setq duplicate-line-final-position 1)
(global-set-key (kbd "M-p") #'duplicate-dwim) (global-set-key (kbd "M-p") #'duplicate-dwim)

View File

@@ -20,13 +20,13 @@
;; Display errors a little quicker (default is 0.9s) ;; Display errors a little quicker (default is 0.9s)
flycheck-display-errors-delay 0.25)) flycheck-display-errors-delay 0.25))
(use-package flyover ;; (use-package flyover
:diminish ;; :diminish
:hook prog-mode ;; :hook prog-mode
:config ;; :config
;; Disable flyover-mode in emacs-lisp-mode ;; ;; Disable flyover-mode in emacs-lisp-mode
(add-hook 'emacs-lisp-mode-hook (lambda () (flyover-mode -1))) ;; (add-hook 'emacs-lisp-mode-hook (lambda () (flyover-mode -1)))
:custom (flyover-checkers '(flycheck))) ;; :custom (flyover-checkers '(flycheck)))
(provide 'init-check) (provide 'init-check)

View File

@@ -1,6 +1,7 @@
;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
(use-package xref (use-package xref
:ensure nil
:init :init
;; Use faster search tool ;; Use faster search tool
(when (executable-find "rg") (when (executable-find "rg")
@@ -10,7 +11,8 @@
(setq xref-show-definitions-function #'xref-show-definitions-completing-read (setq xref-show-definitions-function #'xref-show-definitions-completing-read
xref-show-xrefs-function #'xref-show-definitions-completing-read)) xref-show-xrefs-function #'xref-show-definitions-completing-read))
(use-package apheleia :diminish) (use-package apheleia :diminish
:hook (prog-mode))
(use-package editorconfig (use-package editorconfig
:diminish :diminish

View File

@@ -32,7 +32,7 @@
;; Optionally use the `orderless' completion style. ;; Optionally use the `orderless' completion style.
(use-package orderless (use-package orderless
:custom :custom
(completion-styles '(orderless basic)) (completion-styles '(orderless partial-completion basic))
(completion-category-defaults nil) (completion-category-defaults nil)
(completion-category-overrides '((file (styles orderless partial-completion)))) (completion-category-overrides '((file (styles orderless partial-completion))))
(orderless-component-separator #'orderless-escapable-split-on-space)) (orderless-component-separator #'orderless-escapable-split-on-space))
@@ -163,7 +163,6 @@
(setq xref-show-xrefs-function #'consult-xref (setq xref-show-xrefs-function #'consult-xref
xref-show-definitions-function #'consult-xref)) xref-show-definitions-function #'consult-xref))
;; (use-package consult-projectile)
(use-package consult-flycheck) (use-package consult-flycheck)
(use-package consult-dir (use-package consult-dir
@@ -237,6 +236,7 @@
circe-mode circe-mode
help-mode help-mode
gud-mode gud-mode
eat-mode
vterm-mode) vterm-mode)
t)) t))
:custom-face :custom-face
@@ -250,11 +250,11 @@
;;Quit completion before saving ;;Quit completion before saving
(add-hook 'before-save-hook #'corfu-quit) (add-hook 'before-save-hook #'corfu-quit)
(advice-add #'persistent-scratch-save :before #'corfu-quit) (advice-add #'persistent-scratch-save :before #'corfu-quit)
(add-to-list 'corfu-continue-commands #'corfu-move-to-minibuffer) (add-to-list 'corfu-continue-commands #'corfu-move-to-minibuffer))
(use-package nerd-icons-corfu
:init
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter)))
(use-package nerd-icons-corfu
:init
(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
;; A few more useful configurations... ;; A few more useful configurations...
(use-package emacs (use-package emacs
@@ -294,10 +294,6 @@
;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-nonexclusive) ;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-nonexclusive)
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-nonexclusive)) (advice-add 'pcomplete-completions-at-point :around #'cape-wrap-nonexclusive))
;; (use-package yasnippet-capf
;; :after cape
;; :config
;; (add-to-list 'completion-at-point-functions #'yasnippet-capf))
(provide 'init-completion) (provide 'init-completion)

View File

@@ -9,6 +9,7 @@
;; Always delete and copy recursively ;; Always delete and copy recursively
(setq dired-recursive-deletes 'always (setq dired-recursive-deletes 'always
dired-recursive-copies 'always dired-recursive-copies 'always
dired-dwim-target t
dired-kill-when-opening-new-dired-buffer t) dired-kill-when-opening-new-dired-buffer t)
;; Show directory first ;; Show directory first
@@ -32,9 +33,8 @@
;; (use-package dirvish ;; (use-package dirvish
;; :bind ("C-c o p" . dirvish-side) ;; :bind ("C-c o p" . dirvish-side)
;; :init (dirvish-override-dired-mode)
;; :config ;; :config
;; (setq dirvish-use-header-line nil ;; (setq dirvish-use-header-line nil
;; dirvish-use-mode-line nil)) ;; dirvish-use-mode-line nil))
(provide 'init-dired) (provide 'init-dired)

28
lisp/init-eaf.el Normal file
View File

@@ -0,0 +1,28 @@
;; -*- lexical-binding: t; -*-
(use-package eaf
:defer nil
:load-path "~/.emacs.d/site-lisp/emacs-application-framework/"
:custom ; See https://github.com/emacs-eaf/emacs-application-framework/wiki/Customization
(eaf-browser-continue-where-left-off t)
(eaf-browser-enable-adblocker t)
;; (browse-url-browser-function 'eaf-open-browser)
:defines eaf-pdf-viewer-keybinding
:config
(require 'eaf-pdf-viewer)
(require 'eaf-music-player)
;; (require 'eaf-jupyter)
(require 'eaf-mindmap)
(require 'eaf-markdown-previewer)
(require 'eaf-system-monitor)
(require 'eaf-js-video-player)
(require 'eaf-image-viewer)
(eaf-bind-key scroll_up "C-n" eaf-pdf-viewer-keybinding)
(eaf-bind-key scroll_down "C-p" eaf-pdf-viewer-keybinding)
)
(provide 'init-eaf)

View File

@@ -6,44 +6,39 @@
(use-package electric-pair-mode (use-package electric-pair-mode
:ensure nil :ensure nil
:hook elpaca-after-init) :hook elpaca-after-init
:config
(dolist (mode '(LaTeX-mode-hook org-mode-hook))
(add-hook mode
(lambda ()
(setq-local electric-pair-pairs
(append electric-pair-pairs '((?\\ . ?\\))))
(setq-local electric-pair-text-pairs electric-pair-pairs)))))
;; (use-package smartparens (use-package puni
;; :diminish :hook (elpaca-after-init . puni-global-mode)
;; :hook (elpaca-after-init . smartparens-global-mode) :custom
;; :init (sp-use-paredit-bindings) (puni-confirm-when-delete-unbalanced-active-region nil)
:bind (:map puni-mode-map
("M-s" . puni-splice)
("DEL" . my-backspace)
("C-=" . puni-expand-region)
)
:init
(defun my-backspace ()
(interactive)
(if (looking-back (rx line-start (+ blank)))
(delete-region (line-beginning-position) (point))
(puni-backward-delete-char))))
;; (use-package combobulate
;; :ensure (:host github :repo "mickeynp/combobulate")
;; :hook prog-mode
;; :config ;; :config
;; ;; Autopair quotes more conservatively; if I'm next to a word/before another ;; ;; You can customize Combobulate's key prefix here.
;; ;; quote, I don't want to open a new pair or it would unbalance them. ;; ;; Note that you may have to restart Emacs for this to take effect!
;; (let ((unless-list '(sp-point-before-word-p ;; (setq combobulate-key-prefix "C-c o")
;; sp-point-after-word-p ;; )
;; sp-point-before-same-p)))
;; (sp-pair "'" nil :unless unless-list)
;; (sp-pair "\"" nil :unless unless-list))
;; (dolist (brace '("(" "{" "["))
;; (sp-pair brace nil
;; :post-handlers '(("||\n[i]" "RET") ("| " "SPC"))
;; ;; Don't autopair opening braces if before a word character or
;; ;; other opening brace. The rationale: it interferes with manual
;; ;; balancing of braces, and is odd form to have s-exps with no
;; ;; whitespace in between, e.g. ()()(). Insert whitespace if
;; ;; genuinely want to start a new form in the middle of a word.
;; :unless '(sp-point-before-word-p sp-point-before-same-p)))
;; (sp-local-pair sp-lisp-modes "(" ")" :unless '(:rem sp-point-before-same-p))
;; ;; Don't do square-bracket space-expansion where it doesn't make sense to
;; (sp-local-pair '(emacs-lisp-mode org-mode markdown-mode markdown-ts-mode gfm-mode)
;; "[" nil :post-handlers '(:rem ("| " "SPC"))))
;; ;; Hungry deletion
(use-package hungry-delete
:diminish
:hook (elpaca-after-init . global-hungry-delete-mode)
:init (setq hungry-delete-chars-to-skip " \t\f\v"
hungry-delete-except-modes
'(help-mode minibuffer-mode minibuffer-inactive-mode calc-mode)))
(use-package abbrev (use-package abbrev
:ensure nil :ensure nil
@@ -62,21 +57,21 @@
:hook ((text-mode . goto-address-mode) :hook ((text-mode . goto-address-mode)
(prog-mode . goto-address-prog-mode))) (prog-mode . goto-address-prog-mode)))
;; (use-package multiple-cursors (use-package multiple-cursors
;; :hook prog-mode :hook elpaca-after-init
;; :bind (("C-S-c C-S-c" . mc/edit-lines) :bind (("C-S-c C-S-c" . mc/edit-lines)
;; ("C->" . mc/mark-next-like-this) ("C->" . mc/mark-next-like-this)
;; ("C-<" . mc/mark-previous-like-this) ("C-<" . mc/mark-previous-like-this)
;; ("C-c C-<" . mc/mark-all-like-this) ("C-c C-<" . mc/mark-all-like-this)
;; ("C-M->" . mc/skip-to-next-like-this) ("C-M->" . mc/skip-to-next-like-this)
;; ("C-M-<" . mc/skip-to-previous-like-this) ("C-M-<" . mc/skip-to-previous-like-this)
;; ("s-<mouse-1>" . mc/add-cursor-on-click) ("s-<mouse-1>" . mc/add-cursor-on-click)
;; ("C-S-<mouse-1>" . mc/add-cursor-on-click) ("C-S-<mouse-1>" . mc/add-cursor-on-click)
;; :map mc/keymap :map mc/keymap
;; ("C-|" . mc/vertical-align-with-space))) ("C-|" . mc/vertical-align-with-space)))
(use-package expand-region ;; (use-package expand-region
:bind ("C-=" . er/expand-region)) ;; :bind ("C-=" . er/expand-region))
(use-package mwim (use-package mwim
:bind (([remap move-beginning-of-line] . mwim-beginning) :bind (([remap move-beginning-of-line] . mwim-beginning)
@@ -135,11 +130,11 @@
(use-package olivetti (use-package olivetti
:hook org-mode :hook org-mode
:diminish :diminish
:bind ("<f7>" . olivetti-mode) :bind (("<f7>" . olivetti-mode))
:custom :custom
(olivetti-style 'fancy) (olivetti-style 'fancy)
(olivetti-margin-width 5) (olivetti-margin-width 5)
(olivetti-body-width 90)) (olivetti-body-width 80))
(setq-default bidi-display-reordering 'left-to-right (setq-default bidi-display-reordering 'left-to-right
bidi-paragraph-direction 'left-to-right bidi-paragraph-direction 'left-to-right

View File

@@ -2,15 +2,15 @@
;;;;;;;;;;;; elpaca initialise ;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;; elpaca initialise ;;;;;;;;;;;;;;;;;;
(defvar elpaca-installer-version 0.12) (defvar elpaca-installer-version 0.12)
(defvar elpaca-directory (expand-file-name "elpa/" user-emacs-directory)) (defvar elpaca-directory (expand-file-name "elpaca/" user-emacs-directory))
(defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory)) (defvar elpaca-builds-directory (expand-file-name "builds/" elpaca-directory))
(defvar elpaca-sources-directory (expand-file-name "sources/" elpaca-directory)) (defvar elpaca-sources-directory (expand-file-name "sources/" elpaca-directory))
(defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git" (defvar elpaca-order '(elpaca :repo "https://github.com/progfolio/elpaca.git"
:ref nil :depth 1 :inherit ignore :ref nil :depth 1 :inherit ignore
:files (:defaults "elpaca-test.el" (:exclude "extensions")) :files (:defaults "elpaca-test.el" (:exclude "extensions"))
:build (:not elpaca-activate))) :build (:not elpaca-activate)))
(let* ((repo (expand-file-name "elpa/" elpaca-sources-directory)) (let* ((repo (expand-file-name "elpaca/" elpaca-sources-directory))
(build (expand-file-name "elpa/" elpaca-builds-directory)) (build (expand-file-name "elpaca/" elpaca-builds-directory))
(order (cdr elpaca-order)) (order (cdr elpaca-order))
(default-directory repo)) (default-directory repo))
(add-to-list 'load-path (if (file-exists-p build) build repo)) (add-to-list 'load-path (if (file-exists-p build) build repo))
@@ -39,12 +39,6 @@
(let ((load-source-file-function nil)) (load "./elpaca-autoloads")))) (let ((load-source-file-function nil)) (load "./elpaca-autoloads"))))
(add-hook 'after-init-hook #'elpaca-process-queues) (add-hook 'after-init-hook #'elpaca-process-queues)
(elpaca `(,@elpaca-order)) (elpaca `(,@elpaca-order))
;; Install a package via the elpaca macro
;; See the "recipes" section of the manual for more details.
;; (elpaca example-package)
;; Uncomment for systems which cannot create symlinks:
(when (eq system-type 'windows-nt) (when (eq system-type 'windows-nt)
(elpaca-no-symlink-mode)) (elpaca-no-symlink-mode))
@@ -60,8 +54,6 @@
;;For example: ;;For example:
;;(use-package general :ensure (:wait t) :demand t) ;;(use-package general :ensure (:wait t) :demand t)
(setq elpaca-lock-file (expand-file-name "lock-file.eld" user-emacs-directory))
(setq use-package-always-ensure t (setq use-package-always-ensure t
use-package-expand-minimally t use-package-expand-minimally t
use-package-always-defer t) use-package-always-defer t)

View File

@@ -1,3 +1,5 @@
;; -*- lexical-binding: t; -*- ;; -*- lexical-binding: t; -*-
(use-package god-mode (use-package god-mode

View File

@@ -14,5 +14,16 @@
haskell-process-auto-import-loaded-modules t) haskell-process-auto-import-loaded-modules t)
(add-to-list 'completion-ignored-extensions ".hi")) (add-to-list 'completion-ignored-extensions ".hi"))
(use-package haskell-ts-mode
:custom
(haskell-ts-font-lock-level 4)
(haskell-ts-use-indent t)
(haskell-ts-ghci "ghci")
(haskell-ts-use-indent t)
:config
(add-to-list 'major-mode-remap-alist '(haskell-mode . haskell-ts-mode)))
(use-package lsp-haskell)
(provide 'init-haskell) (provide 'init-haskell)

View File

@@ -4,6 +4,14 @@
:custom :custom
(default-input-method "rime") (default-input-method "rime")
(rime-librime-root "/opt/homebrew") (rime-librime-root "/opt/homebrew")
(rime-emacs-module-header-root "~/build-emacs-for-macos/builds/Emacs.app/Contents/Resources/include/")) (rime-emacs-module-header-root "~/build-emacs-for-macos/builds/Emacs.app/Contents/Resources/include/")
(rime-show-candidate 'posframe)
(rime-posframe-properties nil))
;; (use-package sis
;; :hook ((elpaca-after-init . sis-global-respect-mode)
;; (elpaca-after-init . sis-global-context-mode)
;; (elpaca-after-init . sis-global-inline-mode)))
(provide 'init-input) (provide 'init-input)

View File

@@ -3,9 +3,9 @@
(use-package gptel (use-package gptel
:defer t :defer t
:bind (("C-c l s" . gptel-send) :bind (("C-c l s" . gptel-send)
("C-c l m" . gptel-menu)) ("C-c l m" . gptel-menu))
:config :config
(setq gptel-model 'claude-sonnet-4.5) (setq gptel-model 'gpt-5.2)
(setq gptel-backend (gptel-make-gh-copilot "Copilot")) (setq gptel-backend (gptel-make-gh-copilot "Copilot"))
(setq gptel-default-mode #'org-mode) (setq gptel-default-mode #'org-mode)
(setq gptel-display-buffer-action nil) ; if user changes this, popup manager will bow out (setq gptel-display-buffer-action nil) ; if user changes this, popup manager will bow out

View File

@@ -13,7 +13,7 @@
(unless (derived-mode-p (unless (derived-mode-p
'emacs-lisp-mode 'lisp-mode 'emacs-lisp-mode 'lisp-mode
'makefile-mode 'snippet-mode 'makefile-mode 'snippet-mode
'ron-mode) 'lisp-data-mode 'ron-mode)
(lsp-deferred)))) (lsp-deferred))))
((markdown-mode yaml-mode yaml-ts-mode) . lsp-deferred) ((markdown-mode yaml-mode yaml-ts-mode) . lsp-deferred)
(lsp-mode . (lambda () (lsp-mode . (lambda ()
@@ -21,43 +21,48 @@
(lsp-enable-which-key-integration) (lsp-enable-which-key-integration)
;; (add-hook 'before-save-hook #'lsp-format-buffer t t) ;; (add-hook 'before-save-hook #'lsp-format-buffer t t)
(add-hook 'before-save-hook #'lsp-organize-imports t t)))) (add-hook 'before-save-hook #'lsp-organize-imports t t))))
:hook (lsp-completion-mode . my/lsp-mode-setup-completion)
:bind (:map lsp-mode-map :bind (:map lsp-mode-map
("C-c c d" . lsp-describe-thing-at-point) ("C-c c d" . lsp-describe-thing-at-point)
([remap xref-find-definitions] . lsp-find-definition) ([remap xref-find-definitions] . lsp-find-definition)
([remap xref-find-references] . lsp-find-references)) ([remap xref-find-references] . lsp-find-references))
:init (setq lsp-use-plists t :init
lsp-log-io nil (defun my/lsp-mode-setup-completion ()
(setf (alist-get 'styles (alist-get 'lsp-capf completion-category-defaults))
'(orderless)))
(setq lsp-use-plists t
lsp-log-io nil
lsp-enable-suggest-server-download t lsp-enable-suggest-server-download t
;; lsp-auto-configure t ;; lsp-auto-configure t
lsp-keymap-prefix "C-c c" lsp-keymap-prefix "C-c c"
lsp-keep-workspace-alive nil lsp-keep-workspace-alive nil
lsp-signature-auto-activate nil lsp-signature-auto-activate nil
lsp-modeline-code-actions-enable nil lsp-modeline-code-actions-enable nil
lsp-modeline-diagnostics-enable nil lsp-modeline-diagnostics-enable nil
lsp-modeline-workspace-status-enable nil lsp-modeline-workspace-status-enable nil
lsp-completion-enable t lsp-completion-enable t
lsp-completion-provider :none ;; using corfu lsp-completion-provider :none ;; using corfu
lsp-completion-enable-additional-text-edit t lsp-completion-enable-additional-text-edit t
lsp-enable-snippet t lsp-enable-snippet t
lsp-completion-show-kind t lsp-completion-show-kind t
lsp-semantic-tokens-enable t lsp-semantic-tokens-enable t
lsp-progress-spinner-type 'progress-bar-filled lsp-progress-spinner-type 'progress-bar-filled
lsp-enable-file-watchers nil lsp-enable-file-watchers nil
lsp-enable-folding nil lsp-enable-folding nil
lsp-enable-symbol-highlighting nil lsp-enable-symbol-highlighting nil
lsp-enable-text-document-color nil lsp-enable-text-document-color nil
lsp-enable-imenu t lsp-enable-imenu t
lsp-enable-indentation nil lsp-enable-indentation nil
lsp-enable-on-type-formatting nil lsp-enable-on-type-formatting nil
;; For diagnostics ;; For diagnostics
lsp-diagnostics-disabled-modes '(markdown-mode gfm-mode)) lsp-diagnostics-disabled-modes '(markdown-mode gfm-mode))
:config :config
(with-no-warnings (with-no-warnings
;; Disable `lsp-mode' in `git-timemachine-mode' ;; Disable `lsp-mode' in `git-timemachine-mode'

View File

@@ -87,12 +87,19 @@
'("C-g" . meow-grab)) '("C-g" . meow-grab))
) )
(use-package meow (use-package meow
:demand t :demand t
:hook (elpaca-after-init . meow-global-mode) :hook (elpaca-after-init . meow-global-mode)
:config :config
(meow-setup) (meow-setup)
(add-to-list 'meow-mode-state-list '((magit-mode . insert))) (add-to-list 'meow-mode-state-list '(magit-mode . insert))
(add-to-list 'meow-mode-state-list '(eat-mode . insert))
(add-to-list 'meow-mode-state-list '(eshell-mode . insert))
(add-to-list 'meow-mode-state-list '(git-commit-elisp-text-mode . insert))
(define-key input-decode-map (kbd "C-[") [control-bracketleft])
(define-key meow-insert-state-keymap [control-bracketleft] 'meow-insert-exit)
(setq meow-keypad-leader-dispatch "C-c" (setq meow-keypad-leader-dispatch "C-c"
meow-use-clipboard t) meow-use-clipboard t)
(setq meow-replace-state-name-list (setq meow-replace-state-name-list
@@ -103,4 +110,40 @@
(beacon . "<B>"))) (beacon . "<B>")))
(setq meow-cursor-type-normal 'bar)) (setq meow-cursor-type-normal 'bar))
;; Meow jk exit
(use-package meow
:disabled t
:after meow
:config
;; Use jk to escape from insert state to normal state
(defvar meow-two-char-escape-sequence "jk")
(defvar meow-two-char-escape-delay 0.5)
(defun meow--two-char-exit-insert-state (s)
"Exit meow insert state when pressing consecutive two keys.
S is string of the two-key sequence."
(when (meow-insert-mode-p)
(let ((modified (buffer-modified-p))
(undo-list buffer-undo-list))
(insert (elt s 0))
(let* ((second-char (elt s 1))
(event
(if defining-kbd-macro
(read-event nil nil)
(read-event nil nil meow-two-char-escape-delay))))
(when event
(if (and (characterp event) (= event second-char))
(progn
(backward-delete-char 1)
(set-buffer-modified-p modified)
(setq buffer-undo-list undo-list)
(meow-insert-exit))
(push event unread-command-events)))))))
(defun meow-two-char-exit-insert-state ()
"Exit meow insert state when pressing consecutive two keys."
(interactive)
(meow--two-char-exit-insert-state meow-two-char-escape-sequence))
(define-key meow-insert-state-keymap (substring meow-two-char-escape-sequence 0 1)
#'meow-two-char-exit-insert-state))
(provide 'init-meow) (provide 'init-meow)

View File

@@ -1,18 +1,12 @@
;; -*- lexical-binding: t -*- ;; -*- lexical-binding: t -*-
;; (defun org-capture-init()
;; (setq org-capture-templates
;; '(("t" "Personal todo" entry ("Inbox")
;; "* TODO %?\n%i\n%a" :prepend t))))
(use-package org (use-package org
:defer :defer
:ensure (org :repo "https://code.tecosaur.net/tec/org-mode.git/" :ensure (org :repo "https://code.tecosaur.net/tec/org-mode.git/"
:branch "dev") :branch "dev")
:hook (org-mode . org-cdlatex-mode) :hook ((org-mode . org-cdlatex-mode)
:hook (org-mode . org-indent-mode) (org-mode . org-indent-mode)
:hook (org-mode . visual-line-mode) (org-mode . visual-line-mode))
:pretty-hydra :pretty-hydra
;; See `org-structure-template-alist' ;; See `org-structure-template-alist'
((:color blue :quit-key ("q" "C-g")) ((:color blue :quit-key ("q" "C-g"))
@@ -58,7 +52,11 @@
(if (or (region-active-p) (looking-back "^\s*" 1)) (if (or (region-active-p) (looking-back "^\s*" 1))
(org-hydra/body) (org-hydra/body)
(self-insert-command 1)))) (self-insert-command 1))))
("M-<return>" . org-insert-subheading)) ("M-<return>" . org-insert-subheading)
("C-'" . nil))
:bind (("C-c n t" . org-todo-list)
("C-c n a" . org-agenda)
("C-c n n" . org-capture))
:config :config
(elemacs-load-packages-incrementally (elemacs-load-packages-incrementally
'(calendar find-func format-spec org-macs org-compat '(calendar find-func format-spec org-macs org-compat
@@ -101,6 +99,7 @@ the element after the #+HEADER: tag."
(setq org-pretty-entities t (setq org-pretty-entities t
org-pretty-entities-include-sub-superscripts nil) org-pretty-entities-include-sub-superscripts nil)
(setq org-default-note-file (expand-file-name "notes.org" org-directory) (setq org-default-note-file (expand-file-name "notes.org" org-directory)
org-capture-templates org-capture-templates
'(("t" "Personal todo" entry '(("t" "Personal todo" entry
@@ -111,51 +110,79 @@ the element after the #+HEADER: tag."
"* %u %?\n%i\n%a" :prepend t) "* %u %?\n%i\n%a" :prepend t)
("j" "Journal" entry ("j" "Journal" entry
(file+olp+datetree "diary.org") (file+olp+datetree "diary.org")
"* %U %?\n%i\n%a" :prepend t)) "* %U %?\n%i\n%a" :prepend t)))
(with-no-warnings
org-todo-keywords (custom-declare-face '+org-todo-active '((t (:inherit (bold font-lock-constant-face org-todo)))) "")
'((sequence "TODO(t)" "IN-PROGRESS(i)" "ON-HOLD(h)" "|" "DONE(d)" "NO(n)"))) (custom-declare-face '+org-todo-project '((t (:inherit (bold font-lock-doc-face org-todo)))) "")
(custom-declare-face '+org-todo-onhold '((t (:inherit (bold warning org-todo)))) "")
(custom-declare-face '+org-todo-cancel '((t (:inherit (bold error org-todo)))) ""))
(setq org-todo-keywords
'((sequence
"TODO(t)" ; A task that needs doing & is ready to do
"PROJ(p)" ; A project, which usually contains other tasks
"LOOP(r)" ; A recurring task
"STRT(s)" ; A task that is in progress
"WAIT(w)" ; Something external is holding up this task
"HOLD(h)" ; This task is paused/on hold because of me
"IDEA(i)" ; An unconfirmed and unapproved task or notion
"|"
"DONE(d)" ; Task successfully completed
"KILL(k)") ; Task was cancelled, aborted, or is no longer applicable
(sequence
"|"
"OKAY(o)"
"YES(y)"
"NO(n)"))
org-todo-keyword-faces
'(("[-]" . +org-todo-active)
("STRT" . +org-todo-active)
("[?]" . +org-todo-onhold)
("WAIT" . +org-todo-onhold)
("HOLD" . +org-todo-onhold)
("PROJ" . +org-todo-project)
("NO" . +org-todo-cancel)
("KILL" . +org-todo-cancel)))
(add-to-list 'org-src-block-faces '("latex" (:inherit default :extend t))) (add-to-list 'org-src-block-faces '("latex" (:inherit default :extend t)))
(add-hook 'org-after-refile-insert-hook (add-hook 'org-after-refile-insert-hook
(defun save-buffer-after-capture () (defun save-buffer-after-capture ()
(when (bound-and-true-p org-capture-is-refiling) (when (bound-and-true-p org-capture-is-refiling)
(save-buffer)))) (save-buffer))))
;; ;; Enable lsp in org-babel ;; ;; Enable lsp in org-babel
;; (cl-defmacro lsp-org-babel-enable (lang) (cl-defmacro lsp-org-babel-enable (lang)
;; "Support LANG in org source code block." "Support LANG in org source code block."
;; (cl-check-type lang string) (cl-check-type lang string)
;; (let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang))) (let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang)))
;; (intern-pre (intern (format "lsp--%s" (symbol-name edit-pre))))) (intern-pre (intern (format "lsp--%s" (symbol-name edit-pre)))))
;; `(progn `(progn
;; (defun ,intern-pre (info) (defun ,intern-pre (info)
;; (setq buffer-file-name (or (->> info caddr (alist-get :file)) (setq buffer-file-name (or (->> info caddr (alist-get :file))
;; "org-src-babel.tmp")) "org-src-babel.tmp"))
;; (when (fboundp 'lsp-deferred) (when (fboundp 'lsp-deferred)
;; ;; Avoid headerline conflicts ;; Avoid headerline conflicts
;; (setq-local lsp-headerline-breadcrumb-enable nil) (setq-local lsp-headerline-breadcrumb-enable nil)
;; (lsp-deferred) (lsp-deferred)
;; (_ (_
;; (user-error "LSP:: invalid type")))) (user-error "LSP:: invalid type"))))
;; (put ',intern-pre 'function-documentation (put ',intern-pre 'function-documentation
;; (format "Enable lsp-mode in the buffer of org source block (%s)." (format "Enable lsp-mode in the buffer of org source block (%s)."
;; (upcase ,lang))) (upcase ,lang)))
;; (if (fboundp ',edit-pre) (if (fboundp ',edit-pre)
;; (advice-add ',edit-pre :after ',intern-pre) (advice-add ',edit-pre :after ',intern-pre)
;; (progn (progn
;; (defun ,edit-pre (info) (defun ,edit-pre (info)
;; (,intern-pre info)) (,intern-pre info))
;; (put ',edit-pre 'function-documentation (put ',edit-pre 'function-documentation
;; (format "Prepare local buffer environment for org source block (%s)." (format "Prepare local buffer environment for org source block (%s)."
;; (upcase ,lang)))))))) (upcase ,lang))))))))
;; (defconst org-babel-lang-list (defconst org-babel-lang-list
;; '("go" "python" "ipython" "ruby" "js" "css" "sass" "c" "rust" "java" "cpp" "c++" "shell") '("go" "python" "ipython" "ruby" "js" "css" "sass" "c" "rust" "java" "cpp" "c++" "shell" "haskell")
;; "The supported programming languages for interactive Babel.") "The supported programming languages for interactive Babel.")
;; (dolist (lang org-babel-lang-list) (dolist (lang org-babel-lang-list)
;; (eval `(lsp-org-babel-enable ,lang))) (eval `(lsp-org-babel-enable ,lang)))
) )
(use-package org-contrib) (use-package org-contrib)
@@ -234,13 +261,14 @@ the element after the #+HEADER: tag."
:hook (org-latex-preview-mode . org-latex-preview-center-mode) :hook (org-latex-preview-mode . org-latex-preview-center-mode)
:bind ("C-c C-x SPC" . org-latex-preview-clear-cache) :bind ("C-c C-x SPC" . org-latex-preview-clear-cache)
:config :config
;; Higher resolution when using dvipng ;; preview buffer on enter
(plist-put org-latex-preview-appearance-options :zoom 0.85) (add-hook 'org-mode-hook
;; (plist-put org-latex-preview-appearance-options :margin 1) (lambda ()
(run-with-idle-timer 0.5 nil
(lambda () (org-latex-preview '(16))))))
;; Add margin and rescale display math ;; Add margin and rescale display math
(defvar my/org-latex-display-math-scale 0.8) (defvar my/org-latex-display-math-scale 1)
(defvar my/org-latex-display-math-margin 8) (defvar my/org-latex-display-math-margin 5)
(defun my/org-latex-preview-add-margin-advice (ov _path-info) (defun my/org-latex-preview-add-margin-advice (ov _path-info)
(save-excursion (save-excursion
(goto-char (overlay-start ov)) (goto-char (overlay-start ov))
@@ -264,10 +292,12 @@ the element after the #+HEADER: tag."
(advice-add 'org-latex-preview--update-overlay :after (advice-add 'org-latex-preview--update-overlay :after
#'my/org-latex-preview-add-margin-advice) #'my/org-latex-preview-add-margin-advice)
(setq org-latex-preview-numbered t) ;; (setq org-latex-preview-numbered t)
(setq org-latex-preview-mode-display-live t) (setq org-latex-preview-mode-display-live t)
(setq org-latex-preview-process-default 'dvisvgm) (setq org-latex-preview-process-default 'dvisvgm)
(setq org-latex-preview-mode-update-delay 0.25) (setq org-latex-preview-mode-update-delay 0.25)
;; Centre display maths
(defun my/org-latex-preview-uncenter (ov) (defun my/org-latex-preview-uncenter (ov)
(overlay-put ov 'before-string nil)) (overlay-put ov 'before-string nil))
(defun my/org-latex-preview-recenter (ov) (defun my/org-latex-preview-recenter (ov)

View File

@@ -23,9 +23,4 @@
(with-eval-after-load 'exec-path-from-shell (with-eval-after-load 'exec-path-from-shell
(exec-path-from-shell-copy-env "PYTHONPATH"))) (exec-path-from-shell-copy-env "PYTHONPATH")))
;; (with-eval-after-load 'eglot
;; (add-hook 'python-ts-mode-hook #'eglot-ensure)
;; (add-to-list 'eglot-server-programs '((python-mode python-ts-mode) . ("pyright-langserver" "--stdio"))))
(provide 'init-python) (provide 'init-python)

View File

@@ -1,8 +1,7 @@
;; Rust -*- lexical-binding: t; -*- ;; Rust -*- lexical-binding: t; -*-
(use-package rust-mode (use-package rust-mode
:functions treesit-available-p :config
:init (setq rust-format-on-save t (add-to-list 'major-mode-remap-alist '(rust-mode . rust-ts-mode)))
rust-mode-treesitter-derive (treesit-available-p)))
(use-package ron-mode (use-package ron-mode
:mode ("\\.ron" . ron-mode)) :mode ("\\.ron" . ron-mode))

View File

@@ -40,71 +40,11 @@
:defines eshell-prompt-function :defines eshell-prompt-function
:bind (:map eshell-mode-map :bind (:map eshell-mode-map
([remap recenter-top-bottom] . eshell/clear)) ([remap recenter-top-bottom] . eshell/clear))
:config :config
(setq eshell-banner-message "") ;; (defun eshell/clear ()
(with-no-warnings ;; (interactive)
(defun eshell/clear () ;; (eshell/clear-scrollback))
"Clear the eshell buffer." (setq eshell-banner-message ""))
(interactive)
(let ((inhibit-read-only t))
(erase-buffer)
(eshell-send-input)))
(defun eshell/emacs (&rest args)
"Open a file (ARGS) in Emacs. Some habits die hard."
(if (null args)
;; If I just ran "emacs", I probably expect to be launching
;; Emacs, which is rather silly since I'm already in Emacs.
;; So just pretend to do what I ask.
(bury-buffer)
;; We have to expand the file names or else naming a directory in an
;; argument causes later arguments to be looked for in that directory,
;; not the starting directory
(mapc #'find-file (mapcar #'expand-file-name (flatten-tree (reverse args))))))
(defalias 'eshell/e #'eshell/emacs)
(defalias 'eshell/ec #'eshell/emacs)
(defun eshell/ebc (&rest args)
"Compile a file (ARGS) in Emacs. Use `compile' to do background make."
(if (eshell-interactive-output-p)
(let ((compilation-process-setup-function
(list 'lambda nil
(list 'setq 'process-environment
(list 'quote (eshell-copy-environment))))))
(compile (eshell-flatten-and-stringify args))
(pop-to-buffer compilation-last-buffer))
(throw 'eshell-replace-command
(let ((l (eshell-stringify-list (flatten-tree args))))
(eshell-parse-command (car l) (cdr l))))))
(put 'eshell/ebc 'eshell-no-numeric-conversions t)
(defun eshell-view-file (file)
"View FILE. A version of `view-file' which properly rets the eshell prompt."
(interactive "fView file: ")
(unless (file-exists-p file) (error "%s does not exist" file))
(let ((buffer (find-file-noselect file)))
(if (eq (get (buffer-local-value 'major-mode buffer) 'mode-class)
'special)
(progn
(switch-to-buffer buffer)
(message "Not using View mode because the major mode is special"))
(let ((undo-window (list (window-buffer) (window-start)
(+ (window-point)
(length (funcall eshell-prompt-function))))))
(switch-to-buffer buffer)
(view-mode-enter (cons (selected-window) (cons nil undo-window))
'kill-buffer)))))
(defun eshell/less (&rest args)
"Invoke `view-file' on a file (ARGS).
\"less +42 foo\" will go to line 42 in the buffer for foo."
(while args
(if (string-match "\\`\\+\\([0-9]+\\)\\'" (car args))
(let* ((line (string-to-number (match-string 1 (pop args))))
(file (pop args)))
(eshell-view-file file)
(forward-line line))
(eshell-view-file (pop args)))))
(defalias 'eshell/more #'eshell/less)))
(use-package xterm-color (use-package xterm-color
:defines (compilation-environment :defines (compilation-environment
@@ -150,11 +90,11 @@
:hook ((eshell-load . eat-eshell-mode) :hook ((eshell-load . eat-eshell-mode)
(eshell-load . eat-eshell-visual-command-mode)) (eshell-load . eat-eshell-visual-command-mode))
:ensure `(eat :repo "https://codeberg.org/akib/emacs-eat" :ensure `(eat :repo "https://codeberg.org/akib/emacs-eat"
:files ("*.el" ("term" "term/*.el") "*.texi" :files ("*.el" ("term" "term/*.el") "*.texi"
"*.ti" ("terminfo/e" "terminfo/e/*") "*.ti" ("terminfo/e" "terminfo/e/*")
("terminfo/65" "terminfo/65/*") ("terminfo/65" "terminfo/65/*")
("integration" "integration/*") ("integration" "integration/*")
(:exclude ".dir-locals.el" "*-tests.el"))) (:exclude ".dir-locals.el" "*-tests.el")))
:custom :custom
(eat-term-name "xterm-256color") (eat-term-name "xterm-256color")
(eat-kill-buffer-on-exit t) (eat-kill-buffer-on-exit t)

View File

@@ -5,6 +5,18 @@
:diminish :diminish
:hook (elpaca-after-init . yas-global-mode) :hook (elpaca-after-init . yas-global-mode)
:hook ((post-self-insert . my/yas-try-expanding-auto-snippets)) :hook ((post-self-insert . my/yas-try-expanding-auto-snippets))
:commands (yas-minor-mode-on
yas-expand
yas-expand-snippet
yas-lookup-snippet
yas-insert-snippet
yas-new-snippet
yas-visit-snippet-file
yas-activate-extra-mode
yas-deactivate-extra-mode
yas-maybe-expand-abbrev-key-filter)
:init
(defvar yas-verbosity 2)
:config :config
(elemacs-load-packages-incrementally '(eldoc easymenu help-mode)) (elemacs-load-packages-incrementally '(eldoc easymenu help-mode))
(use-package warnings (use-package warnings
@@ -26,9 +38,8 @@
(let ((yas-buffer-local-condition ''(require-snippet-condition . auto))) (let ((yas-buffer-local-condition ''(require-snippet-condition . auto)))
(yas-expand))))) (yas-expand)))))
;; Collection of yasnippet snippets (use-package doom-snippets
(use-package yasnippet-snippets) :after yasnippet
:ensure (doom-snippets :type git :host github :repo "doomemacs/snippets" :files ("*.el" "*")))
(provide 'init-snippet) (provide 'init-snippet)

View File

@@ -23,7 +23,8 @@
(LaTeX-mode . visual-line-mode) (LaTeX-mode . visual-line-mode)
(LaTeX-mode . turn-on-reftex) (LaTeX-mode . turn-on-reftex)
(LaTeX-mode . lsp-deferred) (LaTeX-mode . lsp-deferred)
(LaTeX-mode . (lambda () (lsp-ui-mode -1)))) (LaTeX-mode . (lambda () (lsp-ui-mode -1)))
(LaTeX-mode . (lambda () (apheleia-mode -1))))
:bind (:map LaTeX-mode-map :bind (:map LaTeX-mode-map
("C-S-e" . latex-math-from-calc) ("C-S-e" . latex-math-from-calc)
("C-c x" . TeX-clean) ("C-c x" . TeX-clean)
@@ -74,7 +75,14 @@
;; (with-eval-after-load 'eglot ;; (with-eval-after-load 'eglot
;; (add-to-list 'eglot-server-programs '((LaTeX-mode latex-mode) "texlab"))) ;; (add-to-list 'eglot-server-programs '((LaTeX-mode latex-mode) "texlab")))
(setq reftex-plug-into-AUCTeX t)) (setq reftex-plug-into-AUCTeX t)
(use-package texpresso
:ensure (:host github :repo "let-def/texpresso" :files ("emacs/*.el"))
:hook (texpresso-mode . texpresso-sync-mode)
:after auctex
:bind (:map LaTeX-mode-map
("C-c C-p" . texpresso)))
)
(use-package cdlatex (use-package cdlatex
:diminish :diminish
@@ -87,6 +95,7 @@
(?c ("\\circ")) (?c ("\\circ"))
)) ))
(setq cdlatex-math-modify-alist '((?f "\\mathbb" nil t nil nil))) (setq cdlatex-math-modify-alist '((?f "\\mathbb" nil t nil nil)))
(defun tjh/cdlatex-yas-expand () (defun tjh/cdlatex-yas-expand ()
"Resolve the conflict between cdlatex and yasnippet. When this "Resolve the conflict between cdlatex and yasnippet. When this
function returns true, the default `cdlatex-tab` will not be function returns true, the default `cdlatex-tab` will not be
@@ -99,10 +108,42 @@ expansion, then cdlatex expansion."
t t
nil) nil)
nil)) nil))
(add-hook 'cdlatex-tab-hook 'tjh/cdlatex-yas-expand)) (add-hook 'cdlatex-tab-hook 'tjh/cdlatex-yas-expand)
(cdlatex-reset-mode))
;; (use-package texpresso (use-package lazytab
;; :defer nil :demand t
;; :load-path "~/.emacs.d/lisp/packages/") :after cdlatex latex
:ensure '(lazytab :type git :host github :repo "karthink/lazytab" :files ("*.el"))
:bind (:map LaTeX-mode-map
("C-x |" . (lambda () (interactive) (lazytab-position-cursor-and-edit))))
:bind (:map orgtbl-mode-map
("<tab>" . lazytab-org-table-next-field-maybe)
("TAB" . lazytab-org-table-next-field-maybe))
:config
(add-hook 'cdlatex-tab-hook #'lazytab-cdlatex-or-orgtbl-next-field 90)
(dolist (cmd '(("smat" "Insert smallmatrix env"
"\\left( \\begin{smallmatrix} ? \\end{smallmatrix} \\right)"
lazytab-position-cursor-and-edit
nil nil t)
("bmat" "Insert bmatrix env"
"\\begin{bmatrix} ? \\end{bmatrix}"
lazytab-position-cursor-and-edit
nil nil t)
("pmat" "Insert pmatrix env"
"\\begin{pmatrix} ? \\end{pmatrix}"
lazytab-position-cursor-and-edit
nil nil t)
("ali" "Insert pmatrix env"
"\\begin{aligned} ? \\end{aligned}"
lazytab-position-cursor-and-edit
nil nil t)
("tbl" "Insert table"
"\\begin{table}\n\\centering ? \\caption{}\n\\end{table}\n"
lazytab-position-cursor-and-edit
nil t nil)))
(push cmd cdlatex-command-alist))
(cdlatex-reset-mode)
)
(provide 'init-tex) (provide 'init-tex)

View File

@@ -1,28 +1,17 @@
;; -*- lexical-binding: t;-*- ;; -*- lexical-binding: t;-*-
(use-package typst-ts-mode (use-package typst-ts-mode
:ensure (:type git :host codeberg :repo "meow_king/typst-ts-mode") :ensure (:type git :host codeberg :repo "meow_king/typst-ts-mode")
:custom :hook (typst-ts-mode . lsp-deferred)
;; (typst-ts-watch-options "--open")
(typst-ts-mode-grammar-location (expand-file-name "tree-sitter/libtree-sitter-typst.so" user-emacs-directory))
(typst-ts-mode-enable-raw-blocks-highlight t)
:config :config
;; (typst-ts-watch-options "--open")
(setq typst-ts-mode-grammar-location (expand-file-name "tree-sitter/libtree-sitter-typst.so" user-emacs-directory))
(setq typst-ts-mode-enable-raw-blocks-highlight t)
(keymap-set typst-ts-mode-map "C-c C-c" #'typst-ts-tmenu) (keymap-set typst-ts-mode-map "C-c C-c" #'typst-ts-tmenu)
;; (with-eval-after-load 'eglot
;; (with-eval-after-load 'typst-ts-mode
;; (add-to-list 'eglot-server-programs
;; `((typst-ts-mode) .
;; ,(eglot-alternatives `(,typst-ts-lsp-download-path
;; "tinymist"
;; "typst-lsp"))))))
(setq typst-ts-preview-function 'find-file-other-window)) (setq typst-ts-preview-function 'find-file-other-window))
(use-package typst-preview (use-package typst-preview
:ensure (:type git :host github :repo "havarddj/typst-preview.el") :ensure (:type git :host github :repo "havarddj/typst-preview.el")
:init
(setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated
(setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run
:custom :custom
(typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'. (typst-preview-browser "default") ; this is the default option; other options are `eaf-browser' or `xwidget'.
@@ -31,6 +20,8 @@
(typst-preview-partial-rendering t) ; enable partial rendering (typst-preview-partial-rendering t) ; enable partial rendering
:config :config
(setq typst-preview-autostart t) ; start preview automatically when typst-preview-mode is activated
(setq typst-preview-open-browser-automatically t) ; open browser automatically when typst-preview-start is run
(define-key typst-ts-mode-map (kbd "C-c C-j") 'typst-preview-send-position) (define-key typst-ts-mode-map (kbd "C-c C-j") 'typst-preview-send-position)
(define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode)) (define-key typst-ts-mode-map (kbd "C-c C-l") #'typst-preview-mode))

View File

@@ -40,8 +40,15 @@
:bind ("<f5>" . modus-themes-load-random) :bind ("<f5>" . modus-themes-load-random)
:bind ("C-<f5>" . modus-themes-load-random-light) :bind ("C-<f5>" . modus-themes-load-random-light)
:bind ("M-<f5>" . modus-themes-load-random-dark) :bind ("M-<f5>" . modus-themes-load-random-dark)
:init :init
(setq ef-themes-light-themes '(ef-arbutus ef-cyprus ef-day ef-duo-light ef-eagle ef-elea-light
ef-kassio ef-melissa-light ef-orange ef-reverie
ef-spring ef-summer ef-trio-light ef-tritanopia-light))
(setq ef-themes-dark-themes '(ef-autumn ef-bio ef-cherie ef-dark ef-deuteranopia-dark ef-dream
ef-duo-dark ef-elea-dark ef-fig ef-maris-dark
ef-melissa-dark ef-night ef-owl ef-rosa ef-symbiosis
ef-trio-dark ef-tritanopia-dark ef-winter))
;; This makes the Modus commands listed below consider only the Ef ;; This makes the Modus commands listed below consider only the Ef
;; themes. For an alternative that includes Modus and all ;; themes. For an alternative that includes Modus and all
;; derivative themes (like Ef), enable the ;; derivative themes (like Ef), enable the
@@ -53,6 +60,7 @@
(ef-themes-take-over-modus-themes-mode 1)) (ef-themes-take-over-modus-themes-mode 1))
(use-package auto-dark (use-package auto-dark
:when (and (eq system-type 'darwin) (display-graphic-p))
:ensure t :ensure t
;; :custom ;; :custom
;; (auto-dark-themes '((doric-beach) (leuven))) ;; (auto-dark-themes '((doric-beach) (leuven)))
@@ -63,16 +71,17 @@
. (lambda () . (lambda ()
;; something to execute when dark mode is detected ;; something to execute when dark mode is detected
;; (doric-themes-load-random 'dark)) ;; (doric-themes-load-random 'dark))
(modus-themes-load-random-dark) (ef-themes-load-random-dark)
)) ))
(auto-dark-light-mode (auto-dark-light-mode
. (lambda () . (lambda ()
;; something to execute when light mode is detected ;; something to execute when light mode is detected
;; (doric-themes-load-random 'light) ;; (doric-themes-load-random 'light)
(modus-themes-load-random-light) (ef-themes-load-random-light)
)) ))
:hook elpaca-after-init) :hook elpaca-after-init)
(use-package rainbow-delimiters (use-package rainbow-delimiters
:hook ((prog-mode . rainbow-delimiters-mode) :hook ((prog-mode . rainbow-delimiters-mode)
(typst-ts-mode . rainbow-delimiters-mode) (typst-ts-mode . rainbow-delimiters-mode)
@@ -82,20 +91,22 @@
:hook text-mode :hook text-mode
:hook prog-mode) :hook prog-mode)
(use-package mood-line ;; (use-package mood-line
:hook emacs-startup) ;; :hook emacs-startup
;; :custom (mood-line-glyph-alist mood-line-glyphs-fira-code))
;; (use-package doom-modeline (use-package doom-modeline
;; :hook (elpaca-after-init . doom-modeline-mode) :hook (elpaca-after-init . doom-modeline-mode)
;; :config :config
;; (setq doom-modeline-support-imenu t (setq doom-modeline-support-imenu t
;; doom-modeline-height 30 doom-modeline-icons nil
;; doom-modeline-buffer-file-name-style 'relative-from-project doom-modeline-height 30
;; doom-modeline-enable-word-count t doom-modeline-buffer-file-name-style 'relative-from-project
;; ;; doom-modeline-project-name t doom-modeline-enable-word-count t
;; doom-modeline-check 'simple ;; doom-modeline-project-name t
;; doom-modeline-buffer-encoding nil doom-modeline-check 'simple
;; doom-modeline-major-mode-icon nil)) doom-modeline-buffer-encoding nil
doom-modeline-major-mode-icon nil))
(use-package hide-mode-line (use-package hide-mode-line
:autoload turn-off-hide-mode-line-mode :autoload turn-off-hide-mode-line-mode
@@ -114,19 +125,19 @@
window-divider-default-right-width 1) window-divider-default-right-width 1)
(add-hook 'window-setup-hook #'window-divider-mode) (add-hook 'window-setup-hook #'window-divider-mode)
(pcase system-type ;; (pcase system-type
('darwin ; macOS ;; ('darwin ; macOS
(set-face-attribute 'default nil :font "Sarasa Term SC-22") ; 20 * 1.5 (set-face-attribute 'default nil :font "Sarasa Term SC-22") ; 20 * 1.5
(set-face-attribute 'variable-pitch nil :font "Bookerly-22" :weight 'light) (set-face-attribute 'variable-pitch nil :font "Bookerly-20" :weight 'light)
(set-face-attribute 'fixed-pitch nil :font "Sarasa Term SC-22") (set-face-attribute 'fixed-pitch nil :font "Sarasa Mono TC Nerd Font-22")
(add-to-list 'default-frame-alist '(height . 53)) (add-to-list 'default-frame-alist '(height . 53))
(add-to-list 'default-frame-alist '(width . 90))) (add-to-list 'default-frame-alist '(width . 90))
('gnu/linux ; Linux (including Debian) ;; ('gnu/linux ; Linux (including Debian)
(set-face-attribute 'variable-pitch nil :font "Sarasa Mono TC Nerd Font-14") ; 20 * 1.5 ;; (set-face-attribute 'variable-pitch nil :font "Sarasa Mono TC Nerd Font-14") ; 20 * 1.5
(add-to-list 'default-frame-alist '(height . 40)) ;; (add-to-list 'default-frame-alist '(height . 40))
(add-to-list 'default-frame-alist '(width . 90)))) ;; (add-to-list 'default-frame-alist '(width . 90))))
(use-package mixed-pitch (use-package mixed-pitch
:diminish :diminish
@@ -160,26 +171,15 @@
(use-package nerd-icons (use-package nerd-icons
:ensure (nerd-icons :ensure (nerd-icons
:type git :type git
:host github :host github
:repo "rainstormstudio/nerd-icons.el") :repo "rainstormstudio/nerd-icons.el"))
;; :files (:defaults "data")) ;; :files (:defaults "data"))
:custom ;; :custom
;; The Nerd Font you want to use in GUI ;; The Nerd Font you want to use in GUI
;; "Symbols Nerd Font Mono" is the default and is recommended ;; "Symbols Nerd Font Mono" is the default and is recommended
;; but you can use any other Nerd Font if you want ;; but you can use any other Nerd Font if you want
(nerd-icons-font-family "Symbols Nerd Font Mono")) ;; (nerd-icons-font-family "Symbols Nerd Font Mono"))
;; Display transient in child frame
;; (use-package transient-posframe
;; :diminish
;; :commands transient-posframe-mode
;; :custom-face
;; (transient-posframe-border ((t (:inherit posframe-border :background unspecified))))
;; :hook elpaca-after-init
;; :init (setq transient-mode-line-format nil
;; transient-posframe-parameters '((left-fringe . 8)
;; (right-fringe . 8))))
(with-no-warnings (with-no-warnings
(when (featurep 'ns) (when (featurep 'ns)
@@ -188,9 +188,16 @@
;; Don't open a file in a new frame ;; Don't open a file in a new frame
(setq ns-pop-up-frames nil))) (setq ns-pop-up-frames nil)))
(use-package beacon ;; hl current line
:diminish (use-package hl-line
:hook elpaca-after-init) :ensure nil
:hook ((elpaca-after-init . global-hl-line-mode)
((dashboard-mode eshell-mode shell-mode term-mode vterm-mode eat-mode) .
(lambda () (setq-local global-hl-line-mode nil)))))
;; (use-package beacon
;; :diminish
;; :hook elpaca-after-init)
(use-package spacious-padding (use-package spacious-padding
:diminish :diminish
@@ -202,4 +209,8 @@
:bind (([remap eval-defun] . eros-eval-defun) :bind (([remap eval-defun] . eros-eval-defun)
([remap eval-last-sexp] . eros-eval-last-sexp))) ([remap eval-last-sexp] . eros-eval-last-sexp)))
(use-package goggles
:diminish
:hook (prog-mode text-mode conf-mode))
(provide 'init-ui) (provide 'init-ui)

View File

@@ -30,20 +30,6 @@
(which-key-add-key-based-replacements "C-x t" "tabs") (which-key-add-key-based-replacements "C-x t" "tabs")
(which-key-add-key-based-replacements "C-x v" "version control")) (which-key-add-key-based-replacements "C-x v" "version control"))
(use-package grep
:ensure nil
:autoload grep-apply-setting
:init
(when (executable-find "rg")
(grep-apply-setting
'grep-command "rg --color=auto --null -nH --no-heading -e ")
(grep-apply-setting
'grep-template "rg --color=auto --null --no-heading -g '!*/' -e <R> <D>")
(grep-apply-setting
'grep-find-command '("rg --color=auto --null -nH --no-heading -e ''" . 38))
(grep-apply-setting
'grep-find-template "rg --color=auto --null -nH --no-heading -e <R> <D>")))
;; Writable grep buffer ;; Writable grep buffer
(use-package wgrep (use-package wgrep
:init (setq wgrep-auto-save-buffer t :init (setq wgrep-auto-save-buffer t
@@ -51,7 +37,7 @@
;; Fast search tool `ripgrep' ;; Fast search tool `ripgrep'
(use-package rg (use-package rg
;; :hook (elpaca-after-init . rg-enable-default-bindings) :bind ("C-c s" . rg-menu)
:bind (:map rg-global-map :bind (:map rg-global-map
("c" . rg-dwim-current-dir) ("c" . rg-dwim-current-dir)
("f" . rg-dwim-current-file) ("f" . rg-dwim-current-file)
@@ -62,19 +48,37 @@
(rg-enable-default-bindings) (rg-enable-default-bindings)
) )
;; (use-package pdf-tools
;; :config
;; (pdf-tools-install))
;; (use-package saveplace-pdf-view
;; :after pdf-tools
;; :demand t)
;; (use-package keycast
;; :hook (elpaca-after-init . keycast-mode-line-mode)
;; :config
;; (setq keycast-mode-line-remove-tail-elements nil))
(use-package elcord) (use-package elcord)
;; (when (display-graphic-p)
;; (use-package pdf-view
;; :ensure pdf-tools
;; :diminish (pdf-view-themed-minor-mode
;; pdf-view-midnight-minor-mode
;; pdf-view-roll-minor-mode
;; pdf-view-printer-minor-mode)
;; :functions pdf-tools-install
;; :hook ((pdf-tools-enabled . pdf-view-auto-slice-minor-mode)
;; (pdf-tools-enabled . pdf-view-roll-minor-mode)
;; (pdf-tools-enabled . pdf-isearch-minor-mode))
;; ;; :mode ("\\.[pP][dD][fF]\\'" . pdf-view-mode)
;; :magic ("%PDF" . pdf-view-mode)
;; :bind (:map pdf-view-mode-map
;; ("C-s" . isearch-forward))
;; ;; :init (setq pdf-view-use-scaling t
;; ;; pdf-view-use-imagemagick nil)
;; :config
;; ;; Activate the package
;; (pdf-tools-install t nil t nil))
;; ;; Recover last viewed position
;; (use-package saveplace-pdf-view
;; :when (ignore-errors (pdf-info-check-epdfinfo) t)
;; :autoload (saveplace-pdf-view-find-file-advice saveplace-pdf-view-to-alist-advice)
;; :functions pdf-info-check-epdfinfo
;; :init
;; (advice-add 'save-place-find-file-hook :around #'saveplace-pdf-view-find-file-advice)
;; (advice-add 'save-place-to-alist :around #'saveplace-pdf-view-to-alist-advice)))
(provide 'init-utils) (provide 'init-utils)

View File

@@ -14,8 +14,7 @@
:ensure nil :ensure nil
:bind ("C-x C-b" . ibuffer) :bind ("C-x C-b" . ibuffer)
:bind (:map ibuffer-mode-map :bind (:map ibuffer-mode-map
("M-o" . nil)) ("M-o" . nil))
:hook (ibuffer-mode . hl-line-mode)
:config :config
(add-to-list 'ibuffer-help-buffer-modes 'helpful-mode) (add-to-list 'ibuffer-help-buffer-modes 'helpful-mode)
(add-to-list 'ibuffer-help-buffer-modes 'Man-mode) (add-to-list 'ibuffer-help-buffer-modes 'Man-mode)

View File

@@ -3,5 +3,6 @@
# key: frac # key: frac
# group: math # group: math
# name: \frac{numerator}{denominator} # name: \frac{numerator}{denominator}
# condition: (and (texmathp) 'auto)
# -- # --
\frac{${1:numerator}}{${2:denominator}}$0 \frac{${1:numerator}}{${2:denominator}}$0

View File

@@ -4,4 +4,4 @@
# condition: (and (texmathp) 'auto) # condition: (and (texmathp) 'auto)
# group: math # group: math
# -- # --
^{\text{-}1} ^{-1}