1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 im = config.i18n.inputMethod;
7 cfg = im.fcitx5;
8 addons = cfg.addons ++ optional cfg.enableRimeData pkgs.rime-data;
9 fcitx5Package = pkgs.fcitx5-with-addons.override { inherit addons; };
10 whetherRimeDataDir = any (p: p.pname == "fcitx5-rime") cfg.addons;
11in {
12 options = {
13 i18n.inputMethod.fcitx5 = {
14 addons = mkOption {
15 type = with types; listOf package;
16 default = [];
17 example = literalExpression "with pkgs; [ fcitx5-rime ]";
18 description = lib.mdDoc ''
19 Enabled Fcitx5 addons.
20 '';
21 };
22
23 enableRimeData = mkEnableOption (lib.mdDoc "default rime-data with fcitx5-rime");
24 };
25 };
26
27 config = mkIf (im.enabled == "fcitx5") {
28 i18n.inputMethod.package = fcitx5Package;
29
30 environment = mkMerge [{
31 variables = {
32 GTK_IM_MODULE = "fcitx";
33 QT_IM_MODULE = "fcitx";
34 XMODIFIERS = "@im=fcitx";
35 QT_PLUGIN_PATH = [ "${fcitx5Package}/${pkgs.qt6.qtbase.qtPluginPrefix}" ];
36 };
37 }
38 (mkIf whetherRimeDataDir {
39 pathsToLink = [
40 "/share/rime-data"
41 ];
42
43 variables = {
44 NIX_RIME_DATA_DIR = "/run/current-system/sw/share/rime-data";
45 };
46 })];
47 };
48}