Skip to content

[Phase 4] プライベート dotfiles のサポート #32

@yellow-seed

Description

@yellow-seed

Parent Issue: #28
Depends on: Phase 3 issue

目的

秘密情報を含むプライベートな設定を別リポジトリで管理できるようにする。

実装内容

1. プライベートリポジトリ用の環境変数

  • PRIVATE_DOTFILES_REPO_URL の定義
    declare -r PRIVATE_DOTFILES_REPO_URL="${PRIVATE_DOTFILES_REPO_URL:-}"
  • PRIVATE_DOTFILES_PATH の定義
    declare -r PRIVATE_DOTFILES_PATH="${HOME}/.local/share/chezmoi-private"
  • PRIVATE_DOTFILES_CONFIG_PATH の定義
    declare -r PRIVATE_DOTFILES_CONFIG_PATH="${HOME}/.config/chezmoi-private/chezmoi.yaml"

2. プライベート dotfiles の初期化

  • setup_private_dotfiles() 関数の作成
    function setup_private_dotfiles() {
        if [ -z "${PRIVATE_DOTFILES_REPO_URL}" ]; then
            echo "Skipping private dotfiles (PRIVATE_DOTFILES_REPO_URL not set)"
            return
        fi
        
        local chezmoi_cmd="${HOME}/.local/bin/chezmoi"
        local no_tty_option=""
        
        if is_ci_or_not_tty; then
            no_tty_option="--no-tty"
        fi
        
        "${chezmoi_cmd}" init \
            --apply \
            --ssh \
            --source "${PRIVATE_DOTFILES_PATH}" \
            --config "${PRIVATE_DOTFILES_CONFIG_PATH}" \
            ${no_tty_option} \
            "${PRIVATE_DOTFILES_REPO_URL}"
    }

3. SSH 設定

  • SSH 鍵の存在確認(オプション)
  • SSH 経由でのクローン(--ssh オプション)
  • GitHub への SSH 接続テスト(オプション)

4. エラーハンドリング

  • プライベートリポジトリが存在しない場合の処理
  • SSH 鍵がない場合の警告
  • ネットワークエラー時の処理

5. メイン処理への統合

  • initialize_dotfiles() にプライベート dotfiles のセットアップを追加
    function initialize_dotfiles() {
        initialize_os_env
        run_chezmoi
        setup_private_dotfiles  # 追加
    }

使用方法

# プライベートリポジトリを使用する場合
export PRIVATE_DOTFILES_REPO_URL="[email protected]:yellow-seed/dotfiles-private.git"
./setup.sh

# 使用しない場合(デフォルト)
./setup.sh

プライベートリポジトリの構造例

dotfiles-private/
├── .chezmoi.yaml.tmpl
├── private_dot_ssh/
│   └── encrypted_config
└── private_dot_config/
    └── gh/
        └── encrypted_hosts.yml

テスト

  • プライベートリポジトリなしでの動作確認
  • プライベートリポジトリありでの動作確認
  • SSH 鍵がない状態でのエラーハンドリング
  • CI環境でのスキップ確認

ドキュメント更新

  • README.md にプライベート dotfiles の使用方法を追加
  • 環境変数の説明を追加

完了条件

  • すべてのチェックボックスが完了
  • プライベートリポジトリの初期化が動作
  • エラーハンドリングが適切
  • ドキュメントが更新されている
  • テストが通過
  • PRがマージされている

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions