本人主力开发机用的是arch linux. Arch linux + wayland + fcitx5 几乎在所有的需要输入的非原生app下都表现极差,经常性无法切换输入法。本文提供的方法可以解决这一问题。

💡
nix 初学者。不足之处请批评指正。

原生配置的麻烦

  • 安装一堆包
  • 修改一堆环境变量
  • chrome/chromium 需要一堆配置文件。~/.config 文件夹下,就起码要设置 chrome-flags.conf来让chrome跑起来。code-flags.conf来让vscode正常工作。
  • 每个软件需要的配置文件不尽相同。。。比如说wps要改/usr/lib/下面的几个可执行文件

Nix home-manager的好处

  • 集配置文件,安装软件于一体
  • 可回滚
  • fcitx5不用一个一个搞了。。。(这也是主要目的)

如何安装

nix可以在任何linux上安装,请参看官方安装教程。我个人推荐https://github.com/DeterminateSystems/nix-installer。相比官方版本默认启用了flake,还更容易卸载了 😂

装好了nix之后装home-manager https://nix-community.github.io/home-manager/index.xhtml#sec-install-standalone

我一般都在unstable channel。毕竟Arch Linux也一直在滚动更新,没道理home-manager不滚。

如何配置 home.nix

都安装好了之后应该修改 ~/.config/home-manager/home.nix 就行。相关配置如下

{ config, pkgs, ... }:

{
  # ...
  i18n.inputMethod = {
    enabled = "fcitx5";
    fcitx5 = {
      addons = [
        pkgs.fcitx5-chinese-addons
        pkgs.fcitx5-configtool
        pkgs.fcitx5-pinyin-zhwiki
        # other addons, like cloud pinyin maybe?
      ];
    };
  };

  nixpkgs.config.allowUnfree = true;
  nixpkgs.config.permittedInsecurePackages = [
    "openssl-1.1.1w" # required by sublime4
  ];

  # The home.packages option allows you to install Nix packages into your
  # environment.
  home.packages = [
    # --- fcitx5 sucks when using it together with kde wayland ---
    pkgs.vscode
    pkgs.nixpkgs-fmt # vscode nix plugin required

    pkgs.google-chrome

    pkgs.libreoffice-fresh

    pkgs.sublime4
    # pkgs.sublime-merge  # install in system, otherwise open in editor will not work
    pkgs.obsidian

    pkgs.spotify # yeah, the search field...
    # --- fcitx5 complaining ends here ---
  ];
  ...
}

同时将 source $HOME/.nix-profile/etc/profile.d/hm-session-vars.sh 加入 ~/.profile 文件中。通过 home-manager session variable来配置 fcitx 需要的那三个环境变量 GTK_IM_MODULE QT_IM_MODULE XMODIFIERS

这样就大功告成了。所有打字输入的软件都会通过nix fcitx5来配置。我只提供了和fcitx相关的配置,以及提供了一堆我平时打字输入的软件。其他自己配置吧。

如何更新

由于使用了flake,这里使用flake更新。

cd ~/.config/home-manager && nix flake update && home-manager switch

清理空间

nix store gc && home-manager expire-generations '-7 days'

使用 Nix Home Manager 管理 KDE Wayland 下的 Fcitx5 应用