Skip to content

feat(radicale): カレンダー・タスク・連絡先を自宅の Radicale に集約する - #375

Open
gapul wants to merge 1 commit into
mainfrom
feat/radicale-credential
Open

feat(radicale): カレンダー・タスク・連絡先を自宅の Radicale に集約する#375
gapul wants to merge 1 commit into
mainfrom
feat/radicale-credential

Conversation

@gapul

@gapul gapul commented Aug 16, 2026

Copy link
Copy Markdown
Owner

なぜ

Radicale は 6/28 から homeserver で動いていたが、コレクションが1つも無く、パスワードも sops に入っていない状態だった。nix/mobile/ios-profiles.nix に構成プロファイルまで用意されていたのに、実質使われていない。iCloud と Google の両方から連絡先・カレンダー・リマインダーを引き上げる先がここなので、まず器を作る。

サーバ側(手作業)

homeserver は sops 非導入で、秘密は /var/lib/secrets/ に手置きする方針。Radicale の htpasswd も同じ扱いにした。

/gapul/calendar   VEVENT      カレンダー
/gapul/tasks      VTODO       タスク
/gapul/contacts   addressbook 連絡先

/var/lib/homelab/radicale/config/users を bcrypt で作り直し(旧版は users.bak-20260816)。

実測

3種類とも PUT / GET / DELETE が通り、日本語も往復した。

予定PUT: 201   SUMMARY:Radicale 疎通テスト
タスクPUT: 201  SUMMARY:Radicale タスクテスト
連絡先PUT: 201  FN:テスト 太郎

calcurse の同期先を移す

ServerAddress = www.google.com から dav.gapul.net へ。あわせて設定キーが古い書式のままで壊れていたのを直す。

いまの calcurse-caldav は [General] SyncDir[CalDAV] ServerAddress も受け付けず、Unexpected config key in section General: SyncDir で即死する。つまり Google 時代からこの同期は動いていなかった。正しくは [General]Hostname / Path / HTTPS

罠が2つ。

  • 既定が DryRun = Yes で、明示的に No にしないと接続だけして何も同期しない
  • コメント行も設定として読まれるので、注釈に旧キー名を書くと同じエラーで落ちる

実測

$ calcurse-caldav --init=two-way
Importing new object 248d0be0...
1 items imported, 0 items removed locally.

サーバに置いた予定が calcurse 側に降りることを確認。

残り

データ本体の移行(iCloud / Google からの連絡先・カレンダー・リマインダー)は Takeout と privacy.apple.com の書き出し待ち。iPhone / Mac へのアカウント追加も未了。

gapul added a commit that referenced this pull request Aug 20, 2026
これまで secrets/secrets.yaml 1本を mac / laptop / WSL の3ホストが同じ
secrets.nix 経由で読んでいたため、Linux 側のリビルドでも Xcode の Apple ID と
keystats の署名鍵がディスクに書き出されていた。どちらもそこでは使えない資格情報。

common / darwin / homelab の3ファイルに分け、.sops.yaml でファイルごとに受信者を
変えた。darwin.yaml は mac のホスト鍵まで、homelab.yaml は人間の鍵だけが開ける。
分割は「元ファイルの全リーフパスが出力のどれかにちょうど1回現れる」ことを検証して
から実施した (unified_calendar/admin_token の振り分け漏れをこれで検出)。

ホスト鍵は .sops.yaml に受信者として入れてあるが、この PR ではまだ使わない。
home-manager の sops はユーザ権限で動き、/etc/ssh/ssh_host_ed25519_key は
0600 root:wheel なので、ホスト鍵での復号はシステム側 sops でないと届かない。

radicale (username/password) は作業ツリーに未コミットで残っていたものを取り込んだ。
PR #375 の平たい radicale_password はこれに置き換わる。
@gapul
gapul force-pushed the feat/radicale-credential branch from 7cf9b5b to 52ff2cc Compare August 20, 2026 12:30
@gapul
gapul changed the base branch from main to feat/sops-per-host August 20, 2026 12:30
@gapul

gapul commented Aug 20, 2026

Copy link
Copy Markdown
Owner Author

#393 (sops のホスト単位分割) の上に rebase して、base を feat/sops-per-host に付け替えた。#393 がマージされれば base は自動で main に戻る。

解決した衝突

合わせて直したもの

手元の作業ツリーに未コミットで残っていた radicale: {username, password} が、この PR の平たい radicale_password より新しかったので、そちらに合わせた。

  • "radicale_password" = { }"radicale/username""radicale/password" の2つ
  • calcurse テンプレートの Username${user.username} をやめて sops の placeholder から取るようにした。username も秘密側に入ったので、モジュール引数の user は不要になり関数シグネチャから外した。
  • radicale の置き場所は homelab.yaml ではなく common.yaml。ワークステーションの calcurse が読むものなので、サーバ側の受信者だけのファイルに置くと後でホスト鍵に配線したときに開けなくなる。

確認

darwinConfigurations.gapulhomeConfigurations.gapul の eval が通る。placeholder は宣言済みでないと eval で落ちるので、2つの新しいキー名が実ファイルと合っていることもこれで確認できている。nix fmt 差分なし。

gapul added a commit that referenced this pull request Aug 21, 2026
これまで secrets/secrets.yaml 1本を mac / laptop / WSL の3ホストが同じ
secrets.nix 経由で読んでいたため、Linux 側のリビルドでも Xcode の Apple ID と
keystats の署名鍵がディスクに書き出されていた。どちらもそこでは使えない資格情報。

common / darwin / homelab の3ファイルに分け、.sops.yaml でファイルごとに受信者を
変えた。darwin.yaml は mac のホスト鍵まで、homelab.yaml は人間の鍵だけが開ける。
分割は「元ファイルの全リーフパスが出力のどれかにちょうど1回現れる」ことを検証して
から実施した (unified_calendar/admin_token の振り分け漏れをこれで検出)。

ホスト鍵は .sops.yaml に受信者として入れてあるが、この PR ではまだ使わない。
home-manager の sops はユーザ権限で動き、/etc/ssh/ssh_host_ed25519_key は
0600 root:wheel なので、ホスト鍵での復号はシステム側 sops でないと届かない。

radicale (username/password) は作業ツリーに未コミットで残っていたものを取り込んだ。
PR #375 の平たい radicale_password はこれに置き換わる。
Base automatically changed from feat/sops-per-host to main August 21, 2026 01:51
Radicale は6月から動いていたがコレクションが空で、パスワードも sops に無く、
実質使われていなかった。3種類のコレクションを作り、資格情報を宣言に載せて、
calcurse の同期先を Google カレンダーから移す。

サーバ側(手作業・homeserver は sops 非導入):
  /gapul/calendar  VEVENT
  /gapul/tasks     VTODO
  /gapul/contacts  addressbook
  /var/lib/homelab/radicale/config/users を bcrypt で作り直し(旧版は .bak)

calcurse の設定キーが古い書式のままで、いまの calcurse-caldav は起動即エラーに
なっていた。Hostname / Path / HTTPS に直し、既定が DryRun = Yes なので明示的に
無効化する。コメント行も設定として読まれるため、旧キー名は書かない。
@gapul
gapul force-pushed the feat/radicale-credential branch from 52ff2cc to 1e8a3e0 Compare August 21, 2026 01:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant