مدیریت فایل‌های dotfiles با گیت

1404-10-12- 2 دقیقه

الان هر روز به کانفیگ ها ور میرم و برای ذخیره کردنشون چالش داشتم. مدتی هست که یادداشت هامو تو یک ریپوی خصوصی با obsidian ذخیره میکنم و خیلی سیستم خوبیه. این کارو برای کانفیگ ها امتحان کردم ولی مشکلش اینه که کار سختیه هر دفعه تغییرات جدید رو کپی کنی توی فایل هایی که روی گیت هست.

برای حل این مشکل باز هم قهرمان داستان git وارد می شود با چیزی به اسم bare repository:

اینجوری میسازیمش:
git init --bare $HOME/.dotfiles

و یا میتونید ریپوزیتوری موجود رو به صورت bare توی سیستم clone کنید:

git clone --bare https://github.com/YOUR_USERNAME/dotfiles.git $HOME/.dotfiles
یه alias براش بسازید

اینو به zshrc. اضافه میکنیم

alias dtf='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'

الان مثلا میتونیم بگیم dtf status و بقیه کامندها.

به گیت میگیم بقیه فایل هارو بیخیال شو
dtf config --local status.showUntrackedFiles no‍‍‍‍‍
فایل های کانفیگ رو اضافه میکنیم
dtf add ~/.config/i3
dtf add ~/.config/nvim 
dtf add ~/.zshrc 

dtf commit -m "Initial dotfiles"
و در آخر push کنید
dtf remote add origin git@github.com:YOUR_USERNAME/dotfiles.git

dtf push -u origin master

از اونجایی که من نمیخواستم هر دفعه dtf commit انجام بدم یه alias دیگه هم اضافه کردم:

alias dtfpush='dtf add -f ~/.zshrc ~/.config/i3 ~/.config/nvim && dtf commit -m "update dotfiles" && dtf push'

الان دیگه فرق نمیکنه کجای لینوکس هستید با یه کامند dtfpush تمام کانفیگ ها push میشه تو گیت هاب.

تفاوت اصلی با ریپوی معمولی گیت اینه که نیازی نیست هیچ فایلی رو جا به جا کنید.

الان گیت از HOME$ تمام تغییراتی که اعمال میشه رو زیر نظر داره و فقط با یه کامند ساده از هرجا میتونید commit کنید و تغییراتو push کنید توی گیت هاب.

و از اونجایی که من زیاد مدام در حال تغییر distro هستم برای اینکه توی یک سیستم تازه نصب شده تمام ابزارهایی که برای این کانفیگ ها نیاز به نصب دارن رو نصب کنم یه اسکریپت ساده هم اضافه کردم:

bootstrap.sh:

#!/usr/bin/env bash

sudo pacman -Syu --needed --noconfirm

sudo pacman -S --needed \
    tmux telegram-desktop zsh zola nodejs npm nvim \
    git picom obsidian okular mpv konsole obs-studio \
    ttf-jetbrains-mono polybar pamixer feh xorg-xrandr \
    i3status brightnessctl numlockx python-virtualenv python-pynvim \
    luarocks rust neovim 
    

این اسکریپت رو اضافه کردم به dotfiles/scripts و با ران کردن این اسکریپت دیگه نیازی نیست تمام ابزارهارو تکی نصب کنیم.