From ed922f2ddf22515ee9ac1e54307f8c4c4683753d Mon Sep 17 00:00:00 2001 From: nyadiia Date: Tue, 23 Apr 2024 13:24:16 -0500 Subject: [PATCH 1/4] ibus: add module --- modules/i18n/input-method/default.nix | 7 ++- modules/i18n/input-method/ibus.nix | 67 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 modules/i18n/input-method/ibus.nix diff --git a/modules/i18n/input-method/default.nix b/modules/i18n/input-method/default.nix index 5e3a89b33..c5f492aac 100644 --- a/modules/i18n/input-method/default.nix +++ b/modules/i18n/input-method/default.nix @@ -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. ''; }; diff --git a/modules/i18n/input-method/ibus.nix b/modules/i18n/input-method/ibus.nix new file mode 100644 index 000000000..1a2b7052c --- /dev/null +++ b/modules/i18n/input-method/ibus.nix @@ -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" ]; + }; + }; +} From 5de2a2e3e9e2d2036eed2a82eefd2cc0781da97a Mon Sep 17 00:00:00 2001 From: nyadiia Date: Tue, 23 Apr 2024 13:27:01 -0500 Subject: [PATCH 2/4] ibus: format --- modules/i18n/input-method/default.nix | 3 ++- modules/i18n/input-method/ibus.nix | 10 ++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/modules/i18n/input-method/default.nix b/modules/i18n/input-method/default.nix index c5f492aac..6a7cfb4e5 100644 --- a/modules/i18n/input-method/default.nix +++ b/modules/i18n/input-method/default.nix @@ -22,7 +22,8 @@ let ''; in { - imports = [ ./fcitx5.nix ./hime.nix ./kime.nix ./nabi.nix ./uim.nix ./ibus.nix ]; + imports = + [ ./fcitx5.nix ./hime.nix ./kime.nix ./nabi.nix ./uim.nix ./ibus.nix ]; options.i18n = { inputMethod = { diff --git a/modules/i18n/input-method/ibus.nix b/modules/i18n/input-method/ibus.nix index 1a2b7052c..47c6d4d97 100644 --- a/modules/i18n/input-method/ibus.nix +++ b/modules/i18n/input-method/ibus.nix @@ -7,8 +7,7 @@ let cfg = im.ibus; impanel = optionalString (cfg.panel != null) "--panel=${cfg.panel}"; ibusPackage = pkgs.ibus-with-plugins.override { inherit (cfg) engines; }; -in -{ +in { options = { i18n.inputMethod.ibus = { engines = mkOption { @@ -23,7 +22,8 @@ in panel = mkOption { type = with types; nullOr path; default = null; - example = literalExpression ''"''${pkgs.plasma5Packages.plasma-desktop}/libexec/kimpanel-ibus-panel"''; + example = literalExpression '' + "''${pkgs.plasma5Packages.plasma-desktop}/libexec/kimpanel-ibus-panel"''; description = '' Replace the IBus panel with another panel. ''; @@ -47,9 +47,7 @@ in services.dbus.packages = [ ibusPackage ]; - xdg.portal.extraPortals = mkIf config.xdg.portal.enable [ - ibusPackage - ]; + xdg.portal.extraPortals = mkIf config.xdg.portal.enable [ ibusPackage ]; systemd.user.services.ibus-daemon = { Unit = { From 6303bd708535b078aa01229dda16cc819826550c Mon Sep 17 00:00:00 2001 From: nyadiia Date: Tue, 23 Apr 2024 13:31:11 -0500 Subject: [PATCH 3/4] maintainers: add nyadiia (Nadia) to maintainers list --- modules/i18n/input-method/ibus.nix | 1 + modules/lib/maintainers.nix | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/modules/i18n/input-method/ibus.nix b/modules/i18n/input-method/ibus.nix index 47c6d4d97..618ebe986 100644 --- a/modules/i18n/input-method/ibus.nix +++ b/modules/i18n/input-method/ibus.nix @@ -62,4 +62,5 @@ in { Install.WantedBy = [ "graphical-session.target" ]; }; }; + meta.maintainers = with maintainers; [ nyadiia ]; } diff --git a/modules/lib/maintainers.nix b/modules/lib/maintainers.nix index a2c568633..1a59a6ed6 100644 --- a/modules/lib/maintainers.nix +++ b/modules/lib/maintainers.nix @@ -219,6 +219,12 @@ github = "nilp0inter"; githubId = 1224006; }; + nyadiia = { + name = "Nadia"; + email = "nyadiia@pm.me"; + github = "nyadiia"; + githubId = 43252360; + }; seylerius = { email = "sable@seyleri.us"; name = "Sable Seyler"; From def660552388845063fde76ee0b72184c188f5b7 Mon Sep 17 00:00:00 2001 From: nyadiia Date: Tue, 23 Apr 2024 13:46:54 -0500 Subject: [PATCH 4/4] ibus: add ibusEngine type and nest panel option the panel option was outside of the 'i18n.inputMethod.ibus' option --- modules/i18n/input-method/ibus.nix | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/modules/i18n/input-method/ibus.nix b/modules/i18n/input-method/ibus.nix index 618ebe986..99c148cb1 100644 --- a/modules/i18n/input-method/ibus.nix +++ b/modules/i18n/input-method/ibus.nix @@ -6,6 +6,12 @@ let im = config.i18n.inputMethod; cfg = im.ibus; impanel = optionalString (cfg.panel != null) "--panel=${cfg.panel}"; + ibusEngine = types.package // { + name = "ibus-engine"; + check = x: + (lib.types.package.check x) + && (attrByPath [ "meta" "isIbusEngine" ] false x); + }; ibusPackage = pkgs.ibus-with-plugins.override { inherit (cfg) engines; }; in { options = { @@ -18,15 +24,15 @@ in { 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. - ''; + 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. + ''; + }; }; };