blog.anqou.net
rss
author
tags

NixOS で Karukan の辞書を有効化する

一昨日の記事の続きで、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)

注釈

  1. Multiple-output package を使うと Fcitx5 のアドオンとまとめてビルドできそうなものですが、Nix 力(ぢから)が足りなくてできていません。