-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup
executable file
·785 lines (704 loc) · 31.8 KB
/
setup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
#!/bin/bash
set -ex
# 作業ディレクトリの設定
OWNER="tqer39" # あなたのGitHubのユーザー名に変更してください
WORKSPACE="$HOME/workspace"
REPO_NAME="local-workspace-provisioning"
REPO_URL="https://github.com/${OWNER}/${REPO_NAME}.git"
# OSタイプの取得
OS_TYPE="$(uname -s)"
# CI環境で実行されているか確認
if [ -n "$CI" ]; then
echo "CI環境で実行されています。"
else
echo "CI環境で実行されていません。"
CI="false"
fi
# 管理者権限の確認
if [ "$EUID" -ne 0 ]; then
SUDO='sudo'
else
SUDO=''
fi
# パッケージマネージャの判定と apt/apt-get の選択
if [[ "$OS_TYPE" == "Linux" ]]; then
if [ -f /etc/debian_version ]; then
if command -v apt &> /dev/null; then
PACKAGE_MANAGER="apt"
else
PACKAGE_MANAGER="apt-get"
fi
elif [ -f /etc/redhat-release ]; then
PACKAGE_MANAGER="yum"
else
echo "❌ サポートされていないLinuxディストリビューションです。手動で必要なパッケージをインストールしてください。"
exit 1
fi
fi
# 必要なコマンドのインストール確認とインストール関数
install_if_missing() {
local cmd="$1"
local install_cmd="$2"
echo "$cmd のインストールを確認します..."
if ! command -v "$cmd" &> /dev/null; then
echo "$cmd がインストールされていません。インストールを試みます。"
if [[ "$install_cmd" == *"brew"* ]]; then
brew install "$cmd"
else
$SUDO bash -c "$install_cmd"
fi
if ! command -v "$cmd" &> /dev/null; then
echo "❌ $cmd のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "$cmd --version: $($cmd --version)"
echo "✅ $cmd のインストールが完了しました。"
fi
else
echo "$cmd --version: $($cmd --version)"
echo "✅ $cmd は既にインストールされています。"
fi
}
# curl のインストール確認
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
install_if_missing "curl" "${SUDO} ${PACKAGE_MANAGER} update && ${SUDO} ${PACKAGE_MANAGER} install -y curl"
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
install_if_missing "curl" "$SUDO yum install -y curl"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
echo "✅ macOSでは通常curlがプリインストールされています。"
fi
# pbcopy/pbpaste のセットアップ
if [[ "$OS_TYPE" == "Linux" ]]; then
if ! command -v pbcopy &> /dev/null; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
$SUDO "$PACKAGE_MANAGER" install -y xsel
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO yum install xclip
fi
if ! command -v xsel &> /dev/null; then
echo "❌ pbcopy/pbpaste のセットアップに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ pbcopy/pbpaste のセットアップをしました"
fi
else
echo "✅ pbcopy/pbpaste は既にインストールされています。"
fi
# macOS では pbcopy/pbpaste がデフォルトで使える
fi
# クラムシェルの設定
if [[ "$OS_TYPE" == "Darwin" ]]; then
$SUDO pmset -a disablesleep 1 # スリープさせない
echo "✅ クラムシェルモードの設定が完了しました。"
fi
# brew の eval を実行しておく
if [[ "$OS_TYPE" == "Linux" ]]; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
elif [[ "$OS_TYPE" == "Darwin" ]]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
fi
# brew のインストール確認
if ! command -v brew &> /dev/null; then
echo "Homebrew がインストールされていません。インストールを試みます。"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# brew がインストールされたか確認
if ! command -v brew &> /dev/null; then
echo "❌ Homebrew のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Homebrew のインストールが完了しました。"
if [[ "$OS_TYPE" == "Linux" ]]; then
# Linuxbrew の場合、ビルドに必要なパッケージをインストール
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y build-essential
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO yum install -y gcc make
fi
fi
fi
else
echo "✅ Homebrew は既にインストールされています。"
fi
# git のインストール確認
if ! command -v git &> /dev/null; then
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
install_if_missing "git" "${SUDO} ${PACKAGE_MANAGER} update && ${SUDO} ${PACKAGE_MANAGER} install -y git"
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
install_if_missing "git" "$SUDO yum install -y git"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
if ! command -v git &> /dev/null; then
install_if_missing "git" "brew install git"
fi
fi
if ! command -v git &> /dev/null; then
echo "❌ git のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ git のインストールが完了しました。"
fi
else
echo "✅ git は既にインストールされています。"
fi
# 必要なパッケージのインストール(Linuxbrew の場合、パスを通す必要があるかもしれません)
if [[ "$OS_TYPE" == "Linux" ]]; then
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi
# workspace ディレクトリを作成
if [ ! -d "$WORKSPACE" ]; then
echo "$WORKSPACE を作成します..."
mkdir -p "$WORKSPACE"
fi
# リポジトリをクローンまたは既存のリポジトリを使用
if [ "$CI" == "true" ]; then
echo "CI環境で実行されています。既存のリポジトリを使用します。"
if [ -n "$GITHUB_WORKSPACE" ]; then
WORKSPACE="$GITHUB_WORKSPACE"
fi
else
if [ ! -d "$WORKSPACE" ]; then
echo "${REPO_NAME} を ${WORKSPACE} にクローンします..."
if ! git clone "$REPO_URL" "$WORKSPACE"; then
echo "❌ リポジトリのクローンに失敗しました。"
exit 1
fi
else
echo "dotfiles は既に存在します。ローカルのリポジトリに移動します..."
cd "$WORKSPACE/$REPO_NAME"
fi
fi
# dotfiles のシンボリックリンクを作成
echo "シンボリックリンクを作成します..."
mkdir -p "$HOME/.config/git"
# リンクしたい dotfile を個別に指定
DOTFILES=(
".config/git/ignore"
".config/karabiner/assets/complex_modifications/hyperjs.json"
".config/karabiner/karabiner.json"
".config/starship.toml"
".bash_profile"
".bashrc"
".gitconfig"
".hyper.js"
".zshrc"
)
for file in "${DOTFILES[@]}"; do
if [ "$CI" == "true" ]; then
source_file="$WORKSPACE/$file"
else
source_file="$WORKSPACE/$REPO_NAME/$file"
fi
target_file="$HOME/$file"
if [ -e "$source_file" ]; then
if ln -sf "$source_file" "$target_file"; then
echo "✅ シンボリックリンクを作成しました: $target_file"
else
echo "❌ シンボリックリンクの作成に失敗しました: $target_file"
fi
else
echo "❌ ファイルが存在しません: $source_file"
fi
done
# zsh
install_if_missing "zsh" "brew install zsh"
# デフォルトシェルを zsh に変更 (CI環境ではスキップ)
if [ "$CI" != "true" ]; then
CURRENT_SHELL=$(basename "$SHELL")
if [ "$CURRENT_SHELL" != "zsh" ]; then
ZSH_PATH=$(which zsh)
if chsh -s "$ZSH_PATH"; then
echo "✅ デフォルトのシェルを zsh ($ZSH_PATH) に変更しました。"
else
echo "❌ デフォルトのシェルの変更に失敗しました。管理者権限が必要な場合があります。"
fi
else
echo "✅ デフォルトのシェルは既に zsh です。"
fi
else
echo "CI環境ではデフォルトシェルの変更をスキップします。"
fi
# デフォルトのシェルが bash なら .bashrc を読み込み、zsh なら .zshrc を読み込むように設定
if [ "$SHELL" == "/bin/bash" ]; then
echo "✅ デフォルトのシェルが bash です。.bashrc を読み込むように設定します。"
echo "source ~/.bashrc" >> "$HOME/.bash_profile"
elif [ "$SHELL" == "/bin/zsh" ]; then
echo "✅ デフォルトのシェルが zsh です。.zshrc を読み込むように設定します。"
echo "source ~/.zshrc" >> "$HOME/.zshrc"
fi
# bat
install_if_missing "bat" "brew install bat"
# fzf
install_if_missing "fzf" "brew install fzf"
# eza
install_if_missing "eza" "brew install eza"
# fd
install_if_missing "fd" "brew install fd"
# ruff
install_if_missing "ruff" "brew install ruff"
# ripgrep
if ! command -v rp &> /dev/null; then
echo "ripgrep がインストールされていません。インストールを試みます。"
brew install ripgrep
if ! command -v rg &> /dev/null; then
echo "❌ ripgrep のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ ripgrep のインストールが完了しました。"
fi
else
echo "✅ ripgrep は既にインストールされています。"
fi
# aws cli
if ! command -v aws &> /dev/null; then
echo "AWS CLI がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
brew install awscli
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install awscli
fi
if ! command -v aws &> /dev/null; then
echo "❌ AWS CLI のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ AWS CLI のインストールが完了しました。"
fi
else
echo "✅ AWS CLI は既にインストールされています。"
fi
echo "aws --version: $(aws --version)"
# aws-vault
if ! command -v aws-vault &> /dev/null; then
echo "aws-vault がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
brew install aws-vault
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask aws-vault
else
echo "❌ サポートされていないOSです。aws-vault のインストールをスキップします。"
fi
if ! command -v aws-vault &> /dev/null; then
echo "❌ aws-vault のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ aws-vault のインストールが完了しました。"
fi
else
echo "✅ aws-vault は既にインストールされています。"
fi
# jq
install_if_missing "jq" "brew install jq"
# gh (GitHub CLI)
install_if_missing "gh" "brew install gh"
# direnv
install_if_missing "direnv" "brew install direnv"
# bash を使っているなら direnv hook bash にする。zsh を使っているなら direnv hook zsh にする。
if [ "$SHELL" == "/bin/bash" ]; then
eval "$(direnv hook bash)"
elif [ "$SHELL" == "/bin/zsh" ]; then
eval "$(direnv hook zsh)"
fi
# direnv の初期化(dotfiles で管理されている前提)
# eval "$(direnv hook zsh)" は .zshrc に含まれている前提
# starship
install_if_missing "starship" "brew install starship"
# pre-commit
install_if_missing "pre-commit" "brew install pre-commit"
# anyenv
install_if_missing "anyenv" "brew install anyenv"
if [ ! -d "$HOME/.anyenv" ]; then
git clone https://github.com/anyenv/anyenv "$HOME/.anyenv"
anyenv install --force-init
fi
anyenv install -l
export PATH="$HOME/.anyenv/bin:$PATH"
eval "$(anyenv init -)"
# シェルに anyenv のパスを追加(dotfiles で管理されている前提)
# eval "$(anyenv init -)" は .bashrc や .zshrc に含まれている前提
# **env のインストール
ENVS=("nodenv" "pyenv" "tfenv")
for env in "${ENVS[@]}"; do
if [ ! -d "$HOME/.anyenv/envs/$env" ]; then
echo "$env をインストールします..."
anyenv install "$env"
else
echo "✅ $env は既にインストールされています。"
fi
eval "$(anyenv init -)"
$env --version
done
# Visual Studio Code
echo "Visual Studio Code をインストールします..."
if ! command -v code &> /dev/null; then
echo "Visual Studio Code がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
curl https://packages.microsoft.com/keys/microsoft.asc | $SUDO gpg --dearmor -o /usr/share/keyrings/packages.microsoft.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/packages.microsoft.gpg] \
https://packages.microsoft.com/repos/code stable main" | $SUDO tee /etc/apt/sources.list.d/vscode.list
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y code
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
rpm --import https://packages.microsoft.com/keys/microsoft.asc
$SUDO sh -c 'echo -e "[code]\nname=Visual Studio Code\nbaseurl=https://packages.microsoft.com/yumrepos/vscode\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/vscode.repo'
$SUDO yum check-update
$SUDO yum install -y code
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask visual-studio-code
fi
if ! command -v code &> /dev/null; then
echo "❌ Visual Studio Code のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Visual Studio Code のインストールが完了しました。"
fi
else
echo "✅ Visual Studio Code は既にインストールされています。"
fi
# Karabiner-Elements
echo "Karabiner-Elements をインストールします..."
if [[ "$OS_TYPE" == "Darwin" ]]; then
if [ ! -d "/Applications/Karabiner-Elements.app" ]; then
echo "Karabiner-Elements がインストールされていません。インストールを試みます。"
brew install --cask karabiner-elements
fi
if [ ! -d "/Applications/Karabiner-Elements.app" ]; then
echo "❌ Karabiner-Elements のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Karabiner-Elements のインストールが完了しました。"
fi
else
echo "❌ サポートされていないOSです。Karabiner-Elements のインストールをスキップします。"
fi
# Hyper.js
echo "Hyper.js をインストールします..."
if ! command -v hyper &> /dev/null; then
echo "Hyper.js がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
# 依存パッケージのインストール
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y libnotify4
# Hyper.js のインストール
if [ -z "$DL_PATH" ]; then
DL_PATH="$HOME/Downloads"
fi
if [ "$CI" != "true" ]; then
wget -P "$DL_PATH" https://releases.hyper.is/download/deb
fi
$SUDO dpkg -i "${DL_PATH}/deb"
if [ "$CI" != "true" ]; then
rm -rf "${DL_PATH}/deb"
fi
else
$SUDO snap install hyper --classic
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask hyper
fi
if ! command -v hyper &> /dev/null; then
echo "❌ Hyper.js のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Hyper.js のインストールが完了しました。"
fi
else
echo "✅ Hyper.js は既にインストールされています。"
fi
# Rancher Desktop
echo "Rancher Desktop をインストールします..."
if ! command -v rancher-desktop &> /dev/null; then
if [[ "$OS_TYPE" == "Linux" ]]; then
echo "Rancher Desktop がインストールされていません。インストールを試みます。"
# Debian/Ubuntu 系の場合
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
curl -fsSL https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key | $SUDO gpg --dearmor -o /usr/share/keyrings/rancher-desktop-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/rancher-desktop-keyring.gpg] https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ /" | $SUDO tee /etc/apt/sources.list.d/rancher-desktop.list
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y rancher-desktop
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO curl -fsSL https://download.opensuse.org/repositories/isv:Rancher:stable/rpm.repo -o /etc/yum.repos.d/rancher-desktop.repo
$SUDO yum install -y rancher-desktop
fi
if ! command -v rancher-desktop &> /dev/null; then
echo "❌ Rancher Desktop のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Rancher Desktop のインストールが完了しました。"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask rancher
fi
else
echo "✅ Rancher Desktop は既にインストールされています。"
fi
# Google Chrome
echo "Google Chrome をインストールします..."
if ! command -v google-chrome &> /dev/null; then
echo "Google Chrome がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | $SUDO gpg --dearmor -o /usr/share/keyrings/google-linux-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/google-linux-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | $SUDO tee /etc/apt/sources.list.d/google-chrome.list
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y google-chrome-stable
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO sh -c 'echo -e "[google-chrome]\nname=Google Chrome\nbaseurl=http://dl.google.com/linux/chrome/rpm/stable/x86_64\nenabled=1\ngpgcheck=1\ngpgkey=https://dl.google.com/linux/linux_signing_key.pub" > /etc/yum.repos.d/google-chrome.repo'
$SUDO yum check-update
$SUDO yum install -y google-chrome-stable
fi
if ! command -v google-chrome &> /dev/null; then
echo "❌ Google Chrome のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Google Chrome のインストールが完了しました。"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask google-chrome
if [ ! -d "/Applications/Google Chrome.app" ]; then
echo "❌ Google Chrome のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Google Chrome のインストールが完了しました。"
fi
else
echo "❌ サポートされていないOSです。Google Chrome のインストールをスキップします。"
fi
else
echo "✅ Google Chrome は既にインストールされています。"
fi
# Brave
echo "Brave ブラウザをインストールします..."
if ! command -v brave-browser &> /dev/null; then
echo "Brave ブラウザがインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
# Brave の GPG キーを追加
$SUDO curl -fsSLo /usr/share/keyrings/brave-browser-archive-keyring.gpg \
https://brave-browser-apt-release.s3.brave.com/brave-browser-archive-keyring.gpg
# Brave のリポジトリを追加
echo "deb [signed-by=/usr/share/keyrings/brave-browser-archive-keyring.gpg] \
https://brave-browser-apt-release.s3.brave.com/ stable main" | $SUDO tee /etc/apt/sources.list.d/brave-browser-release.list
# パッケージリストを更新
$SUDO "$PACKAGE_MANAGER" update
# Brave ブラウザをインストール
$SUDO "$PACKAGE_MANAGER" install -y brave-browser
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO dnf install dnf-plugins-core
$SUDO dnf config-manager --add-repo https://brave-browser-rpm-release.s3.brave.com/x86_64/
$SUDO rpm --import https://brave-browser-rpm-release.s3.brave.com/brave-core.asc
$SUDO dnf install -y brave-browser
else
echo "❌ Brave のインストール方法が不明です。手動でインストールしてください。"
fi
if ! command -v brave-browser &> /dev/null; then
echo "❌ Brave ブラウザのインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Brave ブラウザのインストールが完了しました。"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask brave-browser
if [ ! -d "/Applications/Brave Browser.app" ] &> /dev/null; then
echo "❌ Brave ブラウザのインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Brave ブラウザのインストールが完了しました。"
fi
else
echo "❌ サポートされていないOSです。Brave のインストールをスキップします。"
fi
fi
echo "brave-browser version: $(brave-browser --version)"
# 1Password
echo "1Password をインストールします..."
if ! command -v 1password &> /dev/null; then
echo "1Password がインストールされていません。インストールを試みます。"
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
curl -sS https://downloads.1password.com/linux/keys/1password.asc | $SUDO apt-key add -
echo 'deb [arch=amd64] https://downloads.1password.com/linux/debian/amd64 stable main' | $SUDO tee /etc/apt/sources.list.d/1password.list
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y 1password
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
curl -sS https://downloads.1password.com/linux/keys/1password.asc | $SUDO rpm --import -
$SUDO sh -c 'echo -e "[1password]\nname=1Password\nbaseurl=https://downloads.1password.com/linux/rpm\nenabled=1\ngpgcheck=1\ngpgkey=https://downloads.1password.com/linux/keys/1password.asc" > /etc/yum.repos.d/1password.repo'
$SUDO yum check-update
$SUDO yum install -y 1password
fi
if ! command -v 1password &> /dev/null; then
echo "❌ 1Password のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ 1Password のインストールが完了しました。"
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
brew install --cask 1password
else
echo "❌ サポートされていないOSです。1Password のインストールをスキップします。"
fi
else
echo "✅ 1Password は既にインストールされています。"
fi
echo "1password version: $(1password --version)"
# Amazon Q
echo "Amazon Q をインストールします..."
if [[ "$OS_TYPE" == "Darwin" ]]; then
if [ ! -d "/Applications/Amazon Q.app" ] &> /dev/null; then
echo "Amazon Q がインストールされていません。インストールを試みます。"
brew install --cask amazon-q
if [ ! -d "/Applications/Amazon Q.app" ] &> /dev/null; then
echo "❌ Amazon Q のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Amazon Q のインストールが完了しました。"
fi
else
echo "✅ Amazon Q は既にインストールされています。"
fi
fi
# Alfred
echo "Alfred をインストールします..."
if [[ "$OS_TYPE" == "Darwin" ]]; then
if [ ! -d "/Applications/Alfred 5.app" ]; then
echo "Alfred がインストールされていません。インストールを試みます。"
brew install --cask alfred
fi
if [ ! -d "/Applications/Alfred 5.app" ]; then
echo "❌ Alfred のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ Alfred のインストールが完了しました。"
fi
fi
# HackGenNerd Font
echo "HackGenNerd Font をインストールします..."
if [[ "$OS_TYPE" == "Linux" ]]; then
if fc-list | grep -i "HackGen"; then
echo "✅ HackGenNerd Font は既にインストールされています。"
else
echo "HackGenNerd Font がインストールされていません。インストールを試みます。"
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
# バージョン指定
if [ -z "$HACKGEN_VERSION" ]; then
HACKGEN_VERSION="2.9.0"
fi
if [ -z "$DL_PATH" ]; then
DL_PATH="$HOME/Downloads"
fi
# CI のときは事前にダウンロードしてキャッシュしてるのでスキップ
if [ "$CI" == "true" ]; then
echo "CI環境で実行されているため、ダウンロードをスキップします。"
else
# HackGen_NF
wget -P "$DL_PATH" "https://github.com/yuru7/HackGen/releases/download/v${HACKGEN_VERSION}/HackGen_NF_v${HACKGEN_VERSION}.zip"
# HackGen
wget -P "$DL_PATH" "https://github.com/yuru7/HackGen/releases/download/v${HACKGEN_VERSION}/HackGen_v${HACKGEN_VERSION}.zip"
fi
unzip -o "${DL_PATH}/HackGen_NF_v${HACKGEN_VERSION}.zip" -d "$DL_PATH"
unzip -o "${DL_PATH}/HackGen_v${HACKGEN_VERSION}.zip" -d "$DL_PATH"
# ユーザーにインストール
mkdir -p "$HOME/.local/share/fonts"
cp -r "${DL_PATH}/HackGen_NF_v${HACKGEN_VERSION}/"* "$HOME/.local/share/fonts/"
cp -r "${DL_PATH}/HackGen_v${HACKGEN_VERSION}/"* "$HOME/.local/share/fonts/"
if [ "$CI" != "true" ]; then
# インストーラとディレクトリを削除
rm -rf "${DL_PATH}/HackGen_NF_v${HACKGEN_VERSION}"
rm -rf "${DL_PATH}/HackGen_NF_v${HACKGEN_VERSION}.zip"
rm -rf "${DL_PATH}/HackGen_v${HACKGEN_VERSION}"
rm -rf "${DL_PATH}/HackGen_v${HACKGEN_VERSION}.zip"
fi
# フォントのキャッシュを更新
fc-cache -vf
# フォントのインストール確認
if fc-list | grep -i "HackGen"; then
echo "✅ HackGenNerd Font が正常にインストールされました。"
else
echo "❌ HackGenNerd Font のインストールに失敗しました。"
exit 1
fi
elif [[ "$PACKAGE_MANAGER" == "yum" ]]; then
$SUDO yum install -y
fi
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
if brew list --cask | grep -i "font-hackgen-nerd"; then
echo "✅ HackGenNerd Font は既にインストールされています。"
else
echo "HackGenNerd Font がインストールされていません。インストールを試みます。"
if brew install --cask font-hackgen-nerd; then
echo "✅ HackGenNerd Font が正常にインストールされました。"
else
echo "❌ HackGenNerd Font のインストールに失敗しました。"
exit 1
fi
fi
fi
echo "HackGenNerd Font のインストールが完了しました。"
# deskpad のインストール ※macOS のみ
echo "deskpad をインストールします..."
if [[ "$OS_TYPE" == "Darwin" ]]; then
if ! command -v deskpad &> /dev/null; then
brew install deskpad
# アプリの存在有無でインストールされたかどうかをチェック
if [ ! -d "/Applications/DeskPad.app" ]; then
echo "❌ deskpad のインストールに失敗しました。手動でインストールしてください。"
exit 1
else
echo "✅ deskpad のインストールが完了しました。"
fi
else
echo "✅ deskpad は既にインストールされています。"
fi
fi
# ローカル専用の utility のインストール
if [ "$CI" != "true" ]; then
echo "ローカル専用の utility をインストールします..."
if [[ "$OS_TYPE" == "Linux" ]]; then
if [[ "$PACKAGE_MANAGER" == "apt" || "$PACKAGE_MANAGER" == "apt-get" ]]; then
# pyenv install 3.12.1 で必要なパッケージ
echo "pyenv install 3.12.1 で必要なパッケージをインストールします..."
$SUDO "$PACKAGE_MANAGER" update
$SUDO "$PACKAGE_MANAGER" install -y libcrypt-dev
brew install tcl-tk
# uv
echo "uv をインストールします..."
if ! command -v uv &> /dev/null; then
curl -LsSf https://astral.sh/uv/install.sh | sh
fi
# pyenv
echo "pyenv install -s を実行します..."
# 一度 unlink しないとエラーになる see https://mainmokeybusiness.com/post/pyenv_install_error/
brew unlink pkg-config
pyenv install -s
brew link pkg-config
fi
elif [[ "$OS_TYPE" == "Darwin" ]]; then
# pyenv install 3.12.1 で必要なパッケージ
echo "pyenv install 3.12.1 で必要なパッケージをインストールします..."
brew install tcl-tk
# uv
echo "uv をインストールします..."
if ! command -v uv &> /dev/null; then
curl -LsSf https://astral.sh/uv/install.sh | sh
fi
# pyenv
echo "pyenv install -s を実行します..."
pyenv install -s
fi
fi
echo "セットアップが完了しました!"
if [ "$CI" == "true" ]; then
echo "CI環境で実行されているため、再起動は必要ありません。"
exit 0
else
# 再起動の提案
echo "変更を反映するために、ログアウトして再度ログインするか、システムを再起動することをおすすめします。"
fi
# 処理完了
exit 0