ibus: add module
This commit is contained in:
parent
67de98ae6e
commit
ed922f2ddf
|
@ -22,13 +22,13 @@ let
|
||||||
'';
|
'';
|
||||||
|
|
||||||
in {
|
in {
|
||||||
imports = [ ./fcitx5.nix ./hime.nix ./kime.nix ./nabi.nix ./uim.nix ];
|
imports = [ ./fcitx5.nix ./hime.nix ./kime.nix ./nabi.nix ./uim.nix ./ibus.nix ];
|
||||||
|
|
||||||
options.i18n = {
|
options.i18n = {
|
||||||
inputMethod = {
|
inputMethod = {
|
||||||
enabled = mkOption {
|
enabled = mkOption {
|
||||||
type = types.nullOr
|
type = types.nullOr
|
||||||
(types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
|
(types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" "ibus" ]);
|
||||||
default = null;
|
default = null;
|
||||||
example = "fcitx5";
|
example = "fcitx5";
|
||||||
description = ''
|
description = ''
|
||||||
|
@ -58,6 +58,9 @@ in {
|
||||||
|
|
||||||
`kime`
|
`kime`
|
||||||
: A Korean IME.
|
: A Korean IME.
|
||||||
|
|
||||||
|
`ibus`
|
||||||
|
: The intelligent input bus.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
67
modules/i18n/input-method/ibus.nix
Normal file
67
modules/i18n/input-method/ibus.nix
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
im = config.i18n.inputMethod;
|
||||||
|
cfg = im.ibus;
|
||||||
|
impanel = optionalString (cfg.panel != null) "--panel=${cfg.panel}";
|
||||||
|
ibusPackage = pkgs.ibus-with-plugins.override { inherit (cfg) engines; };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
i18n.inputMethod.ibus = {
|
||||||
|
engines = mkOption {
|
||||||
|
type = with types; listOf ibusEngine;
|
||||||
|
default = [ ];
|
||||||
|
example = literalExpression "with pkgs.ibus-engines; [ mozc hangul ]";
|
||||||
|
description = ''
|
||||||
|
Enabled IBus engines.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
panel = mkOption {
|
||||||
|
type = with types; nullOr path;
|
||||||
|
default = null;
|
||||||
|
example = literalExpression ''"''${pkgs.plasma5Packages.plasma-desktop}/libexec/kimpanel-ibus-panel"'';
|
||||||
|
description = ''
|
||||||
|
Replace the IBus panel with another panel.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf (im.enabled == "ibus") {
|
||||||
|
i18n.inputMethod.package = ibusPackage;
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
GLFW_IM_MODULE = "ibus";
|
||||||
|
GTK_IM_MODULE = "ibus";
|
||||||
|
QT_IM_MODULE = "ibus";
|
||||||
|
XMODIFIERS = "@im=ibus";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Without dconf enabled it is impossible to use IBus
|
||||||
|
programs.dconf.enable = true;
|
||||||
|
|
||||||
|
programs.dconf.packages = [ ibusPackage ];
|
||||||
|
|
||||||
|
services.dbus.packages = [ ibusPackage ];
|
||||||
|
|
||||||
|
xdg.portal.extraPortals = mkIf config.xdg.portal.enable [
|
||||||
|
ibusPackage
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.services.ibus-daemon = {
|
||||||
|
Unit = {
|
||||||
|
Description = "IBus input method editor";
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${ibusPackage}/bin/ibus-daemon --replace --xim ${impanel}";
|
||||||
|
ExecReload = "${ibusPackage}/bin/ibus restart";
|
||||||
|
ExecStop = "${ibusPackage}/bin/ibus exit";
|
||||||
|
};
|
||||||
|
Install.WantedBy = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue