ibus: add module

This commit is contained in:
nyadiia 2024-04-23 13:24:16 -05:00
parent 67de98ae6e
commit ed922f2ddf
No known key found for this signature in database
GPG key ID: 229718FDC160E880
2 changed files with 72 additions and 2 deletions

View file

@ -22,13 +22,13 @@ let
'';
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 = {
inputMethod = {
enabled = mkOption {
type = types.nullOr
(types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" ]);
(types.enum [ "fcitx" "fcitx5" "nabi" "uim" "hime" "kime" "ibus" ]);
default = null;
example = "fcitx5";
description = ''
@ -58,6 +58,9 @@ in {
`kime`
: A Korean IME.
`ibus`
: The intelligent input bus.
'';
};

View 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" ];
};
};
}