1{ config, pkgs, lib, ... }:
2
3with lib;
4
5let
6 cfg = config.programs.ibus;
7in
8{
9 options = {
10
11 programs.ibus = {
12 enable = mkOption {
13 type = types.bool;
14 default = false;
15 example = true;
16 description = "Enable IBus input method";
17 };
18 plugins = mkOption {
19 type = lib.types.listOf lib.types.path;
20 default = [];
21 description = ''
22 IBus plugin packages
23 '';
24 };
25 };
26
27 };
28
29 config = mkIf cfg.enable {
30 environment.systemPackages = [ pkgs.ibus ];
31
32 gtkPlugins = [ pkgs.ibus ];
33 qtPlugins = [ pkgs.ibus-qt ];
34
35 environment.variables =
36 let
37 env = pkgs.buildEnv {
38 name = "ibus-env";
39 paths = [ pkgs.ibus ] ++ cfg.plugins;
40 };
41 in {
42 GTK_IM_MODULE = "ibus";
43 QT_IM_MODULE = "ibus";
44 XMODIFIERS = "@im=ibus";
45
46 IBUS_COMPONENT_PATH = "${env}/share/ibus/component";
47 };
48
49 services.xserver.displayManager.sessionCommands = "${pkgs.ibus}/bin/ibus-daemon --daemonize --xim --cache=none";
50 };
51}