vuls: init at 0.27.0
[NixPkgs.git] / nixos / modules / i18n / input-method / ibus.nix
blob4af848c7201506032f94d5c61c50348cc3ca6d3b
1 { config, pkgs, lib, ... }:
3 with lib;
5 let
6   imcfg = config.i18n.inputMethod;
7   cfg = imcfg.ibus;
8   ibusPackage = pkgs.ibus-with-plugins.override { plugins = cfg.engines; };
9   ibusEngine = lib.types.mkOptionType {
10     name  = "ibus-engine";
11     inherit (lib.types.package) descriptionClass merge;
12     check = x: (lib.types.package.check x) && (attrByPath ["meta" "isIbusEngine"] false x);
13   };
15   impanel = optionalString (cfg.panel != null) "--panel=${cfg.panel}";
17   ibusAutostart = pkgs.writeTextFile {
18     name = "autostart-ibus-daemon";
19     destination = "/etc/xdg/autostart/ibus-daemon.desktop";
20     text = ''
21       [Desktop Entry]
22       Name=IBus
23       Type=Application
24       Exec=${ibusPackage}/bin/ibus-daemon --daemonize --xim ${impanel}
25       # GNOME will launch ibus using systemd
26       NotShowIn=GNOME;
27     '';
28   };
31   imports = [
32     (mkRenamedOptionModule [ "programs" "ibus" "plugins" ] [ "i18n" "inputMethod" "ibus" "engines" ])
33   ];
35   options = {
36     i18n.inputMethod.ibus = {
37       engines = mkOption {
38         type    = with types; listOf ibusEngine;
39         default = [];
40         example = literalExpression "with pkgs.ibus-engines; [ mozc hangul ]";
41         description =
42           let
43             enginesDrv = filterAttrs (const isDerivation) pkgs.ibus-engines;
44             engines = concatStringsSep ", "
45               (map (name: "`${name}`") (attrNames enginesDrv));
46           in "Enabled IBus engines. Available engines are: ${engines}.";
47       };
48       panel = mkOption {
49         type = with types; nullOr path;
50         default = null;
51         example = literalExpression ''"''${pkgs.plasma5Packages.plasma-desktop}/libexec/kimpanel-ibus-panel"'';
52         description = "Replace the IBus panel with another panel.";
53       };
54     };
55   };
57   config = mkIf (imcfg.enable && imcfg.type == "ibus") {
58     i18n.inputMethod.package = ibusPackage;
60     environment.systemPackages = [
61       ibusAutostart
62     ];
64     # Without dconf enabled it is impossible to use IBus
65     programs.dconf.enable = true;
67     programs.dconf.packages = [ ibusPackage ];
69     services.dbus.packages = [
70       ibusPackage
71     ];
73     environment.variables = {
74       GTK_IM_MODULE = "ibus";
75       QT_IM_MODULE = "ibus";
76       XMODIFIERS = "@im=ibus";
77     };
79     xdg.portal.extraPortals = mkIf config.xdg.portal.enable [
80       ibusPackage
81     ];
82   };
84   # uses attributes of the linked package
85   meta.buildDocsInSandbox = false;