From 987ab3eff1cc8b60edb521ed212ac3eacf15d10d Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 8 Jun 2022 15:46:08 +0200 Subject: [PATCH 1/4] ibus-with-plugins: switch to buildEnv No need to call lndir manually. --- pkgs/tools/inputmethods/ibus/wrapper.nix | 50 ++++++++++++++---------- 1 file changed, 29 insertions(+), 21 deletions(-) diff --git a/pkgs/tools/inputmethods/ibus/wrapper.nix b/pkgs/tools/inputmethods/ibus/wrapper.nix index 93078325a0d..d05fdfd5bd7 100644 --- a/pkgs/tools/inputmethods/ibus/wrapper.nix +++ b/pkgs/tools/inputmethods/ibus/wrapper.nix @@ -1,26 +1,33 @@ -{ lib, runCommand, makeWrapper, lndir -, dconf, hicolor-icon-theme, ibus, librsvg, plugins ? [] +{ lib +, buildEnv +, makeWrapper +, dconf +, hicolor-icon-theme +, ibus +, librsvg +, plugins ? [ ] }: -let +buildEnv { name = "ibus-with-plugins-" + lib.getVersion ibus; - env = { - buildInputs = [ ibus ] ++ plugins; - nativeBuildInputs = [ lndir makeWrapper ]; - propagatedUserEnvPackages = [ hicolor-icon-theme ]; - paths = [ ibus ] ++ plugins; - inherit (ibus) meta; - }; - command = '' - for dir in bin etc lib libexec share; do - mkdir -p "$out/$dir" - for pkg in $paths; do - if [ -d "$pkg/$dir" ]; then - lndir -silent "$pkg/$dir" "$out/$dir" - fi - done - done + paths = [ ibus ] ++ plugins; + + pathsToLink = [ + "/bin" + "/etc" + "/lib" + "/libexec" + "/share" + ]; + + nativeBuildInputs = [ + makeWrapper + ]; + + buildInputs = [ ibus ] ++ plugins; + + postBuild = '' for prog in ibus; do wrapProgram "$out/bin/$prog" \ --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \ @@ -60,5 +67,6 @@ let --add-flags "--cache=refresh" done ''; -in - runCommand name env command + + inherit (ibus) meta; +} From 8ce001f6a262382c474dd503129aab5098e4a7d6 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Wed, 8 Jun 2022 16:09:32 +0200 Subject: [PATCH 2/4] ibus-with-plugins: Fix service paths They need to point to the wrapped programs for IBus to be able to find the engines. --- pkgs/tools/inputmethods/ibus/wrapper.nix | 43 ++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/pkgs/tools/inputmethods/ibus/wrapper.nix b/pkgs/tools/inputmethods/ibus/wrapper.nix index d05fdfd5bd7..c1328fbe984 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; From 5c641b41392090e2c3462a48aeb8d516b212c9c3 Mon Sep 17 00:00:00 2001 From: linj Date: Wed, 8 Jun 2022 16:33:58 +0800 Subject: [PATCH 3/4] ibus: patch sh to runtimeShell in ExecStart of systemd service --- pkgs/tools/inputmethods/ibus/default.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/tools/inputmethods/ibus/default.nix b/pkgs/tools/inputmethods/ibus/default.nix index a791e90a93c..3bcb5d01cf4 100644 --- a/pkgs/tools/inputmethods/ibus/default.nix +++ b/pkgs/tools/inputmethods/ibus/default.nix @@ -90,6 +90,8 @@ stdenv.mkDerivation rec { postPatch = '' patchShebangs --build data/dconf/make-dconf-override-db.sh cp ${buildPackages.gtk-doc}/share/gtk-doc/data/gtk-doc.make . + substituteInPlace bus/services/org.freedesktop.IBus.session.GNOME.service.in --replace "ExecStart=sh" "ExecStart=${runtimeShell}" + substituteInPlace bus/services/org.freedesktop.IBus.session.generic.service.in --replace "ExecStart=sh" "ExecStart=${runtimeShell}" ''; preAutoreconf = "touch ChangeLog"; From cdfd2b9f5707e9698b780f0d6326f232367ad1da Mon Sep 17 00:00:00 2001 From: linj Date: Wed, 8 Jun 2022 19:38:55 +0800 Subject: [PATCH 4/4] nixos/ibus: don't use xdg autostart for Gnome Gnome uses systemd to start ibus. --- nixos/modules/i18n/input-method/ibus.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/modules/i18n/input-method/ibus.nix b/nixos/modules/i18n/input-method/ibus.nix index c5b0cbc2150..33270707b26 100644 --- a/nixos/modules/i18n/input-method/ibus.nix +++ b/nixos/modules/i18n/input-method/ibus.nix @@ -23,6 +23,8 @@ let Name=IBus Type=Application Exec=${ibusPackage}/bin/ibus-daemon --daemonize --xim ${impanel} + # GNOME will launch ibus using systemd + NotShowIn=GNOME; ''; }; in