一昨日の記事の続きで、NixOS で Karukan の辞書のサポートを有効化してみます。 ドキュメントに辞書のインストール方法が書かれているので、やることはこれを Nix のプログラムで書くだけです。
Home Manager の home.file を使うとホームディレクトリの配下にファイルを置けるので、これを使います:
home.file = {
".local/share/karukan-im/dict.bin" = {
target = ".local/share/karukan-im/dict.bin";
source = pkgs.stdenv.mkDerivation {
pname = "karukan-dict";
version = "0.1.0";
src = pkgs.fetchurl {
url = "https://github.com/togatoga/karukan/releases/download/v0.1.0/dict.tgz";
hash = "sha256-8ZTSUmv4JmIrxbr3wH51Ja2b3i3GOJbNkpBFKDpK7M0=";
};
installPhase = ''
cp ../dict.bin $out
'';
};
};
};
辞書にどのような言葉が含まれているかを調べるためには karukan-cli が使えます。これは以下のような Nix プログラムでビルドできます[1]:
{
cmake,
fetchFromGitHub,
openssl,
pkg-config,
rustPlatform,
}:
rustPlatform.buildRustPackage (finalAttrs: {
pname = "karukan-cli";
version = "0.1.0";
src = fetchFromGitHub {
owner = "togatoga";
repo = "karukan";
rev = "3a96300e1005a80f6acb98b3dba877ed2041f8ba";
hash = "sha256-KMC7YYFi0UbOkZM7Q/s1eYUXeV9R5JdQj9wtJj5bWBI=";
};
cargoHash = "sha256-4j43EwFsNdJ1HqMwdEE8IKC0y/2gKh0+zNUP5ViIy9k=";
nativeBuildInputs = [
cmake
pkg-config
rustPlatform.bindgenHook # cf. https://github.com/NixOS/nixpkgs/issues/52447#issuecomment-1915060425
];
buildInputs = [
openssl
];
doCheck = false;
})
上記を environment.systemPackages に突っ込んでおくと karukan-dict コマンドが使えるようになります:
❯ karukan-dict view ~/.local/share/karukan-im/dict.bin --query きょう
Loading dictionaries...
Loading "/home/anqou/.local/share/karukan-im/dict.bin"...
Dictionary loaded.
きょう 今日 4115
きょう KYO 5000
きょう 経 6320
きょう 卿 6418
きょう 鏡 6494
きょう 教 6726
きょう きょう 7074
きょう 俠 7404
きょう 饗 7404
きょう 怯 7406
きょう 僑 7408
きょう 凶 7615
きょう 強 7709
きょう 興 7759
きょう 羌 8627
きょう 況 8639
きょう 橋 8789
きょう 京 9105
きょう 狭 9373
きょう 挟 9396
きょう 杏 9538
きょう 狂 9611
きょう 響 9675
きょう 峡 9723
きょう 香 9773
きょう 共 9830
きょう キョウ 10000
きょう 競 10000
きょう 境 10145
きょう 姜 10397
きょう 龔 10397
きょう 匡 10399
きょう 喬 10429
きょう 郷 11061
きょう 僥謳 11210
きょう 協 11947
きょう 夾 99999
きょう 嬌 99999
きょう 恭 99999
きょう 景 99999
きょう 暁 99999
きょう 胸 99999
きょう 頬 99999
(43 candidates)
注釈
-
Multiple-output package を使うと Fcitx5 のアドオンとまとめてビルドできそうなものですが、Nix 力(ぢから)が足りなくてできていません。 ↩