summary refs log tree commit diff
diff options
context:
space:
mode:
authorLin Yinfeng <lin.yinfeng@outlook.com>2023-04-01 15:12:19 +0800
committerLin Yinfeng <lin.yinfeng@outlook.com>2023-04-02 10:36:36 +0800
commite4246ae1e7f78b7087dce9c9da10d28d3725025f (patch)
tree91a71fea8e8814657137e979a1ab2e20da65f5c6
parente3652e0735fbec227f342712f180f4f21f0594f2 (diff)
downloadnixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar.gz
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar.bz2
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar.lz
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar.xz
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.tar.zst
nixpkgs-e4246ae1e7f78b7087dce9c9da10d28d3725025f.zip
{ibus,fcitx5}-rime: Refactor RIME data support
-rw-r--r--nixos/doc/manual/release-notes/rl-2305.section.md2
-rw-r--r--nixos/modules/i18n/input-method/fcitx5.nix38
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-rime-with-nix-env-variable.patch18
-rw-r--r--pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix12
-rw-r--r--pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix17
5 files changed, 39 insertions, 48 deletions
diff --git a/nixos/doc/manual/release-notes/rl-2305.section.md b/nixos/doc/manual/release-notes/rl-2305.section.md
index e23f1b562e7..4ef80cb39cb 100644
--- a/nixos/doc/manual/release-notes/rl-2305.section.md
+++ b/nixos/doc/manual/release-notes/rl-2305.section.md
@@ -128,6 +128,8 @@ In addition to numerous new and upgraded packages, this release has the followin
 
 - The [services.unifi-video.openFirewall](#opt-services.unifi-video.openFirewall) module option default value has been changed from `true` to `false`. You will need to explicitly set this option to `true`, or configure your firewall.
 
+- The option `i18n.inputMethod.fcitx5.enableRimeData` has been removed. Default RIME data is now included in `fcitx5-rime` by default, and can be customized using `fcitx5-rime.override { rimeDataPkgs = [ pkgs.rime-data, package2, ... ]; }`
+
 - Kime has been updated from 2.5.6 to 3.0.2 and the `i18n.inputMethod.kime.config` option has been removed. Users should use `daemonModules`, `iconColor`, and `extraConfig` options under `i18n.inputMethod.kime` instead.
 
 - `tut` has been updated from 1.0.34 to 2.0.0, and now uses the TOML format for the configuration file instead of INI. Additional information can be found [here](https://github.com/RasmusLindroth/tut/releases/tag/2.0.0).
diff --git a/nixos/modules/i18n/input-method/fcitx5.nix b/nixos/modules/i18n/input-method/fcitx5.nix
index aa816c90a3d..7251240d26a 100644
--- a/nixos/modules/i18n/input-method/fcitx5.nix
+++ b/nixos/modules/i18n/input-method/fcitx5.nix
@@ -5,10 +5,9 @@ with lib;
 let
   im = config.i18n.inputMethod;
   cfg = im.fcitx5;
-  addons = cfg.addons ++ optional cfg.enableRimeData pkgs.rime-data;
-  fcitx5Package = pkgs.fcitx5-with-addons.override { inherit addons; };
-  whetherRimeDataDir = any (p: p.pname == "fcitx5-rime") cfg.addons;
-in {
+  fcitx5Package = pkgs.fcitx5-with-addons.override { inherit (cfg) addons; };
+in
+{
   options = {
     i18n.inputMethod.fcitx5 = {
       addons = mkOption {
@@ -19,30 +18,23 @@ in {
           Enabled Fcitx5 addons.
         '';
       };
-
-      enableRimeData = mkEnableOption (lib.mdDoc "default rime-data with fcitx5-rime");
     };
   };
 
+  imports = [
+    (mkRemovedOptionModule [ "i18n" "inputMethod" "fcitx5" "enableRimeData" ] ''
+      RIME data is now included in `fcitx5-rime` by default, and can be customized using `fcitx5-rime.override { rimeDataPkgs = ...; }`
+    '')
+  ];
+
   config = mkIf (im.enabled == "fcitx5") {
     i18n.inputMethod.package = fcitx5Package;
 
-    environment = mkMerge [{
-      variables = {
-        GTK_IM_MODULE = "fcitx";
-        QT_IM_MODULE = "fcitx";
-        XMODIFIERS = "@im=fcitx";
-        QT_PLUGIN_PATH = [ "${fcitx5Package}/${pkgs.qt6.qtbase.qtPluginPrefix}" ];
-      };
-    }
-    (mkIf whetherRimeDataDir {
-      pathsToLink = [
-        "/share/rime-data"
-      ];
-
-      variables =  {
-        NIX_RIME_DATA_DIR = "/run/current-system/sw/share/rime-data";
-      };
-    })];
+    environment.variables = {
+      GTK_IM_MODULE = "fcitx";
+      QT_IM_MODULE = "fcitx";
+      XMODIFIERS = "@im=fcitx";
+      QT_PLUGIN_PATH = [ "${fcitx5Package}/${pkgs.qt6.qtbase.qtPluginPrefix}" ];
+    };
   };
 }
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-rime-with-nix-env-variable.patch b/pkgs/tools/inputmethods/fcitx5/fcitx5-rime-with-nix-env-variable.patch
deleted file mode 100644
index 428a0232dc3..00000000000
--- a/pkgs/tools/inputmethods/fcitx5/fcitx5-rime-with-nix-env-variable.patch
+++ /dev/null
@@ -1,18 +0,0 @@
-:100644 100644 fac4f53 aed9617 M	src/rimeengine.cpp
-
-diff --git a/src/rimeengine.cpp b/src/rimeengine.cpp
-index fac4f53..aed9617 100644
---- a/src/rimeengine.cpp
-+++ b/src/rimeengine.cpp
-@@ -164,7 +164,10 @@ void RimeEngine::rimeStart(bool fullcheck) {
-             RIME_ERROR() << "Failed to create user directory: " << userDir;
-         }
-     }
--    const char *sharedDataDir = RIME_DATA_DIR;
-+    const char *sharedDataDir = getenv("NIX_RIME_DATA_DIR");
-+    if (!sharedDataDir) {
-+        sharedDataDir = RIME_DATA_DIR;
-+    }
- 
-     RIME_STRUCT(RimeTraits, fcitx_rime_traits);
-     fcitx_rime_traits.shared_data_dir = sharedDataDir;
diff --git a/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix b/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
index 03150b43c47..4249567635c 100644
--- a/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
+++ b/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
@@ -6,6 +6,9 @@
 , gettext
 , fcitx5
 , librime
+, rime-data
+, symlinkJoin
+, rimeDataPkgs ? [ rime-data ]
 }:
 
 stdenv.mkDerivation rec {
@@ -35,7 +38,14 @@ stdenv.mkDerivation rec {
     librime
   ];
 
-  patches = [ ./fcitx5-rime-with-nix-env-variable.patch ];
+  rimeDataDrv = symlinkJoin {
+    name = "fcitx5-rime-data";
+    paths = rimeDataPkgs;
+  };
+
+  postInstall = ''
+    cp -r "${rimeDataDrv}/share/rime-data/." $out/share/rime-data/
+  '';
 
   meta = with lib; {
     description = "RIME support for Fcitx5";
diff --git a/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix b/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
index d415b6b5a45..774978929b4 100644
--- a/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
+++ b/pkgs/tools/inputmethods/ibus-engines/ibus-rime/default.nix
@@ -9,6 +9,8 @@
 , librime
 , pkg-config
 , rime-data
+, symlinkJoin
+, rimeDataPkgs ? [ rime-data ]
 }:
 
 stdenv.mkDerivation rec {
@@ -22,15 +24,18 @@ stdenv.mkDerivation rec {
     sha256 = "0gdxg6ia0i31jn3cvh1nrsjga1j31hf8a2zfgg8rzn25chrfr319";
   };
 
-  buildInputs = [ gdk-pixbuf glib ibus libnotify librime rime-data ];
+  buildInputs = [ gdk-pixbuf glib ibus libnotify librime ];
   nativeBuildInputs = [ cmake pkg-config ];
 
-  cmakeFlags = [ "-DRIME_DATA_DIR=${rime-data}/share/rime-data" ];
+  cmakeFlags = [ "-DRIME_DATA_DIR=${placeholder "out"}/share/rime-data" ];
 
-  prePatch = ''
-    substituteInPlace CMakeLists.txt \
-       --replace 'DESTINATION "''${RIME_DATA_DIR}"' \
-                 'DESTINATION "''${CMAKE_INSTALL_DATADIR}/rime-data"'
+  rimeDataDrv = symlinkJoin {
+    name = "ibus-rime-data";
+    paths = rimeDataPkgs;
+  };
+
+  postInstall = ''
+    cp -r "${rimeDataDrv}/share/rime-data/." $out/share/rime-data/
   '';
 
   meta = with lib; {