From c6ad959982620d31d0cc5fa802d40f5ef9ad1dc8 Mon Sep 17 00:00:00 2001 From: js0ny Date: Thu, 13 Mar 2025 10:31:31 +0000 Subject: [PATCH 1/6] minor fix --- bootstrap/components/requirements.txt | 112 +++++++++++++++++++++++++ platforms/linux/kde/kglobalshortcutsrc | 2 +- tools/browser/surfingkeys.js | 40 +++++++-- tools/doom/config.el | 14 ++-- tools/doom/init.el | 2 +- tools/nvim/lua/config/servers.lua | 44 +++++----- tools/nvim/lua/keymaps/lspkeys.lua | 1 + tools/nvim/lua/plugins/fileutils.lua | 5 +- tools/zed/keymap.json | 8 +- tools/zed/keymap_backup.json | 91 ++++++++++++++++++++ tools/zed/settings.json | 8 ++ 11 files changed, 282 insertions(+), 45 deletions(-) create mode 100644 bootstrap/components/requirements.txt mode change 100755 => 100644 tools/zed/keymap.json create mode 100644 tools/zed/keymap_backup.json diff --git a/bootstrap/components/requirements.txt b/bootstrap/components/requirements.txt new file mode 100644 index 0000000..fa5157a --- /dev/null +++ b/bootstrap/components/requirements.txt @@ -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 diff --git a/platforms/linux/kde/kglobalshortcutsrc b/platforms/linux/kde/kglobalshortcutsrc index f11d47d..6f43911 100644 --- a/platforms/linux/kde/kglobalshortcutsrc +++ b/platforms/linux/kde/kglobalshortcutsrc @@ -78,7 +78,7 @@ KrohnkiteFocusRight=Meta+I,none,Krohnkite: Focus Right KrohnkiteFocusUp=Meta+E,none,Krohnkite: Focus Up KrohnkiteGrowHeight=Meta+Ctrl+N,none,Krohnkite: Grow Height KrohnkiteIncrease=none,none,Krohnkite: Increase -KrohnkiteMonocleLayout=Meta+M,none,Krohnkite: Monocle Layout +KrohnkiteMonocleLayout=none,none,Krohnkite: Monocle Layout KrohnkiteNextLayout=Meta+\\\\,none,Krohnkite: Next Layout KrohnkitePreviousLayout=Meta+|,none,Krohnkite: Previous Layout KrohnkiteQuarterLayout=none,none,Krohnkite: Quarter Layout diff --git a/tools/browser/surfingkeys.js b/tools/browser/surfingkeys.js index c5042cb..adb94ec 100644 --- a/tools/browser/surfingkeys.js +++ b/tools/browser/surfingkeys.js @@ -325,7 +325,7 @@ const searchAliases = [ ["yt", "YouTube", "https://www.youtube.com/results?search_query="], ]; -api.unmap("on") +api.unmap("on"); // Add all search aliases searchAliases.forEach(([alias, name, url]) => { @@ -657,11 +657,35 @@ mapkey( }, { 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( ",w", "Toggle [w]riting/[w]eb Search", function () { - q("div.rounded-md").querySelectorAll("span")[1].click(); + q("div.rounded-md").querySelectorAll("span")[2].click(); setTimeout(() => { // Wait for the DOM to update qs("div.shadow-subtle div.group\\/item")[0].click(); @@ -690,8 +714,8 @@ mapkey( { domain: /perplexity.ai/ }, ); mapkey( - ",r", - "Change model to [r]egenerate last output", + ",R", + "Change model to [R]egenerate last output", function () { var toolbars = qs("div.mt-sm"); var last = toolbars[toolbars.length - 1]; @@ -701,15 +725,13 @@ mapkey( { domain: /perplexity.ai/ }, ); mapkey( - ",R", - "Toggle [R]easoning with [R]1", + ",r", + "Toggle [r]easoning", function () { - var btns = qs("span.grow button"); - btns[0].click(); + q("div.rounded-md").querySelectorAll("span")[0].click(); setTimeout(() => { // Wait for the DOM to update qs("div.shadow-subtle div.group\\/item")[2].click(); - qs("div.group\\/item")[2].click(); // Mobile view }, 100); }, { domain: /perplexity.ai/ }, diff --git a/tools/doom/config.el b/tools/doom/config.el index a266d41..6bd836c 100644 --- a/tools/doom/config.el +++ b/tools/doom/config.el @@ -22,7 +22,7 @@ ;; accept. For example: ;; ;; 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-symbol-font (font-spec :family "LXGW WenKai Mono") doom-variable-pitch-font (font-spec :family "LXGW WenKai Mono" :weight 'extra-bold)) @@ -103,7 +103,7 @@ (add-to-list 'recentf-exclude "\\.#.+$") (add-to-list 'recentf-exclude "^/tmp/") (add-to-list 'recentf-exclude "COMMIT_EDITMSG\\'") -)[1][2] + )[1][2] @@ -133,11 +133,11 @@ (if (not (eq system-type 'windows-nt)) (use-package! rime - :config - (setq default-input-method "rime") - (add-hook! (org-mode markdown-mode) (activate-input-method default-input-method)) - (setq rime-user-data-dir (expand-file-name "emacs-rime" (getenv "XDG_CONFIG_HOME"))) - )) + :config + (setq default-input-method "rime") + (add-hook! (org-mode markdown-mode) (activate-input-method default-input-method)) + (setq rime-user-data-dir (expand-file-name "emacs-rime" (getenv "XDG_CONFIG_HOME"))) + )) (load! "calendar.el") diff --git a/tools/doom/init.el b/tools/doom/init.el index 12f2295..f11c6fc 100644 --- a/tools/doom/init.el +++ b/tools/doom/init.el @@ -193,7 +193,7 @@ ;;emms ;;everywhere ; *leave* Emacs!? You must be joking ;;irc ; how neckbeards socialize - ;;(rss +org) ; emacs as an RSS reader + (rss +org) ; emacs as an RSS reader :config ;;literate diff --git a/tools/nvim/lua/config/servers.lua b/tools/nvim/lua/config/servers.lua index 2a499b0..3508981 100644 --- a/tools/nvim/lua/config/servers.lua +++ b/tools/nvim/lua/config/servers.lua @@ -6,32 +6,32 @@ local M = {} -- Use :Mason to list all available servers M.servers = { "ast_grep", - "bashls", -- Bash - "clangd", -- C/C++ - "cssls", -- CSS - "denols", -- Deno + "bashls", -- Bash + "clangd", -- C/C++ + "cssls", -- CSS + "denols", -- Deno -- "cmake", -- CMake - "eslint", -- JavaScript - "gopls", -- Go - "hls", -- Haskell - "html", -- HTML - "jsonls", -- JSON - "lua_ls", -- Lua + "eslint", -- JavaScript + "gopls", -- Go + "hls", -- Haskell + "html", -- HTML + "jsonls", -- JSON + "lua_ls", -- Lua "markdown_oxide", -- Markdown - "omnisharp", -- C# & F# - "powershell_es", -- PowerShell - "pyright", -- Python - "rust_analyzer", -- Rust - "svelte", -- Svelte - "svlangserver", -- SystemVerilog - "tailwindcss", -- TailwindCSS - "taplo", -- TOML - "ts_ls", -- TypeScript - "vimls", -- vimscript - "yamlls", -- YAML + "omnisharp", -- C# & F# + "powershell_es", -- PowerShell + "pyright", -- Python + "rust_analyzer", -- Rust + "svelte", -- Svelte + "svlangserver", -- SystemVerilog + "tailwindcss", -- TailwindCSS + "taplo", -- TOML + "ts_ls", -- TypeScript + "vimls", -- vimscript + "yamlls", -- YAML + "beancount", -- Beancount } - -- Configuration for each server defines here M.server_config = { lua_ls = { diff --git a/tools/nvim/lua/keymaps/lspkeys.lua b/tools/nvim/lua/keymaps/lspkeys.lua index 3200597..737d4fe 100644 --- a/tools/nvim/lua/keymaps/lspkeys.lua +++ b/tools/nvim/lua/keymaps/lspkeys.lua @@ -6,6 +6,7 @@ local M = { { keys = "gi", cmd = vim.lsp.buf.implementation, opts = { desc = "Goto Implementation" } }, { keys = ",", 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 diff --git a/tools/nvim/lua/plugins/fileutils.lua b/tools/nvim/lua/plugins/fileutils.lua index 39bca40..d195e48 100644 --- a/tools/nvim/lua/plugins/fileutils.lua +++ b/tools/nvim/lua/plugins/fileutils.lua @@ -24,7 +24,6 @@ return { end, dependencies = { "nvim-telescope/telescope.nvim" }, }, - { import = "plugins.mod.hover-nvim" }, -- { -- "kdheepak/lazygit.nvim", -- lazy = true, @@ -46,6 +45,6 @@ return { -- }, -- }, { - "NeogitOrg/neogit" - } + "NeogitOrg/neogit", + }, } diff --git a/tools/zed/keymap.json b/tools/zed/keymap.json old mode 100755 new mode 100644 index 2791e19..5d66f96 --- a/tools/zed/keymap.json +++ b/tools/zed/keymap.json @@ -53,14 +53,18 @@ } }, { - "context": "vim_mode == normal || not_editing || EmptyPane", + "context": "GitPanel || ProjectPanel || CollabPanel || OutlinePanel || ChatPanel || VimControl || EmptyPane || SharedScreen || MarkdownPreview || KeyContextView", "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" + "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" } }, { diff --git a/tools/zed/keymap_backup.json b/tools/zed/keymap_backup.json new file mode 100644 index 0000000..2791e19 --- /dev/null +++ b/tools/zed/keymap_backup.json @@ -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" + } + } +] diff --git a/tools/zed/settings.json b/tools/zed/settings.json index 16f799c..fc127f3 100644 --- a/tools/zed/settings.json +++ b/tools/zed/settings.json @@ -18,6 +18,14 @@ // custom settings, run `zed: open default settings` from the // 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", "vim_mode": true, "ui_font_size": 16, From a9a91b586b7fd74a7f59124d038390b465faeb6a Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Mar 2025 14:15:31 +0000 Subject: [PATCH 2/6] feat(emacs): Optimize org-latex snippet --- tools/doom/snippets/org-mode/align-math | 8 ++++++++ tools/doom/snippets/org-mode/display-math | 5 ++--- tools/doom/snippets/org-mode/inline-math | 2 +- tools/doom/snippets/org-mode/limit | 6 ++++++ tools/doom/snippets/org-mode/summation | 6 ++++++ tools/emacs.d/snippets | 1 + 6 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 tools/doom/snippets/org-mode/align-math create mode 100644 tools/doom/snippets/org-mode/limit create mode 100644 tools/doom/snippets/org-mode/summation create mode 120000 tools/emacs.d/snippets diff --git a/tools/doom/snippets/org-mode/align-math b/tools/doom/snippets/org-mode/align-math new file mode 100644 index 0000000..3906e2f --- /dev/null +++ b/tools/doom/snippets/org-mode/align-math @@ -0,0 +1,8 @@ +# -*- mode: snippet -*- +# name: align-math +# key: BAL +# expand-env: ((yas-indent-line 'fixed)) +# -- +\\begin{align*} +$1 +\\end{align*} diff --git a/tools/doom/snippets/org-mode/display-math b/tools/doom/snippets/org-mode/display-math index 8e8286e..4266565 100644 --- a/tools/doom/snippets/org-mode/display-math +++ b/tools/doom/snippets/org-mode/display-math @@ -2,8 +2,7 @@ # name: display-math # key: dm # expand-env: ((yas-indent-line 'fixed)) -# trigger-key: "" # -- -$$ +\\[ $1 -$$ +\\] diff --git a/tools/doom/snippets/org-mode/inline-math b/tools/doom/snippets/org-mode/inline-math index 79c48eb..f6bab07 100644 --- a/tools/doom/snippets/org-mode/inline-math +++ b/tools/doom/snippets/org-mode/inline-math @@ -3,4 +3,4 @@ # key: mk # expand-env: ((yas-indent-line 'fixed)) # -- -$$1$ +\\( $1 \\) diff --git a/tools/doom/snippets/org-mode/limit b/tools/doom/snippets/org-mode/limit new file mode 100644 index 0000000..cf84217 --- /dev/null +++ b/tools/doom/snippets/org-mode/limit @@ -0,0 +1,6 @@ +# -*- mode: snippet -*- +# name: Limit +# key: lim +# condition: (org-inside-LaTeX-fragment-p) +# -- +\\lim_{$1 \to $2} $0 diff --git a/tools/doom/snippets/org-mode/summation b/tools/doom/snippets/org-mode/summation new file mode 100644 index 0000000..b095a2a --- /dev/null +++ b/tools/doom/snippets/org-mode/summation @@ -0,0 +1,6 @@ +# -*- mode: snippet -*- +# name: Summation +# key: sum +# condition: (org-inside-LaTeX-fragment-p) +# -- +\\sum_{$1}^{$2} $0 diff --git a/tools/emacs.d/snippets b/tools/emacs.d/snippets new file mode 120000 index 0000000..3a69d5c --- /dev/null +++ b/tools/emacs.d/snippets @@ -0,0 +1 @@ +../doom/snippets \ No newline at end of file From 0d6e24aa61222166162c48113cf7933d596c545d Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Mar 2025 14:15:51 +0000 Subject: [PATCH 3/6] minor fix --- tools/fish/conf.d/0init.fish | 2 +- tools/nvim/lua/config/options.lua | 22 ++++++++++++---------- tools/nvim/lua/plugins/lsp.lua | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/tools/fish/conf.d/0init.fish b/tools/fish/conf.d/0init.fish index 2a605a0..6fa2a74 100644 --- a/tools/fish/conf.d/0init.fish +++ b/tools/fish/conf.d/0init.fish @@ -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_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_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" set -gx XDG_RUNTIME_DIR $HOME/.tmp/run/ diff --git a/tools/nvim/lua/config/options.lua b/tools/nvim/lua/config/options.lua index b58f849..a1a180a 100644 --- a/tools/nvim/lua/config/options.lua +++ b/tools/nvim/lua/config/options.lua @@ -72,13 +72,15 @@ vim.o.sessionoptions = "blank,buffers,curdir,folds,help,tabpages,winsize,winpos, vim.o.mousemoveevent = true -- Hide zero-width space -vim.api.nvim_create_autocmd("FileType", { - pattern = "*", - callback = function() - vim.opt_local.conceallevel = 2 - vim.cmd([[ - syntax match ZeroWidthSpace /\%u200b/ conceal - highlight link ZeroWidthSpace Conceal - ]]) - end, -}) +-- vim.api.nvim_create_autocmd("FileType", { +-- pattern = "*", +-- callback = function() +-- vim.opt_local.conceallevel = 2 +-- vim.cmd([[ +-- syntax match ZeroWidthSpace /\%u200b/ conceal +-- highlight link ZeroWidthSpace Conceal +-- ]]) +-- end, +-- }) + +vim.fn.matchadd("Conceal", [[\%u200b]], 10, -1, { conceal = "" }) diff --git a/tools/nvim/lua/plugins/lsp.lua b/tools/nvim/lua/plugins/lsp.lua index 17ea00a..6f280fd 100644 --- a/tools/nvim/lua/plugins/lsp.lua +++ b/tools/nvim/lua/plugins/lsp.lua @@ -12,7 +12,7 @@ return { -- tag = "v2.15", -- uncomment to pin to a specific release init = function() -- VimTeX configuration goes here, e.g. - vim.g.vimtex_view_method = "sioyek" + vim.g.vimtex_view_method = "okular" end, }, { From 6d9140dc52fd233d71916bfffac795f052194637 Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Mar 2025 14:16:05 +0000 Subject: [PATCH 4/6] feat(nvim): Add some buffer-specific keymaps --- tools/nvim/lua/keymaps/buffer.lua | 116 +++++++++++++++++------------- tools/nvim/lua/keymaps/init.lua | 6 +- 2 files changed, 68 insertions(+), 54 deletions(-) diff --git a/tools/nvim/lua/keymaps/buffer.lua b/tools/nvim/lua/keymaps/buffer.lua index 709e3f8..227ef00 100644 --- a/tools/nvim/lua/keymaps/buffer.lua +++ b/tools/nvim/lua/keymaps/buffer.lua @@ -1,55 +1,71 @@ -local M = {} - ---- buffer that doesn't act as an editor or common buffer. ---- Use `q` to close the buffer. -local tmp_buf = { - "qf", -- quickfix - "crunner", -- code runner +local bufmap = { + markdown = { + { mode = "x", keys = "i", cmd = 'c*"*', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c**"**', opt = { desc = "Add bold to selected text" } }, + { mode = "x", keys = "c", cmd = 'c`"`', opt = { desc = "Add code block to selected text" } }, + { mode = "x", keys = "d", cmd = 'c~~"~~', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c=="==', opt = { desc = "Add highlight to selected text" } }, + }, + tex = { + { mode = "x", keys = "i", cmd = 'c\\textit{"}', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c\\textbf{"}', opt = { desc = "Add bold to selected text" } }, + { + mode = "x", + keys = "c", + cmd = 'c\\begin{verbatim}"\\end{verbatim}', + opt = { desc = "Add code block to selected text" }, + }, + { mode = "x", keys = "d", cmd = 'c\\sout{"}', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c\\hl{"}', opt = { desc = "Add highlight to selected text" } }, + { mode = "n", keys = "cc", cmd = "w", opt = { desc = "Save and compile tex file" } }, + -- { mode = "i", keys = "", cmd = "w", opt = { desc = "Save and compile tex file" } }, + }, + org = { + { mode = "x", keys = "i", cmd = 'c//"', opt = { desc = "Add italic to selected text" } }, + { mode = "x", keys = "b", cmd = 'c*"*', opt = { desc = "Add bold to selected text" } }, + -- { + -- mode = "x", + -- keys = "c", + -- cmd = 'c#+BEGIN_SRC"#+END_SRC', + -- opt = { desc = "Add code block to selected text" }, + -- }, + { mode = "x", keys = "d", cmd = 'c+"+', opt = { desc = "Add strikethrough to selected text" } }, + { mode = "x", keys = "h", cmd = 'c~"~', opt = { desc = "Add highlight to selected text" } }, + }, } -local term_buf = { - "floaterm", - "term", -} - -local term_mode = { - "n", - "i", - "t", -} - -local term_keymaps = { - { mode = term_mode, keys = "", cmd = ":FloatermToggle", desc = "Exit terminal mode" }, -} - -M.tmp_buf_keymaps = { - { mode = "n", keys = "q", cmd = "q", desc = "Close buffer" }, -} - -for _, buf in ipairs(tmp_buf) do - vim.api.nvim_create_autocmd("FileType", { - pattern = buf, - callback = function() - for _, map in ipairs(M.tmp_buf_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 - -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) +local function setup_buffer_maps(buffer_map) + -- 遍历 buffer_map 中的每个文件类型 + 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 = "" .. 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 - end, -}) -return M + -- 2. 为未来缓冲区设置自动命令 + vim.api.nvim_create_autocmd("FileType", { + pattern = ft, -- 匹配文件类型,例如 "markdown" + callback = function(args) + local buf = args.buf -- 获取触发事件的缓冲区号 + for _, mapping in ipairs(mappings) do + local opts = vim.tbl_extend("force", mapping.opt, { buffer = buf }) + if mapping.mode ~= "n" then + mapping.keys = "" .. mapping.keys + end + vim.keymap.set(mapping.mode, mapping.keys, mapping.cmd, opts) + end + end, + }) + end +end + +setup_buffer_maps(bufmap) diff --git a/tools/nvim/lua/keymaps/init.lua b/tools/nvim/lua/keymaps/init.lua index e33d7d8..80d57f3 100644 --- a/tools/nvim/lua/keymaps/init.lua +++ b/tools/nvim/lua/keymaps/init.lua @@ -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")) -- Tables cannot be merged since `mode` are set in some keymaps of `keymaps_basic` local keymaps_basic = require("keymaps.basic") -local keymaps_buffer = require("keymaps.buffer") 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_basic) utils.set_keymaps(keymaps_nvim_tree_general) -utils.set_keymaps(keymaps_buffer) utils.set_keymaps(keymaps_modifier) M.nvim_tree_keymaps = require("keymaps.nvim-tree").plugin From cfc5fc14afc6907fc07e6d186be91cdeae238e94 Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Mar 2025 14:55:41 +0000 Subject: [PATCH 5/6] feat(emacs): Better vanilla emacs --- tools/doom/evil.el | 4 +- tools/emacs.d/init.el | 2 +- tools/emacs.d/lisp/init-appearance.el | 7 +- tools/emacs.d/lisp/init-basic.el | 48 +++++++- tools/emacs.d/lisp/init-edit.el | 16 +++ tools/emacs.d/lisp/init-evil.el | 6 +- tools/emacs.d/lisp/init-file.el | 28 +++-- tools/emacs.d/lisp/init-keymaps.el | 2 +- tools/emacs.d/lisp/init-org.el | 161 ++++++++++++++++++-------- tools/emacs.d/lisp/init-package.el | 11 -- 10 files changed, 209 insertions(+), 76 deletions(-) diff --git a/tools/doom/evil.el b/tools/doom/evil.el index aec736e..b2614da 100644 --- a/tools/doom/evil.el +++ b/tools/doom/evil.el @@ -8,8 +8,8 @@ :nvom "n" 'evil-next-line :nvom "e" 'evil-previous-line :nvom "i" 'evil-forward-char - :nv "H" 'evil-prev-buffer - :nv "I" 'evil-next-buffer + :nvm "H" 'evil-prev-buffer + :nvm "I" 'evil-next-buffer :nvom "N" '(lambda () (interactive) (evil-next-line 5)) ; 5n :nvom "E" '(lambda () (interactive) (evil-previous-line 5)) ; 5e :nvom "C-w n" 'evil-window-down diff --git a/tools/emacs.d/init.el b/tools/emacs.d/init.el index d914c48..636e55c 100644 --- a/tools/emacs.d/init.el +++ b/tools/emacs.d/init.el @@ -14,7 +14,7 @@ (add-to-list 'load-path (expand-file-name "lisp" user-emacs-directory)) ;; 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)) ;; Load each modules (require 'init-package) ; package manager should be loaded first diff --git a/tools/emacs.d/lisp/init-appearance.el b/tools/emacs.d/lisp/init-appearance.el index 958326b..21aeeca 100644 --- a/tools/emacs.d/lisp/init-appearance.el +++ b/tools/emacs.d/lisp/init-appearance.el @@ -1,12 +1,11 @@ ;;; init-appearance.el -;; Set Font - JetBrains Mono Nerd Font (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)) - (set-fontset-font t charset (font-spec :family "霞鹜文楷等宽"))) + (set-fontset-font t charset (font-spec :family "Sarasa Mono SC"))) ;; Icon Support ;; Once installed, Manually install the fonts required: diff --git a/tools/emacs.d/lisp/init-basic.el b/tools/emacs.d/lisp/init-basic.el index 7f6a94a..4ad405e 100644 --- a/tools/emacs.d/lisp/init-basic.el +++ b/tools/emacs.d/lisp/init-basic.el @@ -14,10 +14,20 @@ :hook (prog-mode . display-line-numbers-mode)) +(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)) ;; https://book.emacs-china.org/#orgcfd105e Open with Emacs -(server-mode 1) +;; (server-mode 1) (require 'recentf) @@ -33,5 +43,41 @@ :config (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 (provide 'init-basic) diff --git a/tools/emacs.d/lisp/init-edit.el b/tools/emacs.d/lisp/init-edit.el index 85b7d6c..519304f 100644 --- a/tools/emacs.d/lisp/init-edit.el +++ b/tools/emacs.d/lisp/init-edit.el @@ -60,9 +60,25 @@ ;; Avy - act like Vim Easymotion (use-package avy + :ensure t :config (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-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) diff --git a/tools/emacs.d/lisp/init-evil.el b/tools/emacs.d/lisp/init-evil.el index 5badba3..52845ce 100644 --- a/tools/emacs.d/lisp/init-evil.el +++ b/tools/emacs.d/lisp/init-evil.el @@ -38,7 +38,8 @@ (global-evil-leader-mode) (evil-leader/set-leader "") (evil-leader/set-key - "b" 'buffer-menu)) + "b" 'buffer-menu + "ft" 'treemacs)) ;; Evil Commentary: Use gc to toggle comments (use-package evil-commentary @@ -65,4 +66,7 @@ ;; other faces such as `diff-added` will be used for other actions (evil-goggles-use-diff-faces)) +(with-eval-after-load 'evil + (evil-set-initial-state 'org-agenda-mode 'motion)) + (provide 'init-evil) diff --git a/tools/emacs.d/lisp/init-file.el b/tools/emacs.d/lisp/init-file.el index 222f9f4..d49785c 100644 --- a/tools/emacs.d/lisp/init-file.el +++ b/tools/emacs.d/lisp/init-file.el @@ -37,9 +37,6 @@ ("C-x t C-t" . treemacs-find-file) ("C-x t M-t" . treemacs-find-tag) ) - :config - (evil-leader/set-key - "ft" 'treemacs) ) (use-package treemacs-evil @@ -47,12 +44,25 @@ :ensure t :config ;; Evil treemacs state bindings - (define-key evil-treemacs-state-map (kbd "n") #'treemacs-next-line) - (define-key evil-treemacs-state-map (kbd "e") #'treemacs-previous-line) - (define-key evil-treemacs-state-map (kbd "N") #'treemacs-next-neighbour) - (define-key evil-treemacs-state-map (kbd "E") #'treemacs-previous-neighbour) - (define-key evil-treemacs-state-map (kbd "H") #'treemacs-toggle-show-dotfiles) - (define-key evil-treemacs-state-map (kbd "I") #'treemacs-hide-gitignored-files-mode) + (evil-define-key evil-treemacs-state-map + "n" #'treemacs-next-line + "e" #'treemacs-previous-line + "N" #'treemacs-next-neighbour + "E" #'treemacs-previous-neighbour + "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 (evil-define-key 'treemacs treemacs-mode-map (kbd "i") #'treemacs-RET-action)) diff --git a/tools/emacs.d/lisp/init-keymaps.el b/tools/emacs.d/lisp/init-keymaps.el index f0c2ebf..ae4081f 100644 --- a/tools/emacs.d/lisp/init-keymaps.el +++ b/tools/emacs.d/lisp/init-keymaps.el @@ -3,6 +3,6 @@ ;; Once this is defined, `M-x open-init-file` will open this file (defun open-org-config() (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) diff --git a/tools/emacs.d/lisp/init-org.el b/tools/emacs.d/lisp/init-org.el index 4fb49ed..0f332d1 100644 --- a/tools/emacs.d/lisp/init-org.el +++ b/tools/emacs.d/lisp/init-org.el @@ -3,22 +3,24 @@ ;; Use =M-x org-mode-restart= to take effects ;; After =M-x eval-buffer= +;; Org General + (use-package org :ensure nil ;; Use Emacs built-in Org Mode :config (setq org-log-done 'time) - (setq org-startup-indented t) + (setq org-startup-indented nil) ;; Use inline image (setq org-startup-with-inline-images t) (setq org-display-remote-inline-images 'cache) ; 预览网络图片 ;; Use LaTeX rendering - (setq org-startup-with-latex-preview t) + (setq org-startup-with-latex-preview nil) (setq org-image-actual-width 600) ;; Conceal on markup markers (setq org-hide-emphasis-markers t) - (setq org-directory "~/OrgFiles") - (setq org-agenda-files '("~/OrgFiles")) + (setq org-directory "~/OrgFiles/") + (setq org-agenda-files (list (concat org-directory "tasks/"))) (setq org-pretty-entities t) (setq org-src-fontify-natively t) (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 ) +;; Org Styling ;; Set Org Styles (setq org-emphasis-alist @@ -40,33 +43,18 @@ ("+" (:strike-through t)))) +;; Org 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 :after org :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 ;; Use =M-x org-download-clipboard= to paste image ;; Additional program required: magick @@ -105,26 +93,107 @@ ;; Pomodoro for org clock (use-package org-pomodoro) -;; Org Styles Integration (use-package org-modern :ensure t - :after (org) :config - (with-eval-after-load 'org (global-org-modern-mode)) -;; https://github.com/minad/org-modern/issues/232 - (setq org-modern-fold-stars - '(("▶" . "▼") - ("▷" . "▽") - ;; ("⯈" . "⯆") - ("▷" . "▽") - ("▹" . "▿") - ("▸" . "▾")) -) -) + (setopt org-modern-star 'replace + org-modern-replace-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 + :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) + )) +;; 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 . " "))) + +(setq org-babel-default-header-args:C++ + '((:includes . " "))) + +;; 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 ;; 定义通知函数 @@ -140,12 +209,12 @@ "检查当前正在运行的 clock 是否到期" (when (org-clocking-p) (let* ((clocked-time (org-clock-get-clocked-time)) - (effort (org-duration-to-minutes + (effort (org-duration-to-minutes (or (org-entry-get (org-clock-is-active) "Effort") "0"))) (remaining (- effort clocked-time))) (when (and (> effort 0) (<= remaining 0)) - (my/org-clock-notification + (my/org-clock-notification "Org Clock 提醒" (format "任务 '%s' 的预计时间已到!" (org-clock-get-clock-string))))))) @@ -158,9 +227,9 @@ (lambda () (let ((effort (org-entry-get (point) "Effort"))) (when effort - (my/org-clock-notification + (my/org-clock-notification "开始计时" - (format "开始计时任务: %s\n预计用时: %s" + (format "开始计时任务: %s\n预计用时: %s" (org-get-heading t t t t) effort)))))) diff --git a/tools/emacs.d/lisp/init-package.el b/tools/emacs.d/lisp/init-package.el index 0e6ea11..2203dd7 100644 --- a/tools/emacs.d/lisp/init-package.el +++ b/tools/emacs.d/lisp/init-package.el @@ -66,17 +66,6 @@ ;; 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 :ensure t From 918f8a6ed5f74f49b9b80a4521f8667e9d818a81 Mon Sep 17 00:00:00 2001 From: js0ny Date: Fri, 14 Mar 2025 16:06:52 +0000 Subject: [PATCH 6/6] feat(emacs): Change vanilla emacs to straight.el --- tools/emacs.d/early-init.el | 1 + tools/emacs.d/init.el | 12 +++++++ tools/emacs.d/lisp/init-basic.el | 10 ------ tools/emacs.d/lisp/init-org.el | 6 ++-- tools/emacs.d/lisp/init-package.el | 58 ++++++++++++------------------ 5 files changed, 38 insertions(+), 49 deletions(-) create mode 100644 tools/emacs.d/early-init.el diff --git a/tools/emacs.d/early-init.el b/tools/emacs.d/early-init.el new file mode 100644 index 0000000..512068a --- /dev/null +++ b/tools/emacs.d/early-init.el @@ -0,0 +1 @@ +(setq package-enable-at-startup nil) diff --git a/tools/emacs.d/init.el b/tools/emacs.d/init.el index 636e55c..30284e8 100644 --- a/tools/emacs.d/init.el +++ b/tools/emacs.d/init.el @@ -16,6 +16,18 @@ ;; Store the auto-generated custom config to `custom.el` (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 (require 'init-package) ; package manager should be loaded first (require 'init-basic) diff --git a/tools/emacs.d/lisp/init-basic.el b/tools/emacs.d/lisp/init-basic.el index 4ad405e..ba09d49 100644 --- a/tools/emacs.d/lisp/init-basic.el +++ b/tools/emacs.d/lisp/init-basic.el @@ -14,16 +14,6 @@ :hook (prog-mode . display-line-numbers-mode)) -(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)) ;; https://book.emacs-china.org/#orgcfd105e Open with Emacs diff --git a/tools/emacs.d/lisp/init-org.el b/tools/emacs.d/lisp/init-org.el index 0f332d1..66c8165 100644 --- a/tools/emacs.d/lisp/init-org.el +++ b/tools/emacs.d/lisp/init-org.el @@ -6,7 +6,7 @@ ;; Org General (use-package org - :ensure nil ;; Use Emacs built-in Org Mode + :straight (:type built-in) ;; Tell straight to not install org :config (setq org-log-done 'time) (setq org-startup-indented nil) @@ -161,11 +161,11 @@ ;; Run source block with C-c C-c ;; Add supports for non-elisp langs (use-package ob-python - :ensure nil ; Part of Org Mode + :straight (:type built-in) ; Part of Org Mode :after org) (use-package ob-C ;; C++ support is integrated in ob-C - :ensure nil ; Part of Org Mode + :straight (:type built-in) ; Part of Org Mode :after org) (org-babel-do-load-languages diff --git a/tools/emacs.d/lisp/init-package.el b/tools/emacs.d/lisp/init-package.el index 2203dd7..e072935 100644 --- a/tools/emacs.d/lisp/init-package.el +++ b/tools/emacs.d/lisp/init-package.el @@ -1,45 +1,31 @@ -;;; init-package.el +;;; init-package.el --- Package management setup using straight.el -*- lexical-binding: t -*- -;; Initialise the package sources -(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) +(setq straight-base-dir (expand-file-name "straight" user-emacs-data)) -;; Ensure the package list is up-to-date -(unless package-archive-contents - (package-refresh-contents)) +;; Bootstrap straight.el +(defvar bootstrap-version) +(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 -(unless (package-installed-p 'use-package) -; (package-refresh-contents) Move to above - (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) +;; Use straight.el with use-package +(straight-use-package 'use-package) +(setq straight-use-package-by-default t) ;; Automatically use straight for all packages +;; Ensure gnu-elpa-keyring-update (equivalent to your previous keyring update logic) (use-package gnu-elpa-keyring-update) -; Re-enable signature -(setq package-check-signature 'allow-unsigned) - ;; Which Key - Prompt available commands (use-package which-key