mirror of
https://github.com/js0ny/dotfiles.git
synced 2025-12-21 16:53:00 +00:00
Merge branch 'master' of https://github.com/js0ny/dotfiles
This commit is contained in:
commit
fbec6c35a4
33 changed files with 617 additions and 222 deletions
112
bootstrap/components/requirements.txt
Normal file
112
bootstrap/components/requirements.txt
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
anyio==4.8.0
|
||||||
|
argon2-cffi==23.1.0
|
||||||
|
argon2-cffi-bindings==21.2.0
|
||||||
|
arrow==1.3.0
|
||||||
|
asttokens==3.0.0
|
||||||
|
async-lru==2.0.4
|
||||||
|
attrs==25.1.0
|
||||||
|
babel==2.17.0
|
||||||
|
beautifulsoup4==4.13.3
|
||||||
|
bleach==6.2.0
|
||||||
|
certifi==2025.1.31
|
||||||
|
cffi==1.17.1
|
||||||
|
charset-normalizer==3.4.1
|
||||||
|
comm==0.2.2
|
||||||
|
contourpy==1.3.1
|
||||||
|
cycler==0.12.1
|
||||||
|
debugpy==1.8.13
|
||||||
|
decorator==5.2.1
|
||||||
|
defusedxml==0.7.1
|
||||||
|
executing==2.2.0
|
||||||
|
fastjsonschema==2.21.1
|
||||||
|
fonttools==4.56.0
|
||||||
|
fqdn==1.5.1
|
||||||
|
h11==0.14.0
|
||||||
|
httpcore==1.0.7
|
||||||
|
httpx==0.28.1
|
||||||
|
idna==3.10
|
||||||
|
ipykernel==6.29.5
|
||||||
|
ipython==9.0.2
|
||||||
|
ipython-pygments-lexers==1.1.1
|
||||||
|
ipywidgets==8.1.5
|
||||||
|
isoduration==20.11.0
|
||||||
|
jedi==0.19.2
|
||||||
|
jinja2==3.1.6
|
||||||
|
joblib==1.4.2
|
||||||
|
json5==0.10.0
|
||||||
|
jsonpointer==3.0.0
|
||||||
|
jsonschema==4.23.0
|
||||||
|
jsonschema-specifications==2024.10.1
|
||||||
|
jupyter==1.1.1
|
||||||
|
jupyter-client==8.6.3
|
||||||
|
jupyter-console==6.6.3
|
||||||
|
jupyter-core==5.7.2
|
||||||
|
jupyter-events==0.12.0
|
||||||
|
jupyter-lsp==2.2.5
|
||||||
|
jupyter-server==2.15.0
|
||||||
|
jupyter-server-terminals==0.5.3
|
||||||
|
jupyterlab==4.3.5
|
||||||
|
jupyterlab-pygments==0.3.0
|
||||||
|
jupyterlab-server==2.27.3
|
||||||
|
jupyterlab-widgets==3.0.13
|
||||||
|
kiwisolver==1.4.8
|
||||||
|
markupsafe==3.0.2
|
||||||
|
matplotlib==3.10.1
|
||||||
|
matplotlib-inline==0.1.7
|
||||||
|
mistune==3.1.2
|
||||||
|
nbclient==0.10.2
|
||||||
|
nbconvert==7.16.6
|
||||||
|
nbformat==5.10.4
|
||||||
|
nest-asyncio==1.6.0
|
||||||
|
notebook==7.3.2
|
||||||
|
notebook-shim==0.2.4
|
||||||
|
numpy==2.2.3
|
||||||
|
overrides==7.7.0
|
||||||
|
packaging==24.2
|
||||||
|
pandas==2.2.3
|
||||||
|
pandocfilters==1.5.1
|
||||||
|
parso==0.8.4
|
||||||
|
pexpect==4.9.0
|
||||||
|
pillow==11.1.0
|
||||||
|
platformdirs==4.3.6
|
||||||
|
prometheus-client==0.21.1
|
||||||
|
prompt-toolkit==3.0.50
|
||||||
|
psutil==7.0.0
|
||||||
|
ptyprocess==0.7.0
|
||||||
|
pure-eval==0.2.3
|
||||||
|
pycparser==2.22
|
||||||
|
pygments==2.19.1
|
||||||
|
pyparsing==3.2.1
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
python-json-logger==3.3.0
|
||||||
|
pytz==2025.1
|
||||||
|
pyyaml==6.0.2
|
||||||
|
pyzmq==26.2.1
|
||||||
|
referencing==0.36.2
|
||||||
|
requests==2.32.3
|
||||||
|
rfc3339-validator==0.1.4
|
||||||
|
rfc3986-validator==0.1.1
|
||||||
|
rpds-py==0.23.1
|
||||||
|
scikit-learn==1.6.1
|
||||||
|
scipy==1.15.2
|
||||||
|
send2trash==1.8.3
|
||||||
|
setuptools==76.0.0
|
||||||
|
six==1.17.0
|
||||||
|
sniffio==1.3.1
|
||||||
|
soupsieve==2.6
|
||||||
|
stack-data==0.6.3
|
||||||
|
terminado==0.18.1
|
||||||
|
threadpoolctl==3.5.0
|
||||||
|
tinycss2==1.4.0
|
||||||
|
tornado==6.4.2
|
||||||
|
traitlets==5.14.3
|
||||||
|
types-python-dateutil==2.9.0.20241206
|
||||||
|
typing-extensions==4.12.2
|
||||||
|
tzdata==2025.1
|
||||||
|
uri-template==1.3.0
|
||||||
|
urllib3==2.3.0
|
||||||
|
wcwidth==0.2.13
|
||||||
|
webcolors==24.11.1
|
||||||
|
webencodings==0.5.1
|
||||||
|
websocket-client==1.8.0
|
||||||
|
widgetsnbextension==4.0.13
|
||||||
|
|
@ -78,7 +78,7 @@ KrohnkiteFocusRight=Meta+I,none,Krohnkite: Focus Right
|
||||||
KrohnkiteFocusUp=Meta+E,none,Krohnkite: Focus Up
|
KrohnkiteFocusUp=Meta+E,none,Krohnkite: Focus Up
|
||||||
KrohnkiteGrowHeight=Meta+Ctrl+N,none,Krohnkite: Grow Height
|
KrohnkiteGrowHeight=Meta+Ctrl+N,none,Krohnkite: Grow Height
|
||||||
KrohnkiteIncrease=none,none,Krohnkite: Increase
|
KrohnkiteIncrease=none,none,Krohnkite: Increase
|
||||||
KrohnkiteMonocleLayout=Meta+M,none,Krohnkite: Monocle Layout
|
KrohnkiteMonocleLayout=none,none,Krohnkite: Monocle Layout
|
||||||
KrohnkiteNextLayout=Meta+\\\\,none,Krohnkite: Next Layout
|
KrohnkiteNextLayout=Meta+\\\\,none,Krohnkite: Next Layout
|
||||||
KrohnkitePreviousLayout=Meta+|,none,Krohnkite: Previous Layout
|
KrohnkitePreviousLayout=Meta+|,none,Krohnkite: Previous Layout
|
||||||
KrohnkiteQuarterLayout=none,none,Krohnkite: Quarter Layout
|
KrohnkiteQuarterLayout=none,none,Krohnkite: Quarter Layout
|
||||||
|
|
|
||||||
|
|
@ -325,7 +325,7 @@ const searchAliases = [
|
||||||
["yt", "YouTube", "https://www.youtube.com/results?search_query="],
|
["yt", "YouTube", "https://www.youtube.com/results?search_query="],
|
||||||
];
|
];
|
||||||
|
|
||||||
api.unmap("on")
|
api.unmap("on");
|
||||||
|
|
||||||
// Add all search aliases
|
// Add all search aliases
|
||||||
searchAliases.forEach(([alias, name, url]) => {
|
searchAliases.forEach(([alias, name, url]) => {
|
||||||
|
|
@ -657,11 +657,35 @@ mapkey(
|
||||||
},
|
},
|
||||||
{ domain: /perplexity.ai/ },
|
{ domain: /perplexity.ai/ },
|
||||||
);
|
);
|
||||||
|
mapkey(
|
||||||
|
",M",
|
||||||
|
"Toggle [M]odel switching",
|
||||||
|
function () {
|
||||||
|
q("div.rounded-md").querySelectorAll("span")[2].click();
|
||||||
|
//setTimeout(() => {
|
||||||
|
// // Wait for the DOM to update
|
||||||
|
// qs("div.shadow-subtle div.group\\/item")[0].click();
|
||||||
|
//}, 100);
|
||||||
|
},
|
||||||
|
{ domain: /perplexity.ai/ },
|
||||||
|
);
|
||||||
|
mapkey(
|
||||||
|
",m",
|
||||||
|
"Toggle default [m]odel (Claude 3.7 Sonnet)",
|
||||||
|
function () {
|
||||||
|
q("div.rounded-md").querySelectorAll("span")[1].click();
|
||||||
|
setTimeout(() => {
|
||||||
|
// Wait for the DOM to update
|
||||||
|
qs("div.shadow-subtle div.group\\/item")[3].click();
|
||||||
|
}, 100);
|
||||||
|
},
|
||||||
|
{ domain: /perplexity.ai/ },
|
||||||
|
);
|
||||||
mapkey(
|
mapkey(
|
||||||
",w",
|
",w",
|
||||||
"Toggle [w]riting/[w]eb Search",
|
"Toggle [w]riting/[w]eb Search",
|
||||||
function () {
|
function () {
|
||||||
q("div.rounded-md").querySelectorAll("span")[1].click();
|
q("div.rounded-md").querySelectorAll("span")[2].click();
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
// Wait for the DOM to update
|
// Wait for the DOM to update
|
||||||
qs("div.shadow-subtle div.group\\/item")[0].click();
|
qs("div.shadow-subtle div.group\\/item")[0].click();
|
||||||
|
|
@ -690,8 +714,8 @@ mapkey(
|
||||||
{ domain: /perplexity.ai/ },
|
{ domain: /perplexity.ai/ },
|
||||||
);
|
);
|
||||||
mapkey(
|
mapkey(
|
||||||
",r",
|
",R",
|
||||||
"Change model to [r]egenerate last output",
|
"Change model to [R]egenerate last output",
|
||||||
function () {
|
function () {
|
||||||
var toolbars = qs("div.mt-sm");
|
var toolbars = qs("div.mt-sm");
|
||||||
var last = toolbars[toolbars.length - 1];
|
var last = toolbars[toolbars.length - 1];
|
||||||
|
|
@ -701,15 +725,13 @@ mapkey(
|
||||||
{ domain: /perplexity.ai/ },
|
{ domain: /perplexity.ai/ },
|
||||||
);
|
);
|
||||||
mapkey(
|
mapkey(
|
||||||
",R",
|
",r",
|
||||||
"Toggle [R]easoning with [R]1",
|
"Toggle [r]easoning",
|
||||||
function () {
|
function () {
|
||||||
var btns = qs("span.grow button");
|
q("div.rounded-md").querySelectorAll("span")[0].click();
|
||||||
btns[0].click();
|
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
// Wait for the DOM to update
|
// Wait for the DOM to update
|
||||||
qs("div.shadow-subtle div.group\\/item")[2].click();
|
qs("div.shadow-subtle div.group\\/item")[2].click();
|
||||||
qs("div.group\\/item")[2].click(); // Mobile view
|
|
||||||
}, 100);
|
}, 100);
|
||||||
},
|
},
|
||||||
{ domain: /perplexity.ai/ },
|
{ domain: /perplexity.ai/ },
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
;; accept. For example:
|
;; accept. For example:
|
||||||
;;
|
;;
|
||||||
;; https://emacs-china.org/t/doom-emacs/23513/13
|
;; https://emacs-china.org/t/doom-emacs/23513/13
|
||||||
(setq doom-font (font-spec :family "LXGW WenKai Mono" :size 14)
|
(setq doom-font (font-spec :family "Iosevka Nerd Font Propo" :size 14)
|
||||||
doom-serif-font doom-font
|
doom-serif-font doom-font
|
||||||
doom-symbol-font (font-spec :family "LXGW WenKai Mono")
|
doom-symbol-font (font-spec :family "LXGW WenKai Mono")
|
||||||
doom-variable-pitch-font (font-spec :family "LXGW WenKai Mono" :weight 'extra-bold))
|
doom-variable-pitch-font (font-spec :family "LXGW WenKai Mono" :weight 'extra-bold))
|
||||||
|
|
|
||||||
|
|
@ -8,8 +8,8 @@
|
||||||
:nvom "n" 'evil-next-line
|
:nvom "n" 'evil-next-line
|
||||||
:nvom "e" 'evil-previous-line
|
:nvom "e" 'evil-previous-line
|
||||||
:nvom "i" 'evil-forward-char
|
:nvom "i" 'evil-forward-char
|
||||||
:nv "H" 'evil-prev-buffer
|
:nvm "H" 'evil-prev-buffer
|
||||||
:nv "I" 'evil-next-buffer
|
:nvm "I" 'evil-next-buffer
|
||||||
:nvom "N" '(lambda () (interactive) (evil-next-line 5)) ; 5n
|
:nvom "N" '(lambda () (interactive) (evil-next-line 5)) ; 5n
|
||||||
:nvom "E" '(lambda () (interactive) (evil-previous-line 5)) ; 5e
|
:nvom "E" '(lambda () (interactive) (evil-previous-line 5)) ; 5e
|
||||||
:nvom "C-w n" 'evil-window-down
|
:nvom "C-w n" 'evil-window-down
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,7 @@
|
||||||
;;emms
|
;;emms
|
||||||
;;everywhere ; *leave* Emacs!? You must be joking
|
;;everywhere ; *leave* Emacs!? You must be joking
|
||||||
;;irc ; how neckbeards socialize
|
;;irc ; how neckbeards socialize
|
||||||
;;(rss +org) ; emacs as an RSS reader
|
(rss +org) ; emacs as an RSS reader
|
||||||
|
|
||||||
:config
|
:config
|
||||||
;;literate
|
;;literate
|
||||||
|
|
|
||||||
8
tools/doom/snippets/org-mode/align-math
Normal file
8
tools/doom/snippets/org-mode/align-math
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# -*- mode: snippet -*-
|
||||||
|
# name: align-math
|
||||||
|
# key: BAL
|
||||||
|
# expand-env: ((yas-indent-line 'fixed))
|
||||||
|
# --
|
||||||
|
\\begin{align*}
|
||||||
|
$1
|
||||||
|
\\end{align*}
|
||||||
|
|
@ -2,8 +2,7 @@
|
||||||
# name: display-math
|
# name: display-math
|
||||||
# key: dm
|
# key: dm
|
||||||
# expand-env: ((yas-indent-line 'fixed))
|
# expand-env: ((yas-indent-line 'fixed))
|
||||||
# trigger-key: ""
|
|
||||||
# --
|
# --
|
||||||
$$
|
\\[
|
||||||
$1
|
$1
|
||||||
$$
|
\\]
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,4 @@
|
||||||
# key: mk
|
# key: mk
|
||||||
# expand-env: ((yas-indent-line 'fixed))
|
# expand-env: ((yas-indent-line 'fixed))
|
||||||
# --
|
# --
|
||||||
$$1$
|
\\( $1 \\)
|
||||||
|
|
|
||||||
6
tools/doom/snippets/org-mode/limit
Normal file
6
tools/doom/snippets/org-mode/limit
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- mode: snippet -*-
|
||||||
|
# name: Limit
|
||||||
|
# key: lim
|
||||||
|
# condition: (org-inside-LaTeX-fragment-p)
|
||||||
|
# --
|
||||||
|
\\lim_{$1 \to $2} $0
|
||||||
6
tools/doom/snippets/org-mode/summation
Normal file
6
tools/doom/snippets/org-mode/summation
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# -*- mode: snippet -*-
|
||||||
|
# name: Summation
|
||||||
|
# key: sum
|
||||||
|
# condition: (org-inside-LaTeX-fragment-p)
|
||||||
|
# --
|
||||||
|
\\sum_{$1}^{$2} $0
|
||||||
1
tools/emacs.d/early-init.el
Normal file
1
tools/emacs.d/early-init.el
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
(setq package-enable-at-startup nil)
|
||||||
|
|
@ -14,7 +14,19 @@
|
||||||
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
|
(add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory))
|
||||||
|
|
||||||
;; Store the auto-generated custom config to `custom.el`
|
;; Store the auto-generated custom config to `custom.el`
|
||||||
(setq custom-file (expand-file-name "custom.el" user-emacs-directory))
|
(setq custom-file (expand-file-name ".custom.el" user-emacs-directory))
|
||||||
|
|
||||||
|
|
||||||
|
(defvar xdg-data-home
|
||||||
|
(or (getenv "XDG_DATA_HOME")
|
||||||
|
(expand-file-name "~/.local/share")))
|
||||||
|
|
||||||
|
(defvar xdg-cache-home
|
||||||
|
(or (getenv "XDG_CACHE_HOME")
|
||||||
|
(expand-file-name "~/.local/cache")))
|
||||||
|
|
||||||
|
(defvar user-emacs-data (expand-file-name "emacs" xdg-data-home))
|
||||||
|
(defvar user-emacs-cache (expand-file-name "emacs" xdg-cache-home))
|
||||||
|
|
||||||
;; Load each modules
|
;; Load each modules
|
||||||
(require 'init-package) ; package manager should be loaded first
|
(require 'init-package) ; package manager should be loaded first
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
;;; init-appearance.el
|
;;; init-appearance.el
|
||||||
|
|
||||||
;; Set Font - JetBrains Mono Nerd Font
|
|
||||||
(when (display-graphic-p)
|
(when (display-graphic-p)
|
||||||
(add-to-list 'default-frame-alist '(font . "JetBrainsMono NF")))
|
(add-to-list 'default-frame-alist '(font . "Sarasa Mono SC")))
|
||||||
|
|
||||||
;; Set CJK Display Font - LXGW Wenkai Mono
|
;; Set CJK Display Font
|
||||||
(dolist (charset '(kana han cjk-misc bopomofo))
|
(dolist (charset '(kana han cjk-misc bopomofo))
|
||||||
(set-fontset-font t charset (font-spec :family "霞鹜文楷等宽")))
|
(set-fontset-font t charset (font-spec :family "Sarasa Mono SC")))
|
||||||
|
|
||||||
;; Icon Support
|
;; Icon Support
|
||||||
;; Once installed, Manually install the fonts required:
|
;; Once installed, Manually install the fonts required:
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
|
|
||||||
;; https://book.emacs-china.org/#orgcfd105e Open with Emacs
|
;; https://book.emacs-china.org/#orgcfd105e Open with Emacs
|
||||||
(server-mode 1)
|
;; (server-mode 1)
|
||||||
|
|
||||||
|
|
||||||
(require 'recentf)
|
(require 'recentf)
|
||||||
|
|
@ -33,5 +33,41 @@
|
||||||
:config
|
:config
|
||||||
(setq alert-default-style 'libnotify))
|
(setq alert-default-style 'libnotify))
|
||||||
|
|
||||||
|
;; 设置 Emacs 备份和自动保存目录
|
||||||
|
(defvar user-backup-directory (expand-file-name "backups" user-emacs-data))
|
||||||
|
(defvar user-autosaves-directory (expand-file-name "autosaves" user-emacs-cache))
|
||||||
|
|
||||||
|
;; 创建目录(如果不存在)
|
||||||
|
(dolist (dir (list user-backup-directory user-autosaves-directory))
|
||||||
|
(unless (file-exists-p dir)
|
||||||
|
(make-directory dir t)
|
||||||
|
(message "Creating directory: %s" dir)))
|
||||||
|
|
||||||
|
;; 配置备份文件目录
|
||||||
|
(setq backup-directory-alist `(("." . ,user-backup-directory)))
|
||||||
|
|
||||||
|
(when (boundp 'project-list-file)
|
||||||
|
(setq project-list-file (expand-file-name "projects-list" user-emacs-data)))
|
||||||
|
|
||||||
|
;; 配置自动保存文件目录
|
||||||
|
(setq auto-save-file-name-transforms
|
||||||
|
`((".*" ,user-autosaves-directory t)))
|
||||||
|
|
||||||
|
;; 配置自动保存列表文件前缀
|
||||||
|
(setq auto-save-list-file-prefix
|
||||||
|
(expand-file-name "auto-save-list/.saves-" user-autosaves-directory))
|
||||||
|
|
||||||
|
;; TRAMP 远程文件的备份设置
|
||||||
|
(setq tramp-backup-directory-alist (copy-tree backup-directory-alist))
|
||||||
|
|
||||||
|
|
||||||
|
;; 备份设置(可选)
|
||||||
|
(setq backup-by-copying t ; 使用复制而非重命名
|
||||||
|
delete-old-versions t ; 自动删除旧版本
|
||||||
|
kept-new-versions 6 ; 保留的新版本数量
|
||||||
|
kept-old-versions 2 ; 保留的旧版本数量
|
||||||
|
version-control t) ; 使用版本号
|
||||||
|
|
||||||
|
|
||||||
;; Export module
|
;; Export module
|
||||||
(provide 'init-basic)
|
(provide 'init-basic)
|
||||||
|
|
|
||||||
|
|
@ -60,9 +60,25 @@
|
||||||
|
|
||||||
;; Avy - act like Vim Easymotion
|
;; Avy - act like Vim Easymotion
|
||||||
(use-package avy
|
(use-package avy
|
||||||
|
:ensure t
|
||||||
:config
|
:config
|
||||||
(evil-define-key '(normal) 'global (kbd "T") 'avy-goto-char)
|
(evil-define-key '(normal) 'global (kbd "T") 'avy-goto-char)
|
||||||
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2)
|
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2)
|
||||||
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2-above))
|
(evil-define-key '(normal) 'global (kbd "s") 'avy-goto-char-2-above))
|
||||||
|
|
||||||
|
(use-package yasnippet
|
||||||
|
:ensure t
|
||||||
|
:defer t
|
||||||
|
:commands yas-minor-mode
|
||||||
|
:hook ((prog-mode . yas-minor-mode)
|
||||||
|
(org-mode . yas-minor-mode))
|
||||||
|
:config
|
||||||
|
(setq yas-indent-line 'fixed) ;; 让 snippet 展开时不影响缩进
|
||||||
|
(setq yas-wrap-around-region nil) ;; 关闭自动包裹选中区域
|
||||||
|
(advice-add 'yas-expand-snippet :around
|
||||||
|
(lambda (orig-fn &rest args)
|
||||||
|
(let ((inhibit-field-text-motion t)) ;; 禁止字段自动换行
|
||||||
|
(apply orig-fn args))))
|
||||||
|
(yas-reload-all))
|
||||||
|
|
||||||
(provide 'init-edit)
|
(provide 'init-edit)
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,8 @@
|
||||||
(global-evil-leader-mode)
|
(global-evil-leader-mode)
|
||||||
(evil-leader/set-leader "<SPC>")
|
(evil-leader/set-leader "<SPC>")
|
||||||
(evil-leader/set-key
|
(evil-leader/set-key
|
||||||
"b" 'buffer-menu))
|
"b" 'buffer-menu
|
||||||
|
"ft" 'treemacs))
|
||||||
|
|
||||||
;; Evil Commentary: Use gc<action> to toggle comments
|
;; Evil Commentary: Use gc<action> to toggle comments
|
||||||
(use-package evil-commentary
|
(use-package evil-commentary
|
||||||
|
|
@ -65,4 +66,7 @@
|
||||||
;; other faces such as `diff-added` will be used for other actions
|
;; other faces such as `diff-added` will be used for other actions
|
||||||
(evil-goggles-use-diff-faces))
|
(evil-goggles-use-diff-faces))
|
||||||
|
|
||||||
|
(with-eval-after-load 'evil
|
||||||
|
(evil-set-initial-state 'org-agenda-mode 'motion))
|
||||||
|
|
||||||
(provide 'init-evil)
|
(provide 'init-evil)
|
||||||
|
|
|
||||||
|
|
@ -37,9 +37,6 @@
|
||||||
("C-x t C-t" . treemacs-find-file)
|
("C-x t C-t" . treemacs-find-file)
|
||||||
("C-x t M-t" . treemacs-find-tag)
|
("C-x t M-t" . treemacs-find-tag)
|
||||||
)
|
)
|
||||||
:config
|
|
||||||
(evil-leader/set-key
|
|
||||||
"ft" 'treemacs)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
(use-package treemacs-evil
|
(use-package treemacs-evil
|
||||||
|
|
@ -47,12 +44,25 @@
|
||||||
:ensure t
|
:ensure t
|
||||||
:config
|
:config
|
||||||
;; Evil treemacs state bindings
|
;; Evil treemacs state bindings
|
||||||
(define-key evil-treemacs-state-map (kbd "n") #'treemacs-next-line)
|
(evil-define-key evil-treemacs-state-map
|
||||||
(define-key evil-treemacs-state-map (kbd "e") #'treemacs-previous-line)
|
"n" #'treemacs-next-line
|
||||||
(define-key evil-treemacs-state-map (kbd "N") #'treemacs-next-neighbour)
|
"e" #'treemacs-previous-line
|
||||||
(define-key evil-treemacs-state-map (kbd "E") #'treemacs-previous-neighbour)
|
"N" #'treemacs-next-neighbour
|
||||||
(define-key evil-treemacs-state-map (kbd "H") #'treemacs-toggle-show-dotfiles)
|
"E" #'treemacs-previous-neighbour
|
||||||
(define-key evil-treemacs-state-map (kbd "I") #'treemacs-hide-gitignored-files-mode)
|
"H" #'treemacs-toggle-show-dotfiles
|
||||||
|
"I" #'treemacs-hide-gitignored-files-mode
|
||||||
|
"i" #'treemacs-RET-action
|
||||||
|
"a" #'treemacs-create-file
|
||||||
|
"A" #'treemacs-create-dir
|
||||||
|
"c" #'treemacs-copy-file
|
||||||
|
"x" #'treemacs-move-file
|
||||||
|
"d" #'treemacs-delete-file
|
||||||
|
"r" #'treemacs-rename-file
|
||||||
|
"q" #'treemacs-quit
|
||||||
|
"y" #'treemacs-copy-relative-path-at-point
|
||||||
|
"Y" #'treemacs-copy-absolute-path-at-point
|
||||||
|
"m" #'treemacs-mark-or-unmark-path-at-point)
|
||||||
|
|
||||||
;; Treemacs mode specific binding
|
;; Treemacs mode specific binding
|
||||||
(evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action))
|
(evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,6 @@
|
||||||
;; Once this is defined, `M-x open-init-file` will open this file
|
;; Once this is defined, `M-x open-init-file` will open this file
|
||||||
(defun open-org-config()
|
(defun open-org-config()
|
||||||
(interactive) ;; Mark function as `interactive` that allows user to access by M-x open-init-file RET
|
(interactive) ;; Mark function as `interactive` that allows user to access by M-x open-init-file RET
|
||||||
(find-file "~/.emacs.d/lisp/init-org.el"))
|
(find-file "~/.dotfiles/tools/emacs.d/lisp/init-org.el"))
|
||||||
|
|
||||||
(provide 'init-keymaps)
|
(provide 'init-keymaps)
|
||||||
|
|
|
||||||
|
|
@ -3,22 +3,24 @@
|
||||||
;; Use =M-x org-mode-restart= to take effects
|
;; Use =M-x org-mode-restart= to take effects
|
||||||
;; After =M-x eval-buffer=
|
;; After =M-x eval-buffer=
|
||||||
|
|
||||||
|
;; Org General
|
||||||
|
|
||||||
(use-package org
|
(use-package org
|
||||||
:ensure nil ;; Use Emacs built-in Org Mode
|
:straight (:type built-in) ;; Tell straight to not install org
|
||||||
:config
|
:config
|
||||||
(setq org-log-done 'time)
|
(setq org-log-done 'time)
|
||||||
(setq org-startup-indented t)
|
(setq org-startup-indented nil)
|
||||||
;; Use inline image
|
;; Use inline image
|
||||||
(setq org-startup-with-inline-images t)
|
(setq org-startup-with-inline-images t)
|
||||||
(setq org-display-remote-inline-images 'cache) ; 预览网络图片
|
(setq org-display-remote-inline-images 'cache) ; 预览网络图片
|
||||||
|
|
||||||
;; Use LaTeX rendering
|
;; Use LaTeX rendering
|
||||||
(setq org-startup-with-latex-preview t)
|
(setq org-startup-with-latex-preview nil)
|
||||||
(setq org-image-actual-width 600)
|
(setq org-image-actual-width 600)
|
||||||
;; Conceal on markup markers
|
;; Conceal on markup markers
|
||||||
(setq org-hide-emphasis-markers t)
|
(setq org-hide-emphasis-markers t)
|
||||||
(setq org-directory "~/OrgFiles")
|
(setq org-directory "~/OrgFiles/")
|
||||||
(setq org-agenda-files '("~/OrgFiles"))
|
(setq org-agenda-files (list (concat org-directory "tasks/")))
|
||||||
(setq org-pretty-entities t)
|
(setq org-pretty-entities t)
|
||||||
(setq org-src-fontify-natively t)
|
(setq org-src-fontify-natively t)
|
||||||
(setq org-src-tab-acts-natively t) ; Use TAB to indent inside source block
|
(setq org-src-tab-acts-natively t) ; Use TAB to indent inside source block
|
||||||
|
|
@ -29,6 +31,7 @@
|
||||||
(evil-define-key 'normal org-mode-map (kbd "SPC a") 'org-agenda-list) ; TODO: Here Simulates the leader
|
(evil-define-key 'normal org-mode-map (kbd "SPC a") 'org-agenda-list) ; TODO: Here Simulates the leader
|
||||||
)
|
)
|
||||||
|
|
||||||
|
;; Org Styling
|
||||||
|
|
||||||
;; Set Org Styles
|
;; Set Org Styles
|
||||||
(setq org-emphasis-alist
|
(setq org-emphasis-alist
|
||||||
|
|
@ -40,33 +43,18 @@
|
||||||
("+" (:strike-through t))))
|
("+" (:strike-through t))))
|
||||||
|
|
||||||
|
|
||||||
|
;; Org Preview
|
||||||
|
|
||||||
;; Better LaTeX preview
|
;; Better LaTeX preview
|
||||||
|
|
||||||
|
(setq org-latex-preview-ltxpng-directory (expand-file-name "emacs/org/latex" xdg-cache-home))
|
||||||
|
(setq org-preview-latex-default-process 'dvisvgm)
|
||||||
|
(setq org-format-latex-options (plist-put org-format-latex-options :scale 0.8))
|
||||||
|
|
||||||
(use-package org-fragtog
|
(use-package org-fragtog
|
||||||
:after org
|
:after org
|
||||||
:hook (org-mode . org-fragtog-mode))
|
:hook (org-mode . org-fragtog-mode))
|
||||||
|
|
||||||
;; Run source block with C-c C-c
|
|
||||||
;; Add supports for non-elisp langs
|
|
||||||
(use-package ob-python
|
|
||||||
:ensure nil ; Part of Org Mode
|
|
||||||
:after org)
|
|
||||||
|
|
||||||
(use-package ob-C ;; C++ support is integrated in ob-C
|
|
||||||
:ensure nil ; Part of Org Mode
|
|
||||||
:after org)
|
|
||||||
|
|
||||||
(org-babel-do-load-languages
|
|
||||||
'org-babel-load-languages
|
|
||||||
'(
|
|
||||||
(python . t) ; No need to declare C/C++/emacs-lisp since is integrated
|
|
||||||
(shell . t)
|
|
||||||
))
|
|
||||||
;; Use clang as default C/C++ Compiler (Easier to install and configure in Windows)
|
|
||||||
(setq org-babel-C-compiler "clang")
|
|
||||||
(setq org-babel-C++-compiler "clang++")
|
|
||||||
;; Don't ask me again when running source block
|
|
||||||
(setq org-confirm-babel-evaluate nil)
|
|
||||||
|
|
||||||
;; Pasting Images
|
;; Pasting Images
|
||||||
;; Use =M-x org-download-clipboard= to paste image
|
;; Use =M-x org-download-clipboard= to paste image
|
||||||
;; Additional program required: magick
|
;; Additional program required: magick
|
||||||
|
|
@ -105,26 +93,107 @@
|
||||||
;; Pomodoro for org clock
|
;; Pomodoro for org clock
|
||||||
(use-package org-pomodoro)
|
(use-package org-pomodoro)
|
||||||
|
|
||||||
;; Org Styles Integration
|
|
||||||
(use-package org-modern
|
(use-package org-modern
|
||||||
:ensure t
|
:ensure t
|
||||||
:after (org)
|
|
||||||
:config
|
:config
|
||||||
(with-eval-after-load 'org (global-org-modern-mode))
|
(setopt org-modern-star 'replace
|
||||||
;; https://github.com/minad/org-modern/issues/232
|
org-modern-replace-stars '("§")
|
||||||
(setq org-modern-fold-stars
|
org-modern-hide-stars "§")
|
||||||
'(("▶" . "▼")
|
(setopt org-modern-list '((?- . "•")))
|
||||||
("▷" . "▽")
|
(setopt org-modern-timestamp '(" %Y-%m-%d " . " %H:%M "))
|
||||||
;; ("⯈" . "⯆")
|
(setopt org-modern-block-fringe nil)
|
||||||
("▷" . "▽")
|
|
||||||
("▹" . "▿")
|
;; https://github.com/neoheartbeats/.emacs.d/blob/main/lisp/init-org.el#L126C1-L159C47
|
||||||
("▸" . "▾"))
|
(defun sthenno/org-modern-spacing ()
|
||||||
)
|
"Adjust line-spacing for `org-modern' to correct svg display."
|
||||||
)
|
|
||||||
|
;; FIXME: This may not set properly
|
||||||
|
(setq-local line-spacing (cond ((eq major-mode #'org-mode) 0.20)
|
||||||
|
(t nil))))
|
||||||
|
(add-hook 'org-mode-hook #'sthenno/org-modern-spacing)
|
||||||
|
|
||||||
|
|
||||||
|
;; Hooks
|
||||||
|
(add-hook 'org-mode-hook #'org-modern-mode))
|
||||||
|
|
||||||
|
;; WARNING: This package will cause infinite recursion when initialising org
|
||||||
|
;; Test on 2025-03-14 Emacs 30 and Arch Linux
|
||||||
|
;(use-package mixed-pitch
|
||||||
|
; :hook
|
||||||
|
; (text-mode . org-mode))
|
||||||
|
|
||||||
|
;; Org Agenda
|
||||||
|
|
||||||
|
(with-eval-after-load 'org-agenda
|
||||||
|
(evil-define-key 'motion org-agenda-mode-map
|
||||||
|
(kbd "n") #'org-agenda-next-line
|
||||||
|
(kbd "e") #'org-agenda-previous-line
|
||||||
|
(kbd "gn") #'org-agenda-next-item
|
||||||
|
(kbd "ge") #'org-agenda-previous-item
|
||||||
|
(kbd "N") #'org-agenda-priority-up
|
||||||
|
(kbd "E") #'org-agenda-priority-down
|
||||||
|
(kbd "i") #'evil-forward-char
|
||||||
|
(kbd ",") #'org-agenda-priority
|
||||||
|
(kbd "x") #'org-agenda-todo
|
||||||
|
(kbd "t") #'org-agenda-set-tags
|
||||||
|
(kbd "w") #'org-save-all-org-buffers
|
||||||
|
(kbd "ds") #'org-agenda-schedule
|
||||||
|
(kbd "dd") #'org-agenda-deadline
|
||||||
|
(kbd "$") #'org-agenda-archive
|
||||||
|
(kbd "!") #'org-agenda-toggle-deadlines
|
||||||
|
(kbd "cp") #'org-pomodoro
|
||||||
|
(kbd "vd") #'org-agenda-day-view
|
||||||
|
(kbd "vw") #'org-agenda-week-view
|
||||||
|
(kbd "vm") #'org-agenda-month-view
|
||||||
|
(kbd "vy") #'org-agenda-year-view
|
||||||
|
(kbd "v.") #'org-agenda-reset-view))
|
||||||
|
|
||||||
|
(evil-leader/set-key "A" #'org-agenda)
|
||||||
|
|
||||||
|
(setq org-agenda-prefix-format '((agenda . " %i %-12:c%?-12t% s")
|
||||||
|
(todo . " %i %-12:c %e")
|
||||||
|
(tags . " %i %-12:c %e ")
|
||||||
|
(search . " %i %-12:c %e ")))
|
||||||
|
|
||||||
|
|
||||||
|
;; Org Babel
|
||||||
|
|
||||||
|
;; Run source block with C-c C-c
|
||||||
|
;; Add supports for non-elisp langs
|
||||||
|
(use-package ob-python
|
||||||
|
:straight (:type built-in) ; Part of Org Mode
|
||||||
|
:after org)
|
||||||
|
|
||||||
|
(use-package ob-C ;; C++ support is integrated in ob-C
|
||||||
|
:straight (:type built-in) ; Part of Org Mode
|
||||||
|
:after org)
|
||||||
|
|
||||||
|
(org-babel-do-load-languages
|
||||||
|
'org-babel-load-languages
|
||||||
|
'(
|
||||||
|
(python . t) ; No need to declare C/C++/emacs-lisp since is integrated
|
||||||
|
(shell . t)
|
||||||
|
))
|
||||||
|
;; Don't ask me again when running source block
|
||||||
|
;; Use clang as default C/C++ Compiler on macOS and Windows
|
||||||
|
(setq org-confirm-babel-evaluate nil)
|
||||||
|
(if (not (eq system-type 'gnu/linux))
|
||||||
|
(setq org-babel-C-compiler "clang"))
|
||||||
|
|
||||||
|
(setq org-babel-default-header-args:C
|
||||||
|
'((:includes . "<stdio.h> <stdlib.h> <string.h>")))
|
||||||
|
|
||||||
|
(setq org-babel-default-header-args:C++
|
||||||
|
'((:includes . "<iostream> <vector>")))
|
||||||
|
|
||||||
|
;; Org Export
|
||||||
|
|
||||||
|
;; icalendar
|
||||||
|
|
||||||
|
(setq org-icalendar-use-scheduled '(event-if-todo event-if-not-todo))
|
||||||
|
(setq org-icalendar-use-deadline '(event-if-todo event-if-not-todo))
|
||||||
|
(setq org-icalendar-combined-agenda-file "~/Dropbox/org.ics")
|
||||||
|
|
||||||
(use-package mixed-pitch
|
|
||||||
:hook
|
|
||||||
(text-mode . org-mode))
|
|
||||||
|
|
||||||
;; Integrate Emacs Timer with System Notifications
|
;; Integrate Emacs Timer with System Notifications
|
||||||
;; 定义通知函数
|
;; 定义通知函数
|
||||||
|
|
|
||||||
|
|
@ -1,45 +1,31 @@
|
||||||
;;; init-package.el
|
;;; init-package.el --- Package management setup using straight.el -*- lexical-binding: t -*-
|
||||||
|
|
||||||
;; Initialise the package sources
|
(setq straight-base-dir (expand-file-name "straight" user-emacs-data))
|
||||||
(require 'package)
|
|
||||||
; Add sources
|
|
||||||
;; (setq gnutls-algorithm-priority "NORMAL:-VERS-TLS1.3")
|
|
||||||
(setq package-archives '(("melpa" . "https://melpa.org/packages/")
|
|
||||||
("org" . "https://orgmode.org/elpa/")
|
|
||||||
("gnu" . "https://elpa.gnu.org/packages/")))
|
|
||||||
;; Initialise the package management system
|
|
||||||
(package-initialize)
|
|
||||||
|
|
||||||
;; Ensure the package list is up-to-date
|
;; Bootstrap straight.el
|
||||||
(unless package-archive-contents
|
(defvar bootstrap-version)
|
||||||
(package-refresh-contents))
|
(let ((bootstrap-file
|
||||||
|
(expand-file-name
|
||||||
|
"straight/repos/straight.el/bootstrap.el"
|
||||||
|
(or (bound-and-true-p straight-base-dir)
|
||||||
|
user-emacs-directory)))
|
||||||
|
(bootstrap-version 7))
|
||||||
|
(unless (file-exists-p bootstrap-file)
|
||||||
|
(with-current-buffer
|
||||||
|
(url-retrieve-synchronously
|
||||||
|
"https://raw.githubusercontent.com/radian-software/straight.el/develop/install.el"
|
||||||
|
'silent 'inhibit-cookies)
|
||||||
|
(goto-char (point-max))
|
||||||
|
(eval-print-last-sexp)))
|
||||||
|
(load bootstrap-file nil 'nomessage))
|
||||||
|
|
||||||
;; Ensure use-package is installed
|
;; Use straight.el with use-package
|
||||||
(unless (package-installed-p 'use-package)
|
(straight-use-package 'use-package)
|
||||||
; (package-refresh-contents) Move to above
|
(setq straight-use-package-by-default t) ;; Automatically use straight for all packages
|
||||||
(package-install 'use-package))
|
|
||||||
|
|
||||||
;; Use `use-package` for plugin management
|
|
||||||
(eval-when-compile
|
|
||||||
(require 'use-package))
|
|
||||||
(setq use-package-always-ensure t)
|
|
||||||
|
|
||||||
;; use-package offers many syntax sugar.
|
|
||||||
;; :bind -> bindkeys
|
|
||||||
;; :config -> `(progn do sth)
|
|
||||||
;; :init -> (progn do sth)
|
|
||||||
;; :after -> (when (featurep 'package)do sth)
|
|
||||||
;; :hook -> (add-hook 'some-hook #'some-mode)
|
|
||||||
|
|
||||||
;; This part initialse the GPG Keyring
|
|
||||||
; Disable signature first
|
|
||||||
(setq package-check-signature nil)
|
|
||||||
|
|
||||||
|
;; Ensure gnu-elpa-keyring-update (equivalent to your previous keyring update logic)
|
||||||
(use-package gnu-elpa-keyring-update)
|
(use-package gnu-elpa-keyring-update)
|
||||||
|
|
||||||
; Re-enable signature
|
|
||||||
(setq package-check-signature 'allow-unsigned)
|
|
||||||
|
|
||||||
|
|
||||||
;; Which Key - Prompt available commands
|
;; Which Key - Prompt available commands
|
||||||
(use-package which-key
|
(use-package which-key
|
||||||
|
|
@ -66,17 +52,6 @@
|
||||||
;; Use Emacs mode to use number to navigate dashboard
|
;; Use Emacs mode to use number to navigate dashboard
|
||||||
)
|
)
|
||||||
|
|
||||||
;(use-package dashboard
|
|
||||||
; :ensure t
|
|
||||||
; :init
|
|
||||||
; (dashboard-setup-startup-hook)
|
|
||||||
; :config
|
|
||||||
; (setq dashboard-banner-logo-title "EMACS")
|
|
||||||
; (setq dashboard-startup-banner 'official)
|
|
||||||
; (setq dashboard-items '((recents . 5)
|
|
||||||
; (bookmark . 5))))
|
|
||||||
;
|
|
||||||
|
|
||||||
|
|
||||||
(use-package wakatime-mode
|
(use-package wakatime-mode
|
||||||
:ensure t
|
:ensure t
|
||||||
|
|
|
||||||
1
tools/emacs.d/snippets
Symbolic link
1
tools/emacs.d/snippets
Symbolic link
|
|
@ -0,0 +1 @@
|
||||||
|
../doom/snippets
|
||||||
|
|
@ -15,7 +15,7 @@ set -gx DOTFILES $HOME/.dotfiles
|
||||||
set -gx XDG_CONFIG_HOME (set -q XDG_CONFIG_HOME; and echo $XDG_CONFIG_HOME; or echo $HOME/.config)
|
set -gx XDG_CONFIG_HOME (set -q XDG_CONFIG_HOME; and echo $XDG_CONFIG_HOME; or echo $HOME/.config)
|
||||||
set -gx XDG_DATA_HOME (set -q XDG_DATA_HOME; and echo $XDG_DATA_HOME; or echo $HOME/.local/share)
|
set -gx XDG_DATA_HOME (set -q XDG_DATA_HOME; and echo $XDG_DATA_HOME; or echo $HOME/.local/share)
|
||||||
set -gx XDG_STATE_HOME (set -q XDG_STATE_HOME; and echo $XDG_STATE_HOME; or echo $HOME/.local/state)
|
set -gx XDG_STATE_HOME (set -q XDG_STATE_HOME; and echo $XDG_STATE_HOME; or echo $HOME/.local/state)
|
||||||
set -gx XDG_CACHE_HOME (set -q XDG_CACHE_HOME; and echo $XDG_CACHE_HOME; or echo $HOME/.cache)
|
set -gx XDG_CACHE_HOME (set -q XDG_CACHE_HOME; and echo $XDG_CACHE_HOME; or echo $HOME/.local/cache)
|
||||||
|
|
||||||
if test (uname) = "Darwin"
|
if test (uname) = "Darwin"
|
||||||
set -gx XDG_RUNTIME_DIR $HOME/.tmp/run/
|
set -gx XDG_RUNTIME_DIR $HOME/.tmp/run/
|
||||||
|
|
|
||||||
|
|
@ -72,13 +72,15 @@ vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos,
|
||||||
vim.o.mousemoveevent = true
|
vim.o.mousemoveevent = true
|
||||||
|
|
||||||
-- Hide zero-width space
|
-- Hide zero-width space
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
-- vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = "*",
|
-- pattern = "*",
|
||||||
callback = function()
|
-- callback = function()
|
||||||
vim.opt_local.conceallevel = 2
|
-- vim.opt_local.conceallevel = 2
|
||||||
vim.cmd([[
|
-- vim.cmd([[
|
||||||
syntax match ZeroWidthSpace /\%u200b/ conceal
|
-- syntax match ZeroWidthSpace /\%u200b/ conceal
|
||||||
highlight link ZeroWidthSpace Conceal
|
-- highlight link ZeroWidthSpace Conceal
|
||||||
]])
|
-- ]])
|
||||||
end,
|
-- end,
|
||||||
})
|
-- })
|
||||||
|
|
||||||
|
vim.fn.matchadd("Conceal", [[\%u200b]], 10, -1, { conceal = "" })
|
||||||
|
|
|
||||||
|
|
@ -29,9 +29,9 @@ M.servers = {
|
||||||
"ts_ls", -- TypeScript
|
"ts_ls", -- TypeScript
|
||||||
"vimls", -- vimscript
|
"vimls", -- vimscript
|
||||||
"yamlls", -- YAML
|
"yamlls", -- YAML
|
||||||
|
"beancount", -- Beancount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
-- Configuration for each server defines here
|
-- Configuration for each server defines here
|
||||||
M.server_config = {
|
M.server_config = {
|
||||||
lua_ls = {
|
lua_ls = {
|
||||||
|
|
|
||||||
|
|
@ -1,55 +1,71 @@
|
||||||
local M = {}
|
local bufmap = {
|
||||||
|
markdown = {
|
||||||
--- buffer that doesn't act as an editor or common buffer.
|
{ mode = "x", keys = "i", cmd = 'c*<C-r>"*', opt = { desc = "Add italic to selected text" } },
|
||||||
--- Use `q` to close the buffer.
|
{ mode = "x", keys = "b", cmd = 'c**<C-r>"**', opt = { desc = "Add bold to selected text" } },
|
||||||
local tmp_buf = {
|
{ mode = "x", keys = "c", cmd = 'c`<CR><C-r>"<CR>`', opt = { desc = "Add code block to selected text" } },
|
||||||
"qf", -- quickfix
|
{ mode = "x", keys = "d", cmd = 'c~~<C-r>"~~', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
"crunner", -- code runner
|
{ mode = "x", keys = "h", cmd = 'c==<C-r>"==', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
},
|
||||||
|
tex = {
|
||||||
|
{ mode = "x", keys = "i", cmd = 'c\\textit{<C-r>"}', opt = { desc = "Add italic to selected text" } },
|
||||||
|
{ mode = "x", keys = "b", cmd = 'c\\textbf{<C-r>"}', opt = { desc = "Add bold to selected text" } },
|
||||||
|
{
|
||||||
|
mode = "x",
|
||||||
|
keys = "c",
|
||||||
|
cmd = 'c\\begin{verbatim}<CR><C-r>"<CR>\\end{verbatim}',
|
||||||
|
opt = { desc = "Add code block to selected text" },
|
||||||
|
},
|
||||||
|
{ mode = "x", keys = "d", cmd = 'c\\sout{<C-r>"}', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
|
{ mode = "x", keys = "h", cmd = 'c\\hl{<C-r>"}', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
{ mode = "n", keys = "<leader>cc", cmd = "<cmd>w<CR>", opt = { desc = "Save and compile tex file" } },
|
||||||
|
-- { mode = "i", keys = "<C-m><C-m>", cmd = "<cmd>w<CR>", opt = { desc = "Save and compile tex file" } },
|
||||||
|
},
|
||||||
|
org = {
|
||||||
|
{ mode = "x", keys = "i", cmd = 'c/<C-r>/"', opt = { desc = "Add italic to selected text" } },
|
||||||
|
{ mode = "x", keys = "b", cmd = 'c*<C-r>"*', opt = { desc = "Add bold to selected text" } },
|
||||||
|
-- {
|
||||||
|
-- mode = "x",
|
||||||
|
-- keys = "c",
|
||||||
|
-- cmd = 'c#+BEGIN_SRC<CR><C-r>"<CR>#+END_SRC',
|
||||||
|
-- opt = { desc = "Add code block to selected text" },
|
||||||
|
-- },
|
||||||
|
{ mode = "x", keys = "d", cmd = 'c+<C-r>"+', opt = { desc = "Add strikethrough to selected text" } },
|
||||||
|
{ mode = "x", keys = "h", cmd = 'c~<C-r>"~', opt = { desc = "Add highlight to selected text" } },
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
local term_buf = {
|
local function setup_buffer_maps(buffer_map)
|
||||||
"floaterm",
|
-- 遍历 buffer_map 中的每个文件类型
|
||||||
"term",
|
for ft, mappings in pairs(buffer_map) do
|
||||||
}
|
-- 1. 为现有缓冲区设置键位映射
|
||||||
|
for _, buf in ipairs(vim.api.nvim_list_bufs()) do
|
||||||
|
if vim.api.nvim_buf_get_option(buf, "filetype") == ft then
|
||||||
|
for _, mapping in ipairs(mappings) do
|
||||||
|
-- 合并选项,添加 buffer 以确保映射是缓冲区局部的
|
||||||
|
if mapping.mode ~= "n" then
|
||||||
|
mapping.keys = "<C-m>" .. mapping.keys
|
||||||
|
end
|
||||||
|
local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf })
|
||||||
|
vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local term_mode = {
|
-- 2. 为未来缓冲区设置自动命令
|
||||||
"n",
|
|
||||||
"i",
|
|
||||||
"t",
|
|
||||||
}
|
|
||||||
|
|
||||||
local term_keymaps = {
|
|
||||||
{ mode = term_mode, keys = "<C-q>", cmd = ":FloatermToggle", desc = "Exit terminal mode" },
|
|
||||||
}
|
|
||||||
|
|
||||||
M.tmp_buf_keymaps = {
|
|
||||||
{ mode = "n", keys = "q", cmd = "<Cmd>q<CR>", desc = "Close buffer" },
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, buf in ipairs(tmp_buf) do
|
|
||||||
vim.api.nvim_create_autocmd("FileType", {
|
vim.api.nvim_create_autocmd("FileType", {
|
||||||
pattern = buf,
|
pattern = ft, -- 匹配文件类型,例如 "markdown"
|
||||||
callback = function()
|
callback = function(args)
|
||||||
for _, map in ipairs(M.tmp_buf_keymaps) do
|
local buf = args.buf -- 获取触发事件的缓冲区号
|
||||||
local opts = vim.tbl_extend("force", { buffer = 0 }, map.opts or {})
|
for _, mapping in ipairs(mappings) do
|
||||||
vim.keymap.set(map.mode, map.keys, map.cmd, opts)
|
local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf })
|
||||||
|
if mapping.mode ~= "n" then
|
||||||
|
mapping.keys = "<C-m>" .. mapping.keys
|
||||||
|
end
|
||||||
|
vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
vim.api.nvim_create_autocmd("BufEnter", {
|
|
||||||
pattern = "*",
|
|
||||||
callback = function()
|
|
||||||
-- 检查当前 buffer 的 buftype
|
|
||||||
local buftype = vim.bo.buftype
|
|
||||||
if buftype == "terminal" then
|
|
||||||
for _, map in ipairs(term_keymaps) do
|
|
||||||
local opts = vim.tbl_extend("force", { buffer = 0 }, map.opts or {})
|
|
||||||
vim.keymap.set(map.mode, map.keys, map.cmd, opts)
|
|
||||||
end
|
end
|
||||||
end
|
|
||||||
end,
|
|
||||||
})
|
|
||||||
|
|
||||||
return M
|
setup_buffer_maps(bufmap)
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,13 @@ local keymaps_nvim_tree_general = require("keymaps.nvim-tree").global
|
||||||
local keymaps_general = vim.tbl_extend("force", {}, require("keymaps.leaders"), require("keymaps.lspkeys"))
|
local keymaps_general = vim.tbl_extend("force", {}, require("keymaps.leaders"), require("keymaps.lspkeys"))
|
||||||
-- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic`
|
-- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic`
|
||||||
local keymaps_basic = require("keymaps.basic")
|
local keymaps_basic = require("keymaps.basic")
|
||||||
local keymaps_buffer = require("keymaps.buffer")
|
|
||||||
local keymaps_modifier = require("keymaps.modifier")
|
local keymaps_modifier = require("keymaps.modifier")
|
||||||
-- local keymaps_leader = require("keymaps.leaders")
|
|
||||||
-- local keymaps_lsp = require("keymaps.lspkeys")
|
require("keymaps.buffer")
|
||||||
|
|
||||||
utils.set_keymaps(keymaps_general)
|
utils.set_keymaps(keymaps_general)
|
||||||
utils.set_keymaps(keymaps_basic)
|
utils.set_keymaps(keymaps_basic)
|
||||||
utils.set_keymaps(keymaps_nvim_tree_general)
|
utils.set_keymaps(keymaps_nvim_tree_general)
|
||||||
utils.set_keymaps(keymaps_buffer)
|
|
||||||
utils.set_keymaps(keymaps_modifier)
|
utils.set_keymaps(keymaps_modifier)
|
||||||
|
|
||||||
M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin
|
M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@ local M = {
|
||||||
{ keys = "gi", cmd = vim.lsp.buf.implementation, opts = { desc = "Goto Implementation" } },
|
{ keys = "gi", cmd = vim.lsp.buf.implementation, opts = { desc = "Goto Implementation" } },
|
||||||
{ keys = "<leader>,", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
|
{ keys = "<leader>,", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
|
||||||
{ keys = "ga", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
|
{ keys = "ga", cmd = vim.lsp.buf.code_action, opts = { desc = "Code Action" } },
|
||||||
|
{ keys = "gh", cmd = vim.lsp.buf.hover, opts = { desc = "Show hover" } },
|
||||||
}
|
}
|
||||||
|
|
||||||
return M
|
return M
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ return {
|
||||||
end,
|
end,
|
||||||
dependencies = { "nvim-telescope/telescope.nvim" },
|
dependencies = { "nvim-telescope/telescope.nvim" },
|
||||||
},
|
},
|
||||||
{ import = "plugins.mod.hover-nvim" },
|
|
||||||
-- {
|
-- {
|
||||||
-- "kdheepak/lazygit.nvim",
|
-- "kdheepak/lazygit.nvim",
|
||||||
-- lazy = true,
|
-- lazy = true,
|
||||||
|
|
@ -46,6 +45,6 @@ return {
|
||||||
-- },
|
-- },
|
||||||
-- },
|
-- },
|
||||||
{
|
{
|
||||||
"NeogitOrg/neogit"
|
"NeogitOrg/neogit",
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ return {
|
||||||
-- tag = "v2.15", -- uncomment to pin to a specific release
|
-- tag = "v2.15", -- uncomment to pin to a specific release
|
||||||
init = function()
|
init = function()
|
||||||
-- VimTeX configuration goes here, e.g.
|
-- VimTeX configuration goes here, e.g.
|
||||||
vim.g.vimtex_view_method = "sioyek"
|
vim.g.vimtex_view_method = "okular"
|
||||||
end,
|
end,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
8
tools/zed/keymap.json
Executable file → Normal file
8
tools/zed/keymap.json
Executable file → Normal file
|
|
@ -53,14 +53,18 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"context": "vim_mode == normal || not_editing || EmptyPane",
|
"context": "GitPanel || ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView",
|
||||||
|
|
||||||
"bindings": {
|
"bindings": {
|
||||||
"space space": "file_finder::Toggle",
|
"space space": "file_finder::Toggle",
|
||||||
"space ;": "command_palette::Toggle",
|
"space ;": "command_palette::Toggle",
|
||||||
"space f c": "zed::OpenSettings",
|
"space f c": "zed::OpenSettings",
|
||||||
"space f e c": "zed::OpenSettings",
|
"space f e c": "zed::OpenSettings",
|
||||||
"space f t": "project_panel::ToggleFocus"
|
"space f t": "project_panel::ToggleFocus",
|
||||||
|
"ctrl-w h": "workspace::ActivatePaneLeft",
|
||||||
|
"ctrl-w i": "workspace::ActivatePaneRight",
|
||||||
|
"ctrl-w e": "workspace::ActivatePaneUp",
|
||||||
|
"ctrl-w n": "workspace::ActivatePaneDown"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
|
||||||
91
tools/zed/keymap_backup.json
Normal file
91
tools/zed/keymap_backup.json
Normal file
|
|
@ -0,0 +1,91 @@
|
||||||
|
// $DOTFILES/tools/zed/keymaps.json
|
||||||
|
// Date: 2025-01-25
|
||||||
|
// Author: js0ny
|
||||||
|
// Description: Zed keymaps
|
||||||
|
|
||||||
|
// Location:
|
||||||
|
// GNU/Linux: ~/.config/zed/keymaps.json
|
||||||
|
// Windows: %APPDATA%\Zed\keymaps.json
|
||||||
|
// Linking: (link the whole directory)
|
||||||
|
// ln -sf $DOTFILES/tools/zed ~/.config/zed
|
||||||
|
|
||||||
|
// Zed keymap
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
// For information on binding keys, see the Zed
|
||||||
|
|
||||||
|
// documentation: https://zed.dev/docs/key-bindings
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
// To see the default key bindings run `zed: open default keymap`
|
||||||
|
|
||||||
|
// from the command palette.
|
||||||
|
|
||||||
|
// https://github.com/zed-industries/zed/tree/main/assets/keymaps
|
||||||
|
// Sequence: https://zed.dev/docs/key-bindings#remapping-keys
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"context": "Workspace",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
// "shift shift": "file_finder::Toggle"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"context": "Editor",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
// "j k": ["workspace::SendKeystrokes", "escape"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "vim_mode == normal || vim_mode == visual",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
"N": "vim::JoinLines",
|
||||||
|
"l": "vim::InsertBefore",
|
||||||
|
"L": "vim::InsertFirstNonWhitespace",
|
||||||
|
"H": "pane::ActivatePrevItem",
|
||||||
|
"I": "pane::ActivateNextItem"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "vim_mode == normal || not_editing || EmptyPane",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
"space space": "file_finder::Toggle",
|
||||||
|
"space ;": "command_palette::Toggle",
|
||||||
|
"space f c": "zed::OpenSettings",
|
||||||
|
"space f e c": "zed::OpenSettings",
|
||||||
|
"space f t": "project_panel::ToggleFocus"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "vim_mode == normal || vim_mode == visual || vim_mode == operator",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
"n": "vim::Down",
|
||||||
|
"e": "vim::Up",
|
||||||
|
"i": "vim::Right",
|
||||||
|
"k": "search::SelectNextMatch",
|
||||||
|
"K": "search::SelectPrevMatch",
|
||||||
|
"N": ["workspace::SendKeystrokes", "n n n n n"],
|
||||||
|
"E": ["workspace::SendKeystrokes", "e e e e e"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"context": "ProjectPanel && not_editing",
|
||||||
|
|
||||||
|
"bindings": {
|
||||||
|
"n": "menu::SelectNext",
|
||||||
|
"e": "menu::SelectPrev",
|
||||||
|
"i": "project_panel::ExpandSelectedEntry",
|
||||||
|
"A": "project_panel::NewDirectory",
|
||||||
|
"a": "project_panel::NewFile",
|
||||||
|
"d": "project_panel::Delete"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -18,6 +18,14 @@
|
||||||
// custom settings, run `zed: open default settings` from the
|
// custom settings, run `zed: open default settings` from the
|
||||||
// command palette (cmd-shift-p / ctrl-shift-p)
|
// command palette (cmd-shift-p / ctrl-shift-p)
|
||||||
{
|
{
|
||||||
|
"edit_predictions": {
|
||||||
|
"disabled_globs": ["*.bean"],
|
||||||
|
"mode": "eager_preview",
|
||||||
|
"copilot": {
|
||||||
|
"proxy": null,
|
||||||
|
"proxy_no_verify": null
|
||||||
|
}
|
||||||
|
},
|
||||||
"base_keymap": "VSCode",
|
"base_keymap": "VSCode",
|
||||||
"vim_mode": true,
|
"vim_mode": true,
|
||||||
"ui_font_size": 16,
|
"ui_font_size": 16,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue