pinentryがダブってるぞよ!

経緯

Arch Linux (WSL) に Nix を入れて HomeManager で環境を管理しています。 git の設定でコミットする時にgpgで署名されます。 このCLIだけの環境で想定される挙動としては、鍵の使用時にターミナル上にプロンプトが出て、パスフレーズを入力する、という流れです。

ところが、git commit しようとすると gnupgpinentry がないとエラーを出します。

詰まったところ

  • ちゃんとpinentryパッケージを指定し、インストールされている
  services.gpg-agent.pinentryPackage = pkgs.pinentry-tty;
  • pinentry コマンドが動く

原因?

which pinentry
>> /usr/sbin/pinentry

どうやら HomeManager でインストールした pinentry じゃなさそうじゃないですか〜

これは pacman の依存の gnupg の依存で入ってきたやつですね。

対策

上書きしてやりましょう(雑)

{ pkgs, ... }: {
  imports = [ ./. ];
  services.gpg-agent.pinentryPackage = pkgs.pinentry-tty;

  programs.zsh.initExtra = ''
    alias pinentry=${pkgs.pinentry-tty}/bin/pinentry
  '';
}

HomeManagerをビルドし直したらgpg-agentのデーモンを再起動してあげます。

gpgconf --kill gpg-agent

まとめ

直ったぞよ!