Open tumashu opened 1 year ago
很好。这样更灵活。
我想先请教一下,通过编译时指定CMake变量能行吗?比如这里的 CMAKE_INSTALL_FULL_DATADIR
。
除了 rime-data
的路径,还有其他路径比如 ibus-engine-rime
的位置需要指定 prefix。
应该不行吧,guix 中,每个用户的汇总rime-data目录可能都不一样,所以估计没法编译的时候指定,需要运行的时候动态设定。
是呢,NixOS 和 GUIX 这两个 linux 发行版和其它常见的 linux 发行版区别都特别大,如果没用过确实不好理解,
GUIX 会将软件包放在 store 中, 比如 rime-data-0.38 就放在
/gnu/store/b3f1s6nnj1rg7szcmb3n3y194ayhfgja-rime-data-0.38.20210802
而提供给每个用户的系统样子,是通过软链接生成的,这个和 git 操作项目目录的模式类似。
比如:我的帐号下,rime-data 在目录:
${HOME}/.guix-home/profile/share/rime-data
这个 rime-data 目录包含的文件都是软链接,链接到具体的 rime-data 包中。
由于这个目录不固定,所以需要动态获取。
从rime角度来说,完全放在用户文件夹里也可以使用,但这样就不能给 guix 打包了,需要用户自己管理 rime-data 文件,
比如:我准备打包 rime-cloverpinyin 这个 rime schema 包,下载之后,文件会放在
/gnu/store/yimjxq5yqfv80arb90cjyh9zf411id7n-rime-cloverpinyin-1.1.4
如果我在我的 HOME 目录中安装了它,它包含的 scheme 文件就会以软链接的方式出现在:
${HOME}/.guix-home/profile/share/rime-data
如果我设置了一个环境变量指向这个目录, ibus-rime 就可以自动找到它。
不然,用户只能将 rime-cloverpinyin 拷贝到 .config/ibus/rime 目录中手动管理了。
许多有 plugin 的包,在给 NixOS 或者 Guix 打包时,都会遇到 search path 的问题,比如 thunar,
dirs_string = (gchar *) g_getenv ("THUNARX_DIRS");
if (!dirs_string)
dirs_string = THUNARX_DIRECTORY;
thunar 处理 plugin 的时候,大概是这么处理的,如果 $THUNARX_DIRS 存在,就用它,如果不存在,就用 THUNARX_DIRECTORY,THUNARX_DIRECTORY 是编译的时候指定的。
如果这个机制不好包含在 ibus-rime 中,能不能提供一个 patch,最起码可以让 guix 打包的时候 apply 这个 patch。 我 c 语言能力不行,对 ibus-rime 也不太了解,所以没法写 patch
NixOS 或者 GUIX 这两种 linux 发行版比较特殊,没有固定的 /usr/share/rime-data 目录,所以需要 ibus-rime 运行时,从环境变量来获取一个目录,目前我了解 GUIX 编译 ibus-rime 的时候,将 IBUS_RIME_SHARED_DATA_DIR 绑定到 rime-data 包的安装路径,比如:
这样导致很难支持其他 rime schema 包,因为其它包不能将文件安装到 rime-data 包的目录。