nixos 使用 home-manager 配置 emacs-rime

wsl 想用输入法有点麻烦,只能选 emacs-rime

但是在 nixos 上面怎么配置有点迷,翻了论坛的回答,写的都不是很清楚

这里总结一下,提供一个简单的 home-manager 配置思路

emacs 添加包:

(use-package rime
  :custom
  (default-input-method "rime"))

home-manager 添加配置:

  home.packages = with pkgs; [
    gnumake
  ];
  
  programs.emacs = {
    enable = true;
    package = pkgs.emacs-pgtk;
    extraPackages =
      epkgs: with epkgs; [
        vterm
        telega
        treesit-grammars.with-all-grammars
      ];
    extraConfig = ''
      (setq rime-librime-root "${pkgs.librime}"
            rime-emacs-module-header-root "${pkgs.emacs-pgtk}/include"
            rime-share-data-dir "${pkgs.rime-ice}/share/rime-data")
    '';
  };

需要 make 程序,extraPackages 只是示例,与本文无关

由于 nixpkgs 打包 rime 方案有点不同,没带 default.yaml 需要自己写,看 nixpkgs.dev/rime-ice

首先 M-x toggle-input-method 启用 rime,第一次部署会失败

然后进入 emacs 配置目录 cd ~/.config/emacs/rime 看一下 build 目录还没东西

创建空文件 touch default.yaml

创建新文件 emacs -nw default.custom.yaml

patch:
  __include: rime_ice_suggestion:/

  schema_list:
    - schema: "rime_ice"

最后再部署 M-x rime-deploy 就能工作了

我不推荐使用 Nix 提供的 treesitter trammar。因为 Emacs 的 treesitter 模式是作为内置功能随 Emacs 版本发布的,它不会得到常规的更新。事实上,treesitter 的 grammar 经常会引入破坏性变更,因此,更好的做法是让 Emacs 使用 treesit-language-source-alist 配置来自行构建,并且在遇到破坏性变更时,将某些语言的 grammar 固定在特定的版本上。