paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

そろそろdotfilesの管理もしておこう

家のubuntu desktopは2代目ですがwslの環境も入れるとそこそこなLinuxの台数を渡り歩いてきた気がします。

移行の度にDriveに保存してある設定ファイルからリストアしていて移行は出来ていますがスマートではありません。
やはりバージョン管理したいところなのでdotfileのリポジトリを作ろうと思います。

dotfile管理のベストプラクティス

初めての管理なのでベストも何も無いのですがArch wikiの記事が良さそうだったのでこちらで作ります。

ドットファイル - ArchWiki

やり方は

  1. bareのリポジトリを作る
  2. リポジトリに1を指定、workディレクトリをhomeに指定してgitを実行

というものです。

これだと管理したいファイルだけ指定しておけば良いということらしいです。

良くみる記事だとdotfileフォルダを作って本体の設定ファイル置いてシンボリックリンク張って、というのがほとんどでリンク用のスクリプトとか書くのめんどくさいと思って着手出来ませんでした。

ちなみにハードリンクを使う記事が無かったのですが都合が悪いんですかね?
一回挑戦してみればよかった。

リポジトリ作成

wikiに沿って作成。

❯ git init --bare ~/.dotfiles
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint:   git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint:   git branch -m <name>
Initialized empty Git repository in /home/masashi/.dotfiles/
❯ alias config='/usr/bin/git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'
❯ config config status.showUntrackedFiles no

使ったことないオプションだらけですが

  • bare
  • work-dir
    • そのままの意味
  • showUntrackedFiles

らしい。一応調べたけど単語で何となくわかる。
今後はconfigコマンドで操作していくことになります。

homeがワークディレクトリだから必要なファイルを選んでcommitしていく感じですね。
デスクトップまわりはどうするか考えますが.bashrc .zshrc .conkyrc .vimrc辺りは必ず欲しいです。

とりあえずこの辺をcommit。

❯ config add .bashrc .p10k.zsh .vimrc .zshrc .zshrc.pre-oh-my-zsh
❯ 
❯ config status
ブランチ master

No commits yet

コミット予定の変更点:
  (use "git rm --cached <file>..." to unstage)
    new file:   .bashrc
    new file:   .p10k.zsh
    new file:   .vimrc
    new file:   .zshrc
    new file:   .zshrc.pre-oh-my-zsh

Untracked files not listed (use -u option to show untracked files)
❯ config commit -m "First commit"
[master (root-commit) d09968a] First commit
 5 files changed, 2088 insertions(+)
 create mode 100644 .bashrc
 create mode 100644 .p10k.zsh
 create mode 100644 .vimrc
 create mode 100644 .zshrc
 create mode 100644 .zshrc.pre-oh-my-zsh

commit後のリポジトリ

リポジトリはどうなってるのかなっと。

ls .dotfiles
COMMIT_EDITMSG  branches  description  index  logs     refs
HEAD            config    hooks        info   objects

bareだからファイルが無いですね。

clone

PCを新調した体で1個ディレクトリ下げてcloneしてみます。

mkdir testhome
❯ cd testhome
❯ lsls -a
.  ..
❯ git clone ../.dotfiles
Cloning into '.dotfiles'...
done.
❯ ls -a
.  ..  .dotfiles
❯ ls -a .dotfiles
.  ..  .bashrc  .git  .p10k.zsh  .vimrc  .zshrc  .zshrc.pre-oh-my-zsh

ちゃんとファイルがありますね。
homeで実行すれば上書いてくれるのかな?
こうならデスクトップ環境もリストアできそうなのでリポジトリに入れるべきですね。

push(失敗)

最後にGithubに上げようと思いましたがpermission deniedでpushできず...
これは別の機会にチャレンジします。