1{
2 lib,
3 buildEnv,
4 makeWrapper,
5 dconf,
6 hicolor-icon-theme,
7 ibus,
8 librsvg,
9 plugins ? [ ],
10}:
11
12buildEnv {
13 name = "ibus-with-plugins-" + lib.getVersion ibus;
14
15 paths = [ ibus ] ++ plugins;
16
17 pathsToLink = [
18 "/bin"
19 "/etc"
20 "/lib"
21 "/libexec"
22 "/share"
23 # Need to link contents so that the directories are writeable.
24 "/lib/systemd"
25 "/share/dbus-1/services"
26 "/share/systemd/user"
27 "/share/systemd/user/gnome-session.target.wants"
28 ];
29
30 nativeBuildInputs = [
31 makeWrapper
32 ];
33
34 buildInputs = [ ibus ] ++ plugins;
35
36 postBuild = ''
37 for prog in ibus; do
38 wrapProgram "$out/bin/$prog" \
39 --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
40 --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
41 --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
42 --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
43 --set IBUS_DATAROOTDIR "$out/share" \
44 --set IBUS_LIBEXECDIR "$out/libexec" \
45 --set IBUS_LOCALEDIR "$out/share/locale" \
46 --set IBUS_PREFIX "$out" \
47 --set IBUS_TABLE_BIN_PATH "$out/bin" \
48 --set IBUS_TABLE_DATA_DIR "$out/share" \
49 --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
50 --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
51 --prefix PYTHONPATH : "$PYTHONPATH" \
52 --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
53 --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share"
54 done
55
56 for prog in ibus-daemon; do
57 wrapProgram "$out/bin/$prog" \
58 --set GDK_PIXBUF_MODULE_FILE ${librsvg.out}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \
59 --prefix GI_TYPELIB_PATH : "$GI_TYPELIB_PATH:$out/lib/girepository-1.0" \
60 --prefix GIO_EXTRA_MODULES : "${lib.getLib dconf}/lib/gio/modules" \
61 --set IBUS_COMPONENT_PATH "$out/share/ibus/component/" \
62 --set IBUS_DATAROOTDIR "$out/share" \
63 --set IBUS_LIBEXECDIR "$out/libexec" \
64 --set IBUS_LOCALEDIR "$out/share/locale" \
65 --set IBUS_PREFIX "$out" \
66 --set IBUS_TABLE_BIN_PATH "$out/bin" \
67 --set IBUS_TABLE_DATA_DIR "$out/share" \
68 --set IBUS_TABLE_LIB_LOCATION "$out/libexec" \
69 --set IBUS_TABLE_LOCATION "$out/share/ibus-table" \
70 --prefix PYTHONPATH : "$PYTHONPATH" \
71 --prefix XDG_DATA_DIRS : "$out/share:$GSETTINGS_SCHEMAS_PATH" \
72 --suffix XDG_DATA_DIRS : "${hicolor-icon-theme}/share" \
73 --add-flags "--cache=refresh"
74 done
75
76 ibusPackage="${ibus}"
77
78 # Update services.
79 for service in \
80 "share/dbus-1/services/org.freedesktop.IBus.service" \
81 "share/systemd/user/org.freedesktop.IBus.session.generic.service" \
82 "share/systemd/user/org.freedesktop.IBus.session.GNOME.service"
83 do
84 unlink "$out/$service"
85 substitute "$ibusPackage/$service" "$out/$service" --replace "$ibusPackage/bin" "$out/bin"
86 done
87
88 # Re-create relative symbolic links.
89 for link in \
90 "$out/share/systemd/user/gnome-session.target.wants/"*
91 do
92 target="$link"
93 until [[ "''${target:0:1}" != "/" ]]; do
94 target="$(readlink "$target")"
95 done
96 unlink "$link"
97 ln -s "$target" "$link"
98 done
99
100 # Update absolute symbolic links.
101 for link in \
102 "$out/lib/systemd/user"
103 do
104 target="$(readlink -f "$link")"
105 relativeTarget="''${target#$ibusPackage/}"
106 if [[ "$ibusPackage/$relativeTarget" != "$target" ]]; then
107 >&2 echo "File $link does not point to to a file in $ibusPackage"
108 exit 1
109 fi
110 unlink "$link"
111 ln -s "$out/$relativeTarget" "$link"
112 done
113 '';
114
115 inherit (ibus) meta;
116}