dotfilesを作ってみたメモ

リポジトリはこちら

https://github.com/powaaaaa/dotfiles

# なぜ作ったのか

私は、よくわからないけど便利そうなツールを見つけるとすぐ使ってみたくなることが結構あります。
最新の、とか次世代の、とか見るとワクワクしてきますよね...Rust製！とか...

それでどんどんインストールしてると、当然自分が今なんのツールをインストールしたのかわからなくなることが多くなりました。
ホームディレクトリにも設定ファイルやディレクトリが散乱して気になる...

そんな時にdotfilesのことを知り、**散らばっている設定をまとめて管理したい**、**自分かなんのツールを使ってるか一目でみたい**、という気持ちで自分のdotfilesを作り始めました。

# 得られたこと

実際dotfilesを作成しながら現環境の設定をじっくり見直せました。特に`.zshrc`

見様見真似でスクリプトを書いてみたりして、今までなんとなく避けていたシンボリックやらMakefileやらを触る良い機会にもなりました。(改良の余地はありまくり)

それと他の人のdotfilesも眺めて、作業効率を上げる工夫をみんな各々してるんだな〜と知ることができました(小並感)

# ディレクトリ構成

([これ](https://github.com/powaaaaa/dotfiles?tab=readme-ov-file#%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E6%A7%8B%E6%88%90)から引用)

```shell
.
├── Makefile
├── README.md
├── .gitignore
├── home/
└── scripts/
```

- `Makefile`
    - `scripts/`配下のスクリプトを make コマンドで実行する
- `home/`
    - `$HOME`配下と同じ構造になるように, dotfiles たちはこの中に配置
- `scripts/`
    - 設定を簡単にする script を配置

## スクリプト

スクリプトは色々検索して次の3つを作りました。

- [`install-zsh.sh`](https://github.com/powaaaaa/dotfiles/blob/main/scripts/install-zsh.sh)
    - shellが`zsh`ではない場合、`zsh`をインストールする
- [`link.sh`](https://github.com/powaaaaa/dotfiles/blob/main/scripts/link.sh)
    - シンボリックを貼る
- [`setup.sh`](https://github.com/powaaaaa/dotfiles/blob/main/scripts/setup.sh)
    - brewをインストールし、`home/Brewfile`に記載のあるパッケージをインストールする

今使っているpcがMacなのでそれ基準で作成しましたが、他環境でのセットアップは今のところカバーできてないです。
WSL(Ubuntu)を使ってた頃はbashにaptで困らなかったので、元からある環境を使うか全てzshにするかはまた必要になった時に考えたいですね。

`install-zsh.sh`もスクリプト動くのおもろ！の勢いで作ってみたけど、今のところ使う予定はないです。

## ホームディレクトリ

`home`という場所を作った理由は、2つほどあります。

- セットアップ等のスクリプトと設定ファイル・ディレクトリを同じ場所に置きたくなかったから
- ローカルのホームディレクトリと同じ構造で設定ファイル・ディレクトリを配置したいから

(手元の環境では、)ホームディレクトリにあるもの(zshや`.latexmkrc`やら)と`.config/`配下にあるものの2種類ありますよね。
dotfiles内も同じような構成を取りたいと思い、下のようになりました。

```shell
.
├── .config/
│   ├── sheldon
│   │   └── plugins.toml
│   ├── starship.toml
|   ...
|
├── .hammerspoon/
├── .latexmkrc
├── .skhdrc
├── .yabairc
├── Brewfile
├── git/
│   └── .gitconfig.sample
└── zsh/
    ├── .zshrc
    ├── alias.zsh
    ├── color.zsh
    └── sync
        ├── config.zsh
        └── path.zsh
```

これ作ってる時に一番手間取った(一番楽しかったともいう)のが`zsh`でした。
`.zshrc`には何かをロードする文だけ書いて、他のファイルに切り出す...ってやつ、かっこよくてやったみたい！と思ってからが長かったです(うまくロードできないことが何回か)

今使っているterminalがWarpなのであんまりプラグインを設定することなかったんですが、別のterminalにしてみよう！となった時にまた育てたいです。

### zshあたりの設定について

ファイル覗くとわかるんですが、zshの設定やpath、シンボリック等を`zsh/`ディレクトリで設定し、zshのpluginを`sheldon`で設定しています。
また`.zshrc`は`sheldon`のみをロードしており、`zsh/sync`や`zsh/`以下のファイルは`sheldon`からロードするようにしています(これも色々参考にした)

普段特に意識してないですが、terminalの起動を早くするために非同期で読み込む方を多く見かけたので、先人に倣ってやってみた！って感じです。

### gitの設定について

gitは`.gitconfig`のuser欄を空欄にした`.gitconfig.sample`というファイルのみgithubに載せるようにしました。
個人情報なんでね

# 今後の展望

今回dotfilesに作成したのは、ホームディレクトリの中でも自分で設定ファイルを作成・編集したことのあるもののみです。なので移動できるものがまだあれば移動したいです。
(扱ったことのあるものの方が、もしうまくいかなくてもやり直しやすいと思ったためです。)

それ以外だとぱっと見残っているのが、バージョン管理ツールなのでこれもdotfilesに移動させたいです。

また自動で生成されたファイルや、下手に触らない方が良さそうなファイルがわからないので1つずつ地道に調べていこうかなと考えています。
あと`.zprofile`のこともわからないなあ...

---

以上です。
ここまでご覧いただきありがとうございました。

# 参考にした記事

https://zenn.dev/smartcamp/articles/f20a72910bde40

https://zenn.dev/sprout2000/articles/bd1fac2f3f83bc

https://zenn.dev/tsukuboshi/articles/6e82aef942d9af

https://dev.classmethod.jp/articles/dotfiles-reconstruct-termina-env/

https://trap.jp/post/1737/