about summary refs log tree commit diff
path: root/pkgs/tools/inputmethods
diff options
context:
space:
mode:
authorJan Tojnar <jtojnar@gmail.com>2022-06-08 16:09:32 +0200
committerJan Tojnar <jtojnar@gmail.com>2022-06-08 18:37:41 +0200
commit8ce001f6a262382c474dd503129aab5098e4a7d6 (patch)
tree5be209e0f2e181e027d0ccdc57a3950ac49589df /pkgs/tools/inputmethods
parent987ab3eff1cc8b60edb521ed212ac3eacf15d10d (diff)
ibus-with-plugins: Fix service paths
They need to point to the wrapped programs for IBus to be able to find the engines.
Diffstat (limited to 'pkgs/tools/inputmethods')
-rw-r--r--pkgs/tools/inputmethods/ibus/wrapper.nix43
1 files changed, 43 insertions, 0 deletions
diff --git a/pkgs/tools/inputmethods/ibus/wrapper.nix b/pkgs/tools/inputmethods/ibus/wrapper.nix
index d05fdfd5bd7d0..c1328fbe984a7 100644
--- a/pkgs/tools/inputmethods/ibus/wrapper.nix
+++ b/pkgs/tools/inputmethods/ibus/wrapper.nix
@@ -19,6 +19,11 @@ buildEnv {
     "/lib"
     "/libexec"
     "/share"
+    # Need to link contents so that the directories are writeable.
+    "/lib/systemd"
+    "/share/dbus-1/services"
+    "/share/systemd/user"
+    "/share/systemd/user/gnome-session.target.wants"
   ];
 
   nativeBuildInputs = [
@@ -66,6 +71,44 @@ buildEnv {
           --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" \
           --add-flags "--cache=refresh"
     done
+
+    ibusPackage="${ibus}"
+
+    # Update services.
+    for service in \
+        "share/dbus-1/services/org.freedesktop.IBus.service" \
+        "share/systemd/user/org.freedesktop.IBus.session.generic.service" \
+        "share/systemd/user/org.freedesktop.IBus.session.GNOME.service"
+    do
+        unlink "$out/$service"
+        substitute "$ibusPackage/$service" "$out/$service" --replace "$ibusPackage/bin" "$out/bin"
+    done
+
+    # Re-create relative symbolic links.
+    for link in \
+        "$out/share/systemd/user/gnome-session.target.wants/"*
+    do
+        target="$link"
+        until [[ "''${target:0:1}" != "/" ]]; do
+            target="$(readlink "$target")"
+        done
+        unlink "$link"
+        ln -s "$target" "$link"
+    done
+
+    # Update absolute symbolic links.
+    for link in \
+        "$out/lib/systemd/user"
+    do
+        target="$(readlink -f "$link")"
+        relativeTarget="''${target#$ibusPackage/}"
+        if [[ "$ibusPackage/$relativeTarget" != "$target" ]]; then
+            >&2 echo "File $link does not point to to a file in $ibusPackage"
+            exit 1
+        fi
+        unlink "$link"
+        ln -s "$out/$relativeTarget" "$link"
+    done
   '';
 
   inherit (ibus) meta;