Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

posted at

updated at

dotfilesをGitHubで管理するようにしたついでに晒す

この記事はdotfiles Advent Calendar 2020の8日目です。

はじめに

最近開発マシンをMacからWindowsに変えて、そのタイミングでdotfilesをGitHubで管理するようにしたので、自分用の整理も兼ねてdotfilesを晒します。

私の環境

  • Windows + WSL 2 Ubuntu + Windows Terminal
  • 時々Mac
  • Bash

リポジトリ構成

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からインクルードしています。

.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_profilePATH環境変数に追加しています。

~/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をリセットして開発環境を再現できるようになったので、とても助かっています。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?