615 lines
15 KiB
Nix
615 lines
15 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
mylib,
|
|
pkgs,
|
|
...
|
|
}: let
|
|
inherit (config.modules) fcitx;
|
|
in {
|
|
options.modules.fcitx = import ./options.nix {inherit lib mylib;};
|
|
|
|
config = lib.mkIf fcitx.enable {
|
|
i18n.inputMethod = {
|
|
enable = true;
|
|
type = "fcitx5";
|
|
|
|
fcitx5 = {
|
|
waylandFrontend = true;
|
|
|
|
addons = with pkgs; [
|
|
fcitx5-gtk
|
|
# fcitx5-configtool
|
|
catppuccin-fcitx5
|
|
|
|
libsForQt5.fcitx5-qt # QT5
|
|
libsForQt5.fcitx5-chinese-addons
|
|
|
|
qt6Packages.fcitx5-qt # QT6
|
|
qt6Packages.fcitx5-chinese-addons
|
|
];
|
|
|
|
settings = {
|
|
inputMethod = {
|
|
GroupOrder = {
|
|
"0" = "Default";
|
|
};
|
|
|
|
"Groups/0" = {
|
|
# Group Name
|
|
Name = "Default";
|
|
|
|
# Layout
|
|
"Default Layout" = "us";
|
|
|
|
# Default Input Method
|
|
DefaultIM = "pinyin";
|
|
};
|
|
|
|
"Groups/0/Items/0" = {
|
|
# Name
|
|
Name = "keyboard-us";
|
|
|
|
# Layout
|
|
# Layout=
|
|
};
|
|
|
|
"Groups/0/Items/1" = {
|
|
# Name
|
|
Name = "pinyin";
|
|
|
|
# Layout
|
|
# Layout=
|
|
};
|
|
};
|
|
|
|
globalOptions = {
|
|
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;
|
|
|
|
# Enumerate Input Method Group Forward
|
|
# EnumerateGroupForwardKeys=
|
|
|
|
# Enumerate Input Method Group Backward
|
|
# EnumerateGroupBackwardKeys=
|
|
|
|
# Activate Input Method
|
|
# ActivateKeys=
|
|
|
|
# Deactivate Input Method
|
|
# DeactivateKeys=
|
|
};
|
|
|
|
"Hotkey/TriggerKeys" = {
|
|
"0" = "Super+space";
|
|
};
|
|
|
|
"Hotkey/PrevPage" = {
|
|
"0" = "Up";
|
|
};
|
|
|
|
"Hotkey/NextPage" = {
|
|
"0" = "Down";
|
|
};
|
|
|
|
"Hotkey/PrevCandidate" = {
|
|
"0" = "Shift+Tab";
|
|
};
|
|
|
|
"Hotkey/NextCandidate" = {
|
|
"0" = "Tab";
|
|
};
|
|
|
|
"Hotkey/TogglePreedit" = {
|
|
"0" = "Control+Alt+P";
|
|
};
|
|
|
|
"Behavior" = {
|
|
# Active By Default
|
|
ActiveByDefault = false;
|
|
|
|
# Reset state on Focus In
|
|
resetStateWhenFocusIn = "No";
|
|
|
|
# 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 = false;
|
|
|
|
# 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;
|
|
};
|
|
};
|
|
|
|
addons = {
|
|
chttrans.globalSection = {
|
|
# Translate engine
|
|
Engine = "OpenCC";
|
|
|
|
# Toggle key
|
|
# Hotkey=
|
|
|
|
# Enabled Input Methods
|
|
# EnabledIM=
|
|
|
|
# OpenCC profile for Simplified to Traditional
|
|
# OpenCCS2TProfile=
|
|
|
|
# OpenCC profile for Traditional to Simplified
|
|
# OpenCCT2SProfile=
|
|
};
|
|
|
|
classicui.globalSection = {
|
|
# Vertical Candidate List
|
|
"Vertical Candidate List" = false;
|
|
|
|
# Use mouse wheel to go to prev or next page
|
|
WheelForPaging = true;
|
|
|
|
# Font
|
|
Font = "Sans 12";
|
|
|
|
# Menu Font
|
|
MenuFont = "Sans 12";
|
|
|
|
# Tray Font
|
|
TrayFont = "Sans Bold 10";
|
|
|
|
# Tray Label Outline Color
|
|
TrayOutlineColor = "#000000";
|
|
|
|
# Tray Label Text Color
|
|
TrayTextColor = "#ffffff";
|
|
|
|
# Prefer Text Icon
|
|
PreferTextIcon = false;
|
|
|
|
# Show Layout Name In Icon
|
|
ShowLayoutNameInIcon = true;
|
|
|
|
# Use input method language to display text
|
|
UseInputMethodLanguageToDisplayText = true;
|
|
|
|
# Theme
|
|
Theme = "catppuccin-mocha-lavender";
|
|
|
|
# Dark Theme
|
|
DarkTheme = "catppuccin-mocha-lavender";
|
|
|
|
# Follow system light/dark color scheme
|
|
# NOTE: Doesn't work since I don't set up the environment
|
|
# so apps can detect if light/dark mode is used
|
|
UseDarkTheme = true;
|
|
|
|
# Follow system accent color if it is supported by theme and desktop
|
|
UseAccentColor = true;
|
|
|
|
# Use Per Screen DPI on X11
|
|
PerScreenDPI = true;
|
|
|
|
# Force font DPI on Wayland
|
|
ForceWaylandDPI = 0;
|
|
|
|
# Enable fractional scale under Wayland
|
|
EnableFractionalScale = true;
|
|
};
|
|
|
|
clipboard.globalSection = {
|
|
# Trigger Key
|
|
# TriggerKey=
|
|
|
|
# Paste Primary
|
|
# PastePrimaryKey=
|
|
|
|
# Number of entries
|
|
"Number of entries" = 5;
|
|
};
|
|
|
|
cloudpinyin.globalSection = {
|
|
# Minimum Pinyin Length
|
|
MinimumPinyinLength = 4;
|
|
|
|
# Backend
|
|
Backend = "GoogleCN";
|
|
|
|
# Proxy
|
|
# Proxy=
|
|
};
|
|
|
|
cloudpinyin.sections = {
|
|
"Toggle Key" = {
|
|
"0" = "Control+Alt+Shift+C";
|
|
};
|
|
};
|
|
|
|
fullwidth.globalSection = {
|
|
# Toggle key
|
|
# Hotkey=
|
|
};
|
|
|
|
imselector.globalSection = {
|
|
# Trigger Key
|
|
# TriggerKey=
|
|
|
|
# Trigger Key for only current input context
|
|
# TriggerKeyLocal=
|
|
|
|
# Hotkey for switching to the N-th input method
|
|
# SwitchKey=
|
|
|
|
# Hotkey for switching to the N-th input method for only current input context
|
|
# SwitchKeyLocal=
|
|
};
|
|
|
|
keyboard.globalSection = {
|
|
# Page size
|
|
PageSize = 5;
|
|
|
|
# Enable emoji in hint
|
|
EnableEmoji = false;
|
|
|
|
# Enable emoji in quickphrase
|
|
EnableQuickPhraseEmoji = false;
|
|
|
|
# Choose key modifier
|
|
"Choose Modifier" = "Alt";
|
|
|
|
# Enable hint by default
|
|
EnableHintByDefault = false;
|
|
|
|
# Trigger hint mode for one time
|
|
# "One Time Hint Trigger"=
|
|
|
|
# Use new compose behavior
|
|
UseNewComposeBehavior = true;
|
|
|
|
# Type special characters with long press
|
|
EnableLongPress = false;
|
|
};
|
|
|
|
keyboard.sections = {
|
|
"PrevCandidate" = {
|
|
"0" = "Shift+Tab";
|
|
};
|
|
|
|
"NextCandidate" = {
|
|
"0" = "Tab";
|
|
};
|
|
|
|
"Hint Trigger" = {
|
|
"0" = "Control+Alt+H";
|
|
};
|
|
|
|
"LongPressBlocklist" = {
|
|
"0" = "konsole";
|
|
};
|
|
};
|
|
|
|
notifications.globalSection = {
|
|
# Hidden Notifications
|
|
# HiddenNotifications=
|
|
};
|
|
|
|
pinyin.globalSection = {
|
|
# Shuangpin Profile
|
|
ShuangpinProfile = "Ziranma";
|
|
|
|
# Show current shuangpin mode
|
|
ShowShuangpinMode = true;
|
|
|
|
# Page size
|
|
PageSize = 7;
|
|
|
|
# Enable Spell
|
|
SpellEnabled = false;
|
|
|
|
# Enable Symbols
|
|
SymbolsEnabled = true;
|
|
|
|
# Enable Chaizi
|
|
ChaiziEnabled = false;
|
|
|
|
# Enable Characters in Unicode CJK Extension B
|
|
ExtBEnabled = true;
|
|
|
|
# Enable Cloud Pinyin
|
|
CloudPinyinEnabled = true;
|
|
|
|
# Cloud Pinyin Index
|
|
CloudPinyinIndex = 2;
|
|
|
|
# Show animation when Cloud Pinyin is loading
|
|
CloudPinyinAnimation = true;
|
|
|
|
# Always show Cloud Pinyin place holder
|
|
KeepCloudPinyinPlaceHolder = false;
|
|
|
|
# Preedit Mode
|
|
PreeditMode = "Composing pinyin";
|
|
|
|
# Fix embedded preedit cursor at the beginning of the preedit
|
|
PreeditCursorPositionAtBeginning = true;
|
|
|
|
# Show complete pinyin in preedit
|
|
PinyinInPreedit = false;
|
|
|
|
# Enable Prediction
|
|
Prediction = false;
|
|
|
|
# Prediction Size
|
|
PredictionSize = 10;
|
|
|
|
# Action when switching input method
|
|
SwitchInputMethodBehavior = "Commit current preedit";
|
|
|
|
# Forget word
|
|
# ForgetWord=
|
|
|
|
# Select 2nd Candidate
|
|
# SecondCandidate=
|
|
|
|
# Select 3rd Candidate
|
|
# ThirdCandidate=
|
|
|
|
# Use Keypad as Selection key
|
|
UseKeypadAsSelection = false;
|
|
|
|
# Use BackSpace to cancel the selection
|
|
BackSpaceToUnselect = true;
|
|
|
|
# Number of Sentences
|
|
"Number of sentence" = 2;
|
|
|
|
# Prompt long word length when input length over (0 for disable)
|
|
LongWordLengthLimit = 4;
|
|
|
|
# Key to trigger quickphrase
|
|
# QuickPhraseKey=
|
|
|
|
# Use V to trigger quickphrase
|
|
VAsQuickphrase = false;
|
|
|
|
# FirstRun
|
|
FirstRun = false;
|
|
};
|
|
|
|
pinyin.sections = {
|
|
"PrevPage" = {
|
|
"0" = "Up";
|
|
};
|
|
|
|
"NextPage" = {
|
|
"0" = "Down";
|
|
};
|
|
|
|
"PrevCandidate" = {
|
|
"0" = "Shift+Tab";
|
|
};
|
|
|
|
"NextCandidate" = {
|
|
"0" = "Tab";
|
|
};
|
|
|
|
"CurrentCandidate" = {
|
|
"0" = "space";
|
|
"1" = "KP_Space";
|
|
};
|
|
|
|
"CommitRawInput" = {
|
|
"0" = "Return";
|
|
"1" = "KP_Enter";
|
|
"2" = "Control+Return";
|
|
"3" = "Control+KP_Enter";
|
|
"4" = "Shift+Return";
|
|
"5" = "Shift+KP_Enter";
|
|
"6" = "Control+Shift+Return";
|
|
"7" = "Control+Shift+KP_Enter";
|
|
};
|
|
|
|
"ChooseCharFromPhrase" = {
|
|
"0" = "bracketleft";
|
|
"1" = "bracketright";
|
|
};
|
|
|
|
"FilterByStroke" = {
|
|
"0" = "grave";
|
|
};
|
|
|
|
"QuickPhraseTriggerRegex" = {
|
|
"0" = ".(/|@)$";
|
|
"1" = "^(www|bbs|forum|mail|bbs)''.";
|
|
"2" = "^(http|https|ftp|telnet|mailto):";
|
|
};
|
|
|
|
"Fuzzy" = {
|
|
# ue -> ve
|
|
VE_UE = true;
|
|
|
|
# Common Typo
|
|
NG_GN = true;
|
|
|
|
# Inner Segment (xian -> xi'an)
|
|
Inner = true;
|
|
|
|
# Inner Segment for Short Pinyin (qie -> qi'e)
|
|
InnerShort = true;
|
|
|
|
# Match partial finals (e -> en, eng, ei)
|
|
PartialFinal = true;
|
|
|
|
# Match partial shuangpin if input length is longer than 4
|
|
PartialSp = false;
|
|
|
|
# u <-> v
|
|
V_U = false;
|
|
|
|
# an <-> ang
|
|
AN_ANG = false;
|
|
|
|
# en <-> eng
|
|
EN_ENG = false;
|
|
|
|
# ian <-> iang
|
|
IAN_IANG = false;
|
|
|
|
# in <-> ing
|
|
IN_ING = false;
|
|
|
|
# u <-> ou
|
|
U_OU = false;
|
|
|
|
# uan <-> uang
|
|
UAN_UANG = false;
|
|
|
|
# c <-> ch
|
|
C_CH = false;
|
|
|
|
# f <-> h
|
|
F_H = false;
|
|
|
|
# l <-> n
|
|
L_N = false;
|
|
|
|
# s <-> sh
|
|
S_SH = false;
|
|
|
|
# z <-> zh
|
|
Z_ZH = false;
|
|
|
|
# Correction Layout
|
|
Correction = "None";
|
|
};
|
|
};
|
|
|
|
punctuation.globalSection = {
|
|
# Toggle key
|
|
# Hotkey=
|
|
|
|
# Half width punctuation after latin letter or number
|
|
HalfWidthPuncAfterLetterOrNumber = true;
|
|
|
|
# Type paired punctuations together (e.g. Quote)
|
|
TypePairedPunctuationsTogether = false;
|
|
|
|
# Enabled
|
|
Enabled = true;
|
|
};
|
|
|
|
quickphrase.globalSection = {
|
|
# Trigger Key
|
|
# TriggerKey=
|
|
|
|
# Choose key modifier
|
|
"Choose Modifier" = "None";
|
|
|
|
# Enable Spell check
|
|
Spell = true;
|
|
|
|
# Fallback Spell check language
|
|
FallbackSpellLanguage = "en";
|
|
};
|
|
|
|
spell.sections = {
|
|
"ProviderOrder" = {
|
|
"0" = "Presage";
|
|
"1" = "Custom";
|
|
"2" = "Enchant";
|
|
};
|
|
};
|
|
|
|
table.globalSection = {
|
|
# Modify dictionary
|
|
# ModifyDictionaryKey=
|
|
|
|
# Forget word
|
|
# ForgetWord=
|
|
|
|
# Lookup pinyin
|
|
# LookupPinyinKey=
|
|
|
|
# Enable Prediction
|
|
Prediction = false;
|
|
|
|
# Prediction Size
|
|
PredictionSize = 10;
|
|
};
|
|
|
|
unicode.sections = {
|
|
"TriggerKey" = {
|
|
"0" = "Control+Alt+Shift+U";
|
|
};
|
|
|
|
"DirectUnicodeMode" = {
|
|
"0" = "Control+Shift+U";
|
|
};
|
|
};
|
|
|
|
waylandim.globalSection = {
|
|
# Detect current running application (Need restart)
|
|
DetectApplication = true;
|
|
};
|
|
|
|
xcb.globalSection = {
|
|
# Allow Overriding System XKB Settings
|
|
"Allow Overriding System XKB Settings" = true;
|
|
|
|
# Always set layout to be only group layout
|
|
AlwaysSetToGroupLayout = true;
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|