From 5c189f5c0ff10422d9cad8182260c12ae8ce9649 Mon Sep 17 00:00:00 2001 From: js0ny Date: Tue, 18 Nov 2025 08:19:15 +0000 Subject: [PATCH] ime: wrapper helper for fcitx module --- home/dot_config/nvim/lua/keymaps/basic.lua | 3 +- .../nvim/lua/plugins/mod/avante-nvim.lua | 2 +- home/dot_config/zed/settings.json | 23 ++- misc/vscode/vscode.vimrc | 3 + nixcfgs/users/js0ny/packages/cli.nix | 2 + nixcfgs/users/js0ny/packages/gui.nix | 167 +++++++++--------- nixcfgs/users/js0ny/programs/rime.nix | 51 ++++-- 7 files changed, 147 insertions(+), 104 deletions(-) diff --git a/home/dot_config/nvim/lua/keymaps/basic.lua b/home/dot_config/nvim/lua/keymaps/basic.lua index 1066dc5..087965b 100644 --- a/home/dot_config/nvim/lua/keymaps/basic.lua +++ b/home/dot_config/nvim/lua/keymaps/basic.lua @@ -1,5 +1,6 @@ local mode_arrow = { "n", "v", "s", "x", "o" } +-- stylua: ignore local keymaps_basic = { -- https://github.com/LazyVim/LazyVim/blob/d1529f650fdd89cb620258bdeca5ed7b558420c7/lua/lazyvim/config/keymaps.lua#L8 { @@ -96,7 +97,7 @@ local keymaps_basic = { opts = { desc = "Down 5 Lines" }, }, { keys = "", cmd = "", opts = { desc = "Focus on other panel" } }, - { keys = "", cmd = "%" }, + -- { keys = "", cmd = "%" }, { keys = "Y", cmd = "y$", opts = { desc = "Yank to End of Line" } }, { mode = mode_arrow, keys = "J", cmd = "5j" }, { mode = mode_arrow, keys = "K", cmd = "5k" }, diff --git a/home/dot_config/nvim/lua/plugins/mod/avante-nvim.lua b/home/dot_config/nvim/lua/plugins/mod/avante-nvim.lua index 5d55944..7aca804 100644 --- a/home/dot_config/nvim/lua/plugins/mod/avante-nvim.lua +++ b/home/dot_config/nvim/lua/plugins/mod/avante-nvim.lua @@ -15,7 +15,7 @@ return { openrouter = { __inherited_from = "openai", endpoint = "https://openrouter.ai/api/v1", - model = "anthropic/claude-sonnet-4.5", + model = "openai/gpt-5.1-codex", api_key_name = "OPENROUTER_API_KEY", }, }, diff --git a/home/dot_config/zed/settings.json b/home/dot_config/zed/settings.json index e134c52..f1295f1 100644 --- a/home/dot_config/zed/settings.json +++ b/home/dot_config/zed/settings.json @@ -52,12 +52,12 @@ "ui_font_size": 16, "buffer_font_size": null, "relative_line_numbers": true, - "buffer_font_family": "Zed Plex Mono", + "buffer_font_family": "Maple Mono NF CN", "remove_trailing_whitespace_on_save": true, "agent": { "default_model": { - "provider": "copilot_chat", - "model": "claude-3-7-sonnet" + "provider": "openrouter", + "model": "openai/gpt-5.1-codex" } }, "inlay_hints": { @@ -88,7 +88,11 @@ "metrics": false }, "languages": { + "YAML": { + "tab_size": 2 + }, "Nix": { + "tab_size": 2, "formatter": { "external": { "command": "alejandra", @@ -98,6 +102,19 @@ "completions": { "lsp_insert_mode": "replace" } + }, + "Lua": { + "tab_size": 2, + "formatter": { + "external": { + "command": "stylua" + } + } } + }, + "auto_install_extensions": { + "catppuccin": true, + "material-icon-theme": true, + "git-firefly": true } } diff --git a/misc/vscode/vscode.vimrc b/misc/vscode/vscode.vimrc index 342e8b0..611dcb3 100644 --- a/misc/vscode/vscode.vimrc +++ b/misc/vscode/vscode.vimrc @@ -77,3 +77,6 @@ nnoremap ]g editor.action.editor.nextChange " " Use C-w C-w as original C-w " noremap workbench.action.closeActiveEditor " noremap workbench.action.togglePanel + +" camelCaseMotion +noremap w w \ No newline at end of file diff --git a/nixcfgs/users/js0ny/packages/cli.nix b/nixcfgs/users/js0ny/packages/cli.nix index 339cbe8..2dee8c3 100644 --- a/nixcfgs/users/js0ny/packages/cli.nix +++ b/nixcfgs/users/js0ny/packages/cli.nix @@ -55,5 +55,7 @@ srm mediainfo exiftool + ddgr # DuckDuckGo CLI + jujutsu ]; } diff --git a/nixcfgs/users/js0ny/packages/gui.nix b/nixcfgs/users/js0ny/packages/gui.nix index 29dbbfd..c64ea22 100644 --- a/nixcfgs/users/js0ny/packages/gui.nix +++ b/nixcfgs/users/js0ny/packages/gui.nix @@ -1,66 +1,88 @@ -{pkgs, ...}: { - home.packages = with pkgs; [ - # Terminal Emulator - ghostty # default - kitty - alacritty - warp-terminal +{ + pkgs, + lib, + ... +}: let + mkFcitxIM = builtins.map ( + p: + lib.hiPrio ( + pkgs.runCommand "${p.name}-wrapped" {nativeBuildInputs = with pkgs; [makeWrapper];} '' + mkdir -p $out/bin + makeWrapper \ + ${p}/bin/${p.meta.mainProgram or p.pname} \ + $out/bin/${p.meta.mainProgram or p.pname} \ + --set GTK_IM_MODULE fcitx \ + --set QT_IM_MODULE fcitx + '' + ) + ); +in { + home.packages = with pkgs; + [ + # Terminal Emulator + ghostty # default + kitty + alacritty + warp-terminal - # PDF Viewer - kdePackages.okular # default - sioyek + # PDF Viewer + kdePackages.okular # default + sioyek - # Image Viewer - loupe # SUPER FAST 有催人跑的感觉 w/ GPU Accel. + # Image Viewer + loupe # SUPER FAST 有催人跑的感觉 w/ GPU Accel. - kdePackages.elisa - mpv - haruna + kdePackages.elisa + mpv + haruna - # Email - protonmail-bridge - thunderbird - birdtray + # Email + protonmail-bridge + thunderbird + birdtray - # Theming - papirus-icon-theme - rose-pine-cursor + # Theming + papirus-icon-theme + rose-pine-cursor - pcloud - materialgram - steam - signal-desktop - # Use Wayland for Jetbrains - (jetbrains.idea-ultimate.override { - vmopts = ''-Dawt.toolkit.name=WLToolkit''; - }) - (jetbrains.rider.override { - vmopts = ''-Dawt.toolkit.name=WLToolkit''; - }) - localsend - cherry-studio - kdePackages.kdeconnect-kde - picard - qutebrowser - ryubing - qbittorrent - protonvpn-gui - proton-pass - neovim-qt - goldendict-ng - kdePackages.kdenlive - gimp - steam-run - bottles - lutris - vivaldi - rustdesk - kdePackages.krdc - kdePackages.breeze - zotero - anki-bin - feishin - ]; + pcloud + materialgram + steam + signal-desktop + # Use Wayland for Jetbrains + (jetbrains.idea-ultimate.override { + vmopts = ''-Dawt.toolkit.name=WLToolkit''; + }) + (jetbrains.rider.override { + vmopts = ''-Dawt.toolkit.name=WLToolkit''; + }) + localsend + cherry-studio + kdePackages.kdeconnect-kde + picard + qutebrowser + ryubing + qbittorrent + protonvpn-gui + proton-pass + goldendict-ng + kdePackages.kdenlive + gimp + steam-run + bottles + lutris + vivaldi + rustdesk + kdePackages.krdc + kdePackages.breeze + zotero + anki-bin + feishin + ] + ++ (mkFcitxIM [ + pkgs.neovim-qt + pkgs.anki + ]); home.sessionVariables = { ANKI_WAYLAND = 1; @@ -68,37 +90,6 @@ NIXOS_OZONE_WL = 1; }; - xdg.desktopEntries = { - "anki" = { - name = "Anki"; - genericName = "Flashcards"; - comment = "An intelligent spaced-repetition memory training program"; - icon = "anki"; - type = "Application"; - terminal = false; - categories = [ - "Education" - "Languages" - "KDE" - "Qt" - ]; - mimeType = [ - "application/x-apkg" - "application/x-anki" - "application/x-ankiaddon" - ]; - # Should specify wayland and IME used - exec = "env ANKI_WAYLAND=1 QT_IM_MODULE=fcitx anki %f"; - settings = { - "TryExec" = "anki"; - "Version" = "1.0"; - "X-GNOME-SingleWindow" = "true"; - "SingleMainWindow" = "true"; - "StartupWMClass" = "anki"; - }; - }; - }; - # TODO: This is a dependency of `feishin` (EOL) # Once the new version is published, delete this nixpkgs.config.permittedInsecurePackages = [ diff --git a/nixcfgs/users/js0ny/programs/rime.nix b/nixcfgs/users/js0ny/programs/rime.nix index 65f97bd..e44c0e1 100644 --- a/nixcfgs/users/js0ny/programs/rime.nix +++ b/nixcfgs/users/js0ny/programs/rime.nix @@ -105,17 +105,46 @@ in { source = rimeConfigFiltered; recursive = true; }; - home.file."${rimePath}/default.custom.yaml" = { - text = '' - patch: - schema_list: - - schema: wanxiang_pro - - schema: latex - - schema: jyut6ping3 - - schema: dioion - - schema: gekion + # yaml 最后留出一行 + home.file = { + "${rimePath}/default.custom.yaml" = { + text = '' + patch: + # 方案列表 + schema_list: + - schema: wanxiang_pro + - schema: latex + - schema: jyut6ping3 + - schema: dioion + - schema: gekion + # 切换中英: + # 不同的选项表示:打字打到一半时按下了 CapsLock、Shift、Control 后: + # commit_code 上屏原始的编码,然后切换到英文 + # commit_text 上屏拼出的词句,然后切换到英文 + # clear 清除未上屏内容,然后切换到英文 + # inline_ascii 切换到临时英文模式,按回车上屏后回到中文状态 + # noop 屏蔽快捷键,不切换中英,但不要屏蔽 CapsLock + ascii_composer/switch_key: + Shift_L: noop + Shift_R: commit_code + key_binder/bindings: + # emacs editing: + - { when: composing, accept: Control+p, send: Up } + - { when: composing, accept: Control+n, send: Down } + - { when: composing, accept: Control+b, send: Left } + - { when: composing, accept: Control+f, send: Right } - ''; - enable = true; + ''; + enable = true; + }; + "${rimePath}/wanxiang_pro.custom.yaml" = { + text = '' + patch: + key_binder/sequence: + pin: "Alt+p" # 使用 Alt-p 而不是 Ctrl-p 置顶候选项(见 ./default.custom.yaml 中 emacs editing) + + ''; + enable = true; + }; }; }