この記事はdotfiles Advent Calendar 2020の8日目です。
はじめに
最近開発マシンをMacからWindowsに変えて、そのタイミングでdotfilesをGitHubで管理するようにしたので、自分用の整理も兼ねてdotfilesを晒します。
私の環境
- Windows + WSL 2 Ubuntu + Windows Terminal
- 時々Mac
- Bash
リポジトリ構成
-
https://github.com/ngmy/dotfiles
- dotfilesを管理するリポジトリ
-
https://github.com/ngmy/homedir
- ホームディレクトリを管理するリポジトリ
-
https://github.com/ngmy/wt-settings
- Windows Terminalの設定を管理するリポジトリ
-
https://github.com/ngmy/devenv
- 上記のリポジトリを取りまとめるリポジトリ
dotfiles以外にもホームディレクトリとWindows Terminalの設定をGitHubで管理しており、それらをdotfilesという名前のリポジトリに含めるのもどうかと思ったので、それぞれ別のリポジトリにしています。
各リポジトリにインストールスクリプトを用意して個別にインストールできるようにしていますが、基本的には最後のdevenvリポジトリのインストールスクリプトを実行すれば全部まとめてインストールされて開発環境ができあがるようにしています。
bash <(curl -LSs https://raw.githubusercontent.com/ngmy/devenv/master/install.sh)
https://github.com/ngmy/dotfiles
dotfilesを管理するリポジトリです。
リポジトリのディレクトリ構成は下記のようになっています。
.Brewfile
.bash_aliases
.bash_profile
.bashrc
.bashrc_ubuntu
.git/
.git_template/
.gitconfig
.gitconfig_linux
.gitconfig_mac
.gitignore
.vim/
.vimrc
LICENSE
README.md
install.sh*
私はBashしか使わないのでBashだけを考慮しています。
今のところUbuntuとMacで使うことを想定しています。
インストールスクリプトを実行するとホームディレクトリからdotfilesへのシンボリックリンクが張られます。
$ ll ~/ | grep '^l' | grep '/home/nagamiya/share/dotfiles/' | awk '{print $9,$10,$11}'
.Brewfile -> =/share/dotfiles/.Brewfile
.bash_aliases -> /home/nagamiya/share/dotfiles/.bash_aliases
.bash_profile -> /home/nagamiya/share/dotfiles/.bash_profile
.bashrc -> /home/nagamiya/share/dotfiles/.bashrc
.bashrc_os -> /home/nagamiya/share/dotfiles/.bashrc_ubuntu
.git_template -> /home/nagamiya/share/dotfiles/.git_template/
.gitconfig -> /home/nagamiya/share/dotfiles/.gitconfig
.gitconfig_os -> /home/nagamiya/share/dotfiles/.gitconfig_linux
.gitignore -> /home/nagamiya/share/dotfiles/.gitignore
.vim -> /home/nagamiya/share/dotfiles/.vim/
.vimrc -> /home/nagamiya/share/dotfiles/.vimrc
.Brewfile
Homebrewのバンドルファイルです。
brew bundle --global
するとバンドルファイルに書かれたパッケージがインストールされます。
UbuntuでもMacでも使えるように、パッケージはなるべくHomebrewでインストールするようにしています。
新しいパッケージを追加したらbrew bundle dump --global --force
して、生成された.Brewfile
をコミットしています。
.bash_aliases
Bashのエイリアスを書く場所です。
.bash_profile
Bashの設定ファイルです。
.bashrc
Bashの設定ファイルです。
.bashrc_os
を読み込んでいます。
.bashrc_ubuntu
Ubuntuのデフォルトの.bashrc
です。
~/.bashrc_os
からシンボリックリンクを張っています。
.git_template
Gitのテンプレートです。
.gitconfig
Gitの設定ファイルです。
このファイルにはUbuntuとMacで共通の設定を書いています。
Ubuntu個別の設定は.gitconfig_linux
に、Mac個別の設定は.gitconfig_mac
に書き、どちらかに ~/.gitconfig_os
からシンボリックリンクを張り、それを.gitconfig
からインクルードしています。
...
[include]
path = ~/.gitconfig_os
個別の設定が必要になる理由は、Homebrewでインストールされるパッケージの格納先ディレクトリがUbuntuの場合は~/.linuxbrew
、Macの場合は~/.homebrew
とそれぞれ異なるためです。
格納先ディレクトリが異なるため.gitconfig
内でパッケージのパスを参照する際に別々のパスを指定する必要があり、.gitconfig
には条件分岐を書くことができないため、Ubuntu用とMac用の2つのファイルを用意してシンボリックリンクと組み合わせる方法で対処しています。
.gitconfig_linux
Ubuntu用のGitの設定ファイルです。
~/.gitconfig_os
からシンボリックリンクを張っています。
.gitconfig_mac
Mac用のGitの設定ファイルです。
~/.gitconfig_os
からシンボリックリンクを張っています。
.gitignore
Gitの除外設定です。
.vim
Vimの設定ディレクトリです。
プラグインの実体はコミットせずvim-plugを使ってインストールするようにしています。
.vimrc
Vimの設定ファイルです。
前述のvim-plugはリポジトリに含めていないので、Vimの起動時にvim-plugをダウンロードしてパッケージをインストールするようにしています。
https://github.com/ngmy/homedir
ホームディレクトリを管理するリポジトリです。
リポジトリのディレクトリ構成は下記のようになっています。
LICENSE
README.md
bin/
install.sh*
localrepos/
share/
tmp/
usr/
var/
インストールスクリプトを実行すると下記の構成でホームディレクトリが作られます。
$ tree -d ~/
/home/nagamiya/
|-- bin
|-- docs -> /mnt/c/Users/ynaga/OneDrive/ドキュメント
|-- localrepos
| `-- github.com
| `-- ngmy
|-- share
|-- tmp
|-- usr
| `-- local
| `-- src
`-- var
|-- archive
|-- backups
|-- desktop -> /mnt/c/Users/ynaga/OneDrive/デスクトップ
|-- downloads -> /mnt/c/Users/ynaga/Downloads
`-- tmp
この構成は下記の記事を参考にさせてもらっています。
~/bin
自作のスクリプトを置く場所です。
.bash_profile
でPATH
環境変数に追加しています。
~/docs
マイドキュメントへのシンボリックリンクです。
Macの場合はDocumentsへのシンボリックリンクになります。
~/localrepos
Gitのリポジトリを置く場所です。
~/localrepos
の下にホスト名ごとにディレクトリを作成しています。
ホスト名のディレクトリの下にはアカウント名ごとにディレクトリを作成しています。
例えば私個人のGitHubリポジトリであれば~/localrepos/github.com/ngmy
となります。
~/share
共有データを置く場所です。
前述のdotfilesリポジトリは~/share/dotfiles
にクローンしています。
~/tmp
物置です。
~/usr
パッケージマネージャーでインストールできないソフトウェアをコンパイル・インストールする場所です。
~/usr/local/src
でコンパイルして~/usr/local/*
(~/usr/local/httpd
等)に置いています。
~/var
変化の多いファイルを置く場所です。
~/var/tmp
(滅多に掃除しないもう一つの物置)、~/var/archive
(よく使うソフトウェアのアーカイブを置く場所)、~/var/backups
(バックアップを置く場所)を作っています。
ブラウザのダウンロードディレクトリやデスクトップへのシンボリックリンクもあります。
https://github.com/ngmy/wt-setting
Windows Terminalの設定を管理するリポジトリです。
リポジトリのディレクトリ構成は下記のようになっています。
.git/
.gitmodules
AppData/
LICENSE
README.md
install.sh*
インストールスクリプトを実行すると設定ファイルとフォントがコピーされます。
設定ファイルはAppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/LocalState/settings.json
に置いています。
私はVimを使うので、Vimの矩形選択とキーマップが被らないようにWindows Terminalのペーストをctrl+v
からctrl+shift+v
に変更しています。
またカラースキームを下記のGistを参考にして、Macで慣れ親しんだIceberg風に変更しています。
Iceberg color scheme for Windows Terminal
フォントは安定のRictyDiminishedを使っています。
AppData/Local/Microsoft/Windows/Fonts/RictyDiminishedRictyDiminished
にサブモジュールとして追加しています。
https://github.com/ngmy/devenv
上記のリポジトリを取りまとめるリポジトリです。
リポジトリのディレクトリ構成は下記のようになっています。
.git/
LICENSE
README.md
install.sh*
インストールスクリプトを実行するとdotfiles・homedir・wt-settingsリポジトリが全部まとめてインストールされます。
おわりに
私のdotfilesを晒してみました。
dotfilesをGitHubで管理するようにしてインストールスクリプトを用意したことで、開発環境を簡単に構築・再現できるようになりました。
私の場合、WSL 2がまだ不安定なせいで特にDockerまわりが壊れてWSL 2をリセットしたくなることがままあり、そうなった時に気軽にWSL 2をリセットして開発環境を再現できるようになったので、とても助かっています。