折腾原因,系统配置完fcitx5后于emacs中配置emacs-rime,在配置中定义rime-share-data-dir的值为 ~/.local/share/fcitx5/rime (根据帖子求教如何在nixos下安装emacs rime - #21,来自 rua )却无法正常输入,经nixos群组群友提醒,查看tmp下emacs-rime的报错日志 ,发现存在文件缺失,即rime-share-data-dir的值我定义错了, ~/.local/share/fcitx5/rime 应该是用户目录。
接着查看emacs-rime源码 emacs-rime/rime.el at 1b70d9cfbac9b11a934007f103b1abc9a034268f · DogLooksGood/emacs-rime · GitHub ,其在xdg-data-dir搜索关键词rime-data从而获取rime-share-data-dir的值,遂明白需要给rime-share-data-dir定义一个存在输入方案的目录。
NixOS的部分配置如下
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
(fcitx5-rime.override {
rimeDataPkgs = [
rime-data
rime-ice
# ... 其他方案
];
})
fcitx5-gtk
kdePackages.fcitx5-qt
fcitx5-configtool # 配置工具
];
};
}
以上配置代码,nix会将rimeDataPkgs内的方案打包,最终输出到/nix/store/-fcitx5-with-addons/share/rime-data和/nix/store/-fcitx5-rime-5.1.11/share/rime-data下,谁先谁后我没搞清楚,反正两个里面都有,希望大佬研究看一下。
搞清楚这个合并输入方案的rime-data在那个位置后,就尝试通过nix命令获取目录,但在使用
nix eval --raw nixpkgs#fcitx5-with-addons.outPath
nix eval --raw nixpkgs#fcitx5-rime.outPath
这两条命令时,发现sha256的值和/nix/store下正在使用的包的值的对不上,原因是用到了override输入不同导致输出的sha256不同。
毕竟不能每次更新都去配置里换一下sha256的值,找AI问了这种情况该如何获取fcitx5-with-addons和fcitx5-rime包的位置信息。
AI给出的解答是
❯ nix-store --query --requisites $(which fcitx5) | grep fcitx5-rime
/nix/store/ylb2hif7c4kzgfxn9s5zaqxq1gangsfh-fcitx5-rime-5.1.11
share/fcitx5/rime
❯ nix-store --query --requisites $(which fcitx5) | grep fcitx5-with-addons
/nix/store/jb33yk766zjwmmx3hqj21niagf6npbdb-fcitx5-with-addons-5.1.14
或
❯ nix path-info -r $(which fcitx5) | grep fcitx5-rime
/nix/store/ylb2hif7c4kzgfxn9s5zaqxq1gangsfh-fcitx5-rime-5.1.11
share/fcitx5/rime
❯ nix path-info -r $(which fcitx5) | grep fcitx5-with-addons
/nix/store/jb33yk766zjwmmx3hqj21niagf6npbdb-fcitx5-with-addons-5.1.14
这样至少是能获取到当前正在使用的rime-data的目录了,利用home-manager将其设置为环境变量,赋值给emacs中的rime-share-data-dir,最后实现emacs-rime正常输入。
AI也给出下述方案
{ config, pkgs, ... }:
let
myFcitx5Rime = pkgs.fcitx5-rime.override {
rimeDataPkgs = [ pkgs.rime-data pkgs.rime-ice ];
};
in
{
i18n.inputMethod = {
enabled = "fcitx5";
fcitx5.addons = with pkgs; [
myFcitx5Rime
fcitx5-gtk
kdePackages.fcitx5-qt
fcitx5-configtool
];
};
home.sessionVariables = {
FCITX5_RIME_PATH = "${myFcitx5Rime}";
# 方便调试和脚本使用
FCITX5_RIME_SHARE = "${myFcitx5Rime}/share/rime-data";
};
}
直接引用包即可设置环境变量了。
最后想问问除了AI给出的这种查询包(包被override什么的)位置的命令,有没有更好些、简易的命令。