# System-wide i18n options. { config, options, lib, pkgs, ... }: let cfg = config.profiles.i18n; in { options.profiles.i18n = { enable = lib.mkEnableOption "i18n-related options"; ibus.enable = lib.mkEnableOption "i18n config with ibus"; fcitx5.enable = lib.mkEnableOption "i18n config with fcitx5"; }; config = lib.mkIf cfg.enable (lib.mkMerge [ { assertions = let enabledi18nConfigs = lib.countAttrs (_: setup: lib.isAttrs setup && setup.enable) cfg; in [{ assertion = enabledi18nConfigs <= 1; message = '' Only one i18n setup should be enabled at any given time. ''; }]; # I don't speak all of the listed languages. It's just nice to have some # additional language packs for it. ;p i18n.supportedLocales = lib.mkBefore [ "en_US.UTF-8/UTF-8" "ja_JP.UTF-8/UTF-8" "ko_KR.UTF-8/UTF-8" "zh_CN.UTF-8/UTF-8" "zh_HK.UTF-8/UTF-8" "zh_SG.UTF-8/UTF-8" "tl_PH.UTF-8/UTF-8" "fr_FR.UTF-8/UTF-8" "it_IT.UTF-8/UTF-8" ]; environment.systemPackages = with pkgs; [ goldendict ]; # The most minimal set of packages for most locales. fonts.fonts = with pkgs; [ noto-fonts noto-fonts-cjk noto-fonts-cjk-sans noto-fonts-cjk-serif source-code-pro source-sans-pro source-han-sans source-serif-pro source-han-serif source-han-mono ]; } (lib.mkIf cfg.ibus.enable { i18n.inputMethod = { enabled = "ibus"; ibus.engines = with pkgs.ibus-engines; [ mozc rime hangul table table-others typing-booster uniemoji ]; }; }) (lib.mkIf cfg.fcitx5.enable { i18n.inputMethod = { enabled = "fcitx5"; fcitx5 = { enableRimeData = true; addons = with pkgs; [ fcitx5-lua fcitx5-mozc fcitx5-rime fcitx5-table-extra fcitx5-table-other fcitx5-unikey ]; }; }; }) ]); }