From f3bcaad18b68fa46ce62c27a7d88a957eb0d93bf Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 25 Jun 2024 18:51:18 +0200 Subject: [PATCH] fcitx5: move configuration to home-manager --- home/home.nix | 1 + home/services/fcitx5.nix | 115 +++++++++++++++++++++++++++++++++++++++ hosts/common.nix | 49 +---------------- 3 files changed, 117 insertions(+), 48 deletions(-) create mode 100644 home/services/fcitx5.nix diff --git a/home/home.nix b/home/home.nix index 6bda18f..d7d4ad8 100644 --- a/home/home.nix +++ b/home/home.nix @@ -40,6 +40,7 @@ in { ./programs/zathura.nix ./services/dunst.nix + ./services/fcitx5.nix ./services/mpd.nix ./services/picom.nix ./services/polybar.nix diff --git a/home/services/fcitx5.nix b/home/services/fcitx5.nix new file mode 100644 index 0000000..58b4aa7 --- /dev/null +++ b/home/services/fcitx5.nix @@ -0,0 +1,115 @@ +{ pkgs, lib, config, ... }: +let + im = config.i18n.inputMethod; + cfg = im.fcitx5; + fcitx5Package = pkgs.libsForQt5.fcitx5-with-addons.override { inherit (cfg) addons; }; +in +{ + i18n.inputMethod = { + enabled = "fcitx5"; + fcitx5.addons = with pkgs; [ + fcitx5-mozc + fcitx5-gtk + # fcitx5-chinese-addons + ]; + }; + + xdg.configFile = let + format = pkgs.formats.ini { }; + in { + "fcitx5/profile".source = format.generate "fcitx5-profile" { + "Groups/0" = { + Name = "Default"; + "Default Layout" = "us"; + DefaultIM = "mozc"; + }; + "Groups/0/Items/0" = { + Name = "keyboard-us"; + Layout = ""; + }; + "Groups/0/Items/1" = { + Name = "keyboard-no"; + Layout = ""; + }; + "Groups/0/Items/2" = { + Name = "mozc"; + Layout = ""; + }; + GroupOrder = { + "0" = "Default"; + }; + }; + + "fcitx5/config".source = format.generate "fcitx5-config" { + Hotkey = { + # Enumerate when press trigger key repeatedly + EnumerateWithTriggerKeys = "True"; + # Temporally switch between first and current Input Method + AltTriggerKeys = ""; + # Enumerate Input Method Forward + EnumerateForwardKeys = ""; + # Enumerate Input Method Backward + EnumerateBackwardKeys = ""; + # Skip first input method while enumerating + EnumerateSkipFirst = "False"; + }; + + "Hotkey/TriggerKeys" = { + "0" = "Control+space"; + "1" = "Zenkaku_Hankaku"; + "2" = "Hangul"; + }; + + "Hotkey/EnumerateGroupForwardKeys"."0" = "Super+space"; + "Hotkey/EnumerateGroupBackwardKeys"."0" = "Shift+Super+space"; + "Hotkey/ActivateKeys"."0" = "Hangul_Hanja"; + "Hotkey/DeactivateKeys"."0" = "Hangul_Romaja"; + "Hotkey/PrevPage"."0" = "Up"; + "Hotkey/NextPage"."0" = "Down"; + "Hotkey/PrevCandidate"."0" = "Shift+Tab"; + "Hotkey/NextCandidate"."0" = "Tab"; + "Hotkey/TogglePreedit"."0" = "Control+Alt+P"; + + Behaviour = { + # Active By Default + ActiveByDefault = "False"; + # Share Input State + ShareInputState = "All"; + # Show preedit in application + PreeditEnabledByDefault = "True"; + # Show Input Method Information when switch input method + ShowInputMethodInformation = "True"; + # Show Input Method Information when changing focus + showInputMethodInformationWhenFocusIn = "False"; + # Show compact input method information + CompactInputMethodInformation = "True"; + # Show first input method information + ShowFirstInputMethodInformation = "True"; + # Default page size + DefaultPageSize = 5; + # Override Xkb Option + OverrideXkbOption = "False"; + # Custom Xkb Option + CustomXkbOption = ""; + # Force Enabled Addons + EnabledAddons = ""; + # Force Disabled Addons + DisabledAddons = ""; + # Preload input method to be used by default + PreloadInputMethod = "True"; + # Allow input method in the password field + AllowInputMethodForPassword = "False"; + # Show preedit text when typing password + ShowPreeditForPassword = "False"; + # Interval of saving user data in minutes + AutoSavePeriod = 30; + }; + }; + }; + + systemd.user.services.fcitx5-daemon = { + Service.Restart="on-failure"; + Service.ExecStart = lib.mkForce "${fcitx5Package}/bin/fcitx5"; + Service.ExecReload = "/bin/kill -HUP $MAINPID"; + }; +} diff --git a/hosts/common.nix b/hosts/common.nix index 6506749..475785b 100644 --- a/hosts/common.nix +++ b/hosts/common.nix @@ -158,54 +158,7 @@ in { ]; }; - i18n = { - defaultLocale = "en_US.UTF-8"; - inputMethod = lib.mkIf (!machineVars.headless) { - # enabled = "fcitx"; - # engines = with pkgs.fcitx-engines; [ mozc ]; - enabled = "fcitx5"; - fcitx5.addons = with pkgs; [ - fcitx5-mozc - fcitx5-gtk - # fcitx5-chinese-addons - ]; - - fcitx5.ignoreUserConfig = true; - fcitx5.settings.inputMethod = { - "Groups/0" = { - "Name" = "Default"; - "Default Layout" = "ch"; - "DefaultIM" = "mozc"; - }; - "Groups/0/Items/0" = { - "Name" = "keybord-us"; - "Layout" = null; - }; - "Groups/0/Items/1" = { - "Name" = "keybord-no"; - "Layout" = null; - }; - "Groups/0/Items/2" = { - "Name" = "mozc"; - "Layout" = null; - }; - "GroupOrder" = { - "0" = "Default"; - }; - }; - }; - }; - - systemd.user.services."fcitx5" = lib.mkIf (config.i18n.inputMethod.enabled == "fcitx5") { - description = "Fcitx5 IME"; - wantedBy = [ "graphical.target" ]; - serviceConfig = { - Type = "simple"; - ExecStart = "${config.i18n.inputMethod.package}/bin/fcitx5"; - ExecReload = "/bin/kill -HUP $MAINPID"; - Restart="on-failure"; - }; - }; + i18n.defaultLocale = "en_US.UTF-8"; environment = { variables = {