-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
概要
現在の setup.sh は chezmoi の初期化のみを行う最小限のスクリプトですが、参考リポジトリ(https://github.com/shunk031/dotfiles/blob/master/setup.sh)のように、このスクリプト一発でセットアップが完了する包括的なスクリプトに改善したい。
現在の状態
既存の構造
setup.sh: chezmoi のインストールと初期化のみinstall/macos/common/: macOS用のインストールスクリプトbrew.sh: Homebrew のインストールbrewfile.sh: Brewfile からのパッケージインストールBrewfile: インストールするパッケージ定義
install/ubuntu/common/: Ubuntu用のインストールスクリプト(未実装)install/template.sh: 新しいインストールスクリプトのテンプレート
現在の動作
setup.sh実行 → chezmoi で dotfiles 適用- 個別インストールスクリプト(
install/macos/common/*.sh)は手動実行が必要
参考リポジトリとの主な違い
1. 見た目と UX の改善
- ロゴ/バナーの表示
- カラフルな出力(色付きメッセージ)
- プログレス表示
2. 環境検出とOS別処理
-
get_os_type()関数の実装(Darwin/Linux の判別) - macOS 固有の初期化処理(
initialize_os_macos())- 既存の
install/macos/common/brew.shを呼び出し - Apple Silicon/Intel の判別と適切な PATH 設定(
brew shellenvの評価)
- 既存の
- Linux 固有の初期化処理(
initialize_os_linux())install/ubuntu/common/配下のスクリプトを呼び出し
- システム情報の取得(
get_system_from_chezmoi())
3. インストールスクリプトの統合
-
setup.shからinstall/配下のスクリプトを自動実行- macOS:
install/macos/common/brew.sh→install/macos/common/brewfile.sh - Ubuntu:
install/ubuntu/common/配下のスクリプト
- macOS:
- OS検出に基づく適切なスクリプトの選択
- スクリプト実行順序の制御
4. sudo 権限管理
-
keepalive_sudo()機能の実装- macOS: Keychain を使用したパスワード管理
- Linux: 定期的な sudo タイムスタンプ更新
- CI/非TTY環境の検出と適切な処理
is_ci()関数is_tty()/is_not_tty()関数is_ci_or_not_tty()関数
5. デバッグモード
-
DOTFILES_DEBUG環境変数のサポート(install/配下では既に実装済み) -
setup.shでのデバッグモード実装 - デバッグ時の詳細出力(
set -x)
6. chezmoi の詳細な制御
- chezmoi バイナリの明示的なダウンロードと配置(
$HOME/.local/bin) -
--branchオプションのサポート -
--use-builtin-gitオプションの使用 -
--forceオプションの使用 - CI/非TTY環境での
--no-ttyオプションの使用 - 暗号化ファイル(
encrypted_*)の CI 環境での自動除外
7. プライベート dotfiles のサポート
- プライベートリポジトリの初期化
PRIVATE_DOTFILES_REPO_URLの設定PRIVATE_DOTFILES_PATHの設定PRIVATE_DOTFILES_CONFIG_PATHの設定
- SSH 経由でのプライベートリポジトリのクローン
- 別設定ファイルでの管理
8. エラーハンドリングと後処理
-
at_exit()関数によるクリーンアップ処理 - トラップハンドラの設定
- 一時ファイルの自動削除
9. シェルの再起動
-
restart_shell_system()関数の実装 - セットアップ完了後のシェル再起動(ログインシェルとして)
10. パスの管理
-
$HOME/.local/binへの PATH 追加 - バイナリのインストール先の明示的な管理
11. 関数の構造化
- 明確な責任分離
initialize_os_env(): OS環境の初期化 + 既存インストールスクリプトの呼び出しrun_chezmoi(): chezmoi の実行initialize_dotfiles(): dotfiles の初期化全体main(): メイン処理のオーケストレーション
提案する実装順序
Phase 1: 基本構造の改善
- OS 検出機能
- デバッグモード(
setup.shへの追加) - 関数の構造化
- 既存の
install/スクリプトとの連携基盤
Phase 2: 環境別処理と既存スクリプトの統合
- macOS:
install/macos/common/brew.shの呼び出しinstall/macos/common/brewfile.shの呼び出し- アーキテクチャ判別と PATH 設定
- Linux:
install/ubuntu/common/配下のスクリプト実装- パッケージマネージャー対応
- sudo 権限管理
Phase 3: chezmoi の詳細制御
- ブランチ指定
- CI/非TTY対応
- 暗号化ファイル処理
Phase 4: プライベート dotfiles
- SSH設定
- 別リポジトリの初期化
Phase 5: UX改善
- ロゴ/バナー
- カラー出力
- プログレス表示
設計方針
スクリプトの責任分離
-
setup.sh: オーケストレーション層- OS検出
- 環境変数設定
- 実行順序の制御
- エラーハンドリング
- chezmoi の実行
-
install/配下: 個別ツールのインストール層(既存構造を維持)- OS/ツール固有のインストールロジック
- 既に
DOTFILES_DEBUG対応済み - 独立して実行可能(テストしやすい)
実行フロー(改善後)
setup.sh 実行
↓
OS検出(Darwin/Linux)
↓
sudo権限管理の開始
↓
OS別の初期化
├─ macOS: install/macos/common/brew.sh
│ install/macos/common/brewfile.sh
└─ Linux: install/ubuntu/common/*.sh
↓
chezmoi のセットアップ
├─ バイナリのダウンロード
├─ リポジトリの初期化
└─ dotfiles の適用
↓
プライベート dotfiles(オプション)
↓
シェルの再起動
期待される効果
- ✅ ワンコマンドでの完全なセットアップ(
curl ... | bashで完結) - ✅ macOS/Linux 両対応
- ✅ 既存の
install/構造を活用(保守性向上) - ✅ CI/CD パイプラインでの自動テスト対応
- ✅ プライベート設定の分離管理
- ✅ より良いユーザー体験
- ✅ デバッグしやすい構造
参考
Metadata
Metadata
Assignees
Labels
No labels