dotfilesの設定をする
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
このへんの記事を参考にして自分のdotfiles(.zshrc
,.zprofile
とか)をgitで管理できるようにする
社会人になってPCの環境構築する機会も増えたため、自分の私用PCのdotfilesをpublicで公開して社用PCでもいい感じに展開できるといいなって思った。
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
chezmoi
ってやつもかなり良さそうだと思った。
ただし
- 環境ごとの差分を書く
- ssh秘密鍵などの管理
などが今の所必要ないとおもうので一旦シンプルな構成でいこうと思う
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
まずはGitHub上でリポジトリを作ってクローン
gh repo clone chouxcreams/dotfiles # 自分のリポジトリを指定すること
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
一旦ファイルをdotfiles以下に移動してみる(まだcommitやpushはしない!)
mv ~/.zshrc ~/.zprofile ~/.zshenv ~/dotfiles
このままだと.zshrc
などが読み込まれないので環境変数ZDOTDIR
を.zshenv
で設定する
echo 'export ZDOTDIR="$HOME/dotfiles"' >> ~/dotfiles/.zshenv
ホームディレクトリに.zshenv
がないと設定したZDOTDIR
すら読み込めないのでシンボリックリンクを貼る
ln -s ~/dotfiles/.zshenv
再起動して読み込めてそうなことを確認する
exec $SHELL -l
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
gitのログに残す前にヤバそうな環境変数がないかざっと確認する
何らかのパスワードとか書いてたら良くないので
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
ZDOTDIR
を設定したことで、.zsh_history
も~/dotfiles
以下に移動したの忘れてた
mv ~/.zsh_history ~/dotfiles
あとホームディレクトリにzshのコマンド履歴を保持する.zhistory
と.zsh_history
の2種類があった。この記事によるとCatalina以降では.zsh_history
に保管されるらしいので.zhistory
を削除
コマンド履歴をgitに残す必要ないので.gitignoreを作成
touch ~/dotfiles/.gitignore
この記事みたいにホワイトリスト形式の.gitignore
を作る
### all ignore ###
/*
/.**
### not ignore ###
!/README.md
!/LICENSE
!/.zshenv
!/.zprofile
!/.zshrc
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
ついでなので.zshrc
,.zprofile
,.zshenv
の違いを確認してそれぞれの記述を整理する(.zprofile
のこの記述、.zshrc
に書いたほうがいいやん!的な)。以下の記事が参考になった。
.zprofile
の中身がなくなった
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
.zshrc
の中身をzinitの設定、zinitのプラグイン、path、環境変数の設定、エイリアスの設定、ぐらいの粒度ででブロック分けする。
ついでにpathの書き方もexport PATH=/path/to/hoge:$PATH
から以下の記事のような書き方に変更
これでいい感じになったのでcommitしてpush
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
初期化スクリプトを書く。とりあえず.zshenv
のシンボリックリンク貼るだけ。
#! /bin/sh
DOTPATH="$HOME/dotfiles"
ln -s $DOTPATH/.zshenv $HOME/.zshenv
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
https://hodalog.com/docker-and-git-commands-auto-completion-in-mac-os-catalina/ を参考にgit/dockerのコマンドをtabで補完できるように設定する。
以下を初期化スクリプトに追記
# gitの補完用スクリプトのダウンロード
curl -o $HOME/dotfiles/.zsh/completion/git-completion.bash https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash
curl -o $HOME/dotfiles/.zsh/completion/_git https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.zsh
# dockerの補完用スクリプトのダウンロード
curl -o $HOME/.zsh/completion/_docker https://raw.githubusercontent.com/docker/cli/master/contrib/completion/zsh/_docker
以下を.zshrc
に追記
### gitやdockerの補完の設定
zstyle ':completion:*:*:git:*' script ~/dotfiles/.zsh/completion/git-completion.bash
fpath=(~/dotfiles/.zsh/completion $fpath)
autoload -Uz compinit && compinit -i
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
上の記事を参考にGithub Actionsによる自動テストを書く
name: macos
on:
push:
branches: [ main ]
jobs:
macos-test:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Run init.sh
run: ${GITHUB_WORKSPACE}/init.sh
- name: Load .zshenv
run: |
zsh ~/.zshenv 2> error.log; cat error.log
if [ -s error.log ]; then false; fi
- name: Load .zprofile
run: |
zsh ${ZDOTDIR}/.zprofile 2> error.log; cat error.log
if [ -s error.log ]; then false; fi
- name: Load .zshrc
run: |
zsh ${ZDOTDIR}/.zshrc 2> error.log; cat error.log
if [ -s error.log ]; then false; f
name: lint
on:
push:
branches: [ main ]
jobs:
lint-check:
runs-on: macos-latest
steps:
- uses: actions/checkout@v2
- name: Check init.sh
run: shellcheck ${GITHUB_WORKSPACE}/init.sh
- name: Check .zshenv
run: shellcheck ${GITHUB_WORKSPACE}/.zshenv --exclude=SC2148,SC1090
- name: Check .zprofile
run: shellcheck ${GITHUB_WORKSPACE}/.zprofile --exclude=SC2148,SC1090
- name: Check .zshrc
run: shellcheck ${GITHUB_WORKSPACE}/.zshrc --exclude=SC2148,SC1090
![chouxcreams](https://zenn-dev.github.io/default-avatars/dark/c.png)
shellcheckはzsh的pathの書き方するだけで通らなくなるし、brewのインストールの自動化もまだやってないので、init.shだけ実行するように書き換えた