From 39e11eac71d7e2788ebb0137ffb2cee887eb0160 Mon Sep 17 00:00:00 2001 From: Gabriel Arazas Date: Mon, 12 Sep 2022 18:51:09 +0800 Subject: [PATCH] profiles/i18n: modularize common config into separate options --- modules/nixos/profiles/i18n.nix | 119 ++++++++++++------ .../nixos/workflows/a-happy-gnome/default.nix | 15 +-- 2 files changed, 86 insertions(+), 48 deletions(-) diff --git a/modules/nixos/profiles/i18n.nix b/modules/nixos/profiles/i18n.nix index d2c1b298..a925801c 100644 --- a/modules/nixos/profiles/i18n.nix +++ b/modules/nixos/profiles/i18n.nix @@ -3,41 +3,88 @@ let cfg = config.profiles.i18n; -in { - options.profiles.i18n.enable = lib.mkEnableOption "i18n-related options"; - - config = lib.mkIf cfg.enable { - # I don't speak all of the listed languages. It's just nice to have some - # additional language packs for it. ;p - i18n.supportedLocales = [ - "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 - ]; +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 + ]; + }; + }; + }) + ]); } diff --git a/modules/nixos/workflows/a-happy-gnome/default.nix b/modules/nixos/workflows/a-happy-gnome/default.nix index 047f2808..32fe1e47 100644 --- a/modules/nixos/workflows/a-happy-gnome/default.nix +++ b/modules/nixos/workflows/a-happy-gnome/default.nix @@ -110,18 +110,9 @@ in }; services.packagekit.enable = false; - - i18n.inputMethod = { - enabled = "ibus"; - ibus.engines = with pkgs.ibus-engines; [ - mozc - rime - hangul - table - table-others - typing-booster - uniemoji - ]; + profiles.i18n = { + enable = true; + ibus.enable = true; }; # Since we're using KDE Connect, we'll have to use gsconnect.