2424
2525jobs :
2626 linux :
27- name : Ubuntu
28- runs-on : ubuntu-latest
27+ name : Ubuntu (${{ matrix.arch }})
28+ strategy :
29+ fail-fast : false
30+ matrix :
31+ include :
32+ - runner : ubuntu-24.04
33+ arch : x64
34+ - runner : ubuntu-24.04-arm
35+ arch : arm64
36+ runs-on : ${{ matrix.runner }}
2937 timeout-minutes : 30
3038 steps :
3139 - uses : actions/checkout@v6
@@ -47,27 +55,95 @@ jobs:
4755 errors=$((errors + 1))
4856 fi
4957 }
58+
59+ # Shell & Editor
5060 check "zshrc" "$HOME/.zshrc"
5161 check "gitconfig" "$HOME/.gitconfig"
5262 check "vimrc" "$HOME/.vimrc"
5363 check "vim" "$HOME/.vim"
5464 check "tmux.conf" "$HOME/.tmux.conf"
65+ check "tmux" "$HOME/.tmux"
66+
67+ # Network
5568 check "curlrc" "$HOME/.curlrc"
5669 check "wgetrc" "$HOME/.wgetrc"
70+ check "telnetrc" "$HOME/.telnetrc"
71+
72+ # Search & Input
5773 check "inputrc" "$HOME/.inputrc"
5874 check "ripgreprc" "$HOME/.ripgreprc"
75+ check "fdrc" "$HOME/.fdrc"
76+
77+ # Node.js
78+ check "npmrc" "$HOME/.npmrc"
79+ check "yarnrc" "$HOME/.yarnrc.yml"
80+ check "pnpmrc" "$HOME/.pnpmrc"
81+
82+ # Email
83+ check "muttrc" "$HOME/.muttrc"
84+ check "mutt" "$HOME/.mutt"
85+ check "mailcap" "$HOME/.mailcap"
86+
87+ # Security
88+ check "gnupg" "$HOME/.gnupg"
89+ check "ssh" "$HOME/.ssh"
90+
91+ # App configs
92+ check "htop" "$HOME/.config/htop/htoprc"
93+ check "ghostty" "$HOME/.config/ghostty"
94+ check "kitty" "$HOME/.config/kitty/kitty.conf"
95+ check "bat-config" "$HOME/.config/bat/config"
96+ check "bat-themes" "$HOME/.config/bat/themes"
97+ check "eza" "$HOME/.config/eza"
98+ check "cmus" "$HOME/.config/cmus/rc"
99+ check "yazi" "$HOME/.config/yazi"
100+ check "gh" "$HOME/.config/gh/config.yml"
101+ check "glab" "$HOME/.config/glab-cli/config.yml"
102+ check "tealdeer" "$HOME/.config/tealdeer/config.toml"
103+ check "bottom" "$HOME/.config/bottom/bottom.toml"
104+ check "lazygit" "$HOME/.config/lazygit/config.yml"
105+ check "lazydocker" "$HOME/.config/lazydocker/config.yml"
106+ check "k9s" "$HOME/.config/k9s/config.yml"
107+
108+ # Linux-only
109+ check "conkyrc" "$HOME/.conkyrc"
110+
59111 exit $errors
60112
61113 - name : Verify commands
62114 run : |
63115 set -euo pipefail
64- for cmd in zsh git vim tmux curl wget fzf ripgrep bat; do
65- if command -v "$cmd" >/dev/null 2>&1 || dpkg -l "$cmd" 2>/dev/null | grep -q "^ii"; then
66- echo "OK: $cmd"
116+ errors=0
117+ for cmd in zsh git vim tmux curl wget fzf rg bat eza fd delta gh node go starship docker; do
118+ if command -v "$cmd" >/dev/null 2>&1; then
119+ echo "OK: $cmd ($(command -v "$cmd"))"
120+ elif dpkg -l "$cmd" 2>/dev/null | grep -q "^ii"; then
121+ echo "OK: $cmd (dpkg)"
122+ else
123+ echo "FAIL: $cmd not found"
124+ errors=$((errors + 1))
125+ fi
126+ done
127+ exit $errors
128+
129+ - name : Verify Oh My Zsh
130+ run : |
131+ set -euo pipefail
132+ errors=0
133+ for dir in \
134+ "$HOME/.oh-my-zsh" \
135+ "$HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \
136+ "$HOME/.oh-my-zsh/custom/plugins/zsh-completions" \
137+ "$HOME/.oh-my-zsh/custom/plugins/fzf-tab" \
138+ "$HOME/.oh-my-zsh/custom/themes/spaceship-prompt"; do
139+ if [ -d "$dir/.git" ]; then
140+ echo "OK: $(basename "$dir")"
67141 else
68- echo "WARN: $cmd not found (may use alternate name)"
142+ echo "FAIL: $(basename "$dir") not found"
143+ errors=$((errors + 1))
69144 fi
70145 done
146+ exit $errors
71147
72148 - name : Verify permissions
73149 run : |
@@ -86,8 +162,16 @@ jobs:
86162 check_perm "$HOME/.ssh" "700"
87163
88164 macos :
89- name : macOS
90- runs-on : macos-latest
165+ name : macOS (${{ matrix.arch }})
166+ strategy :
167+ fail-fast : false
168+ matrix :
169+ include :
170+ - runner : macos-15-intel
171+ arch : x64
172+ - runner : macos-26
173+ arch : arm64
174+ runs-on : ${{ matrix.runner }}
91175 timeout-minutes : 90
92176 steps :
93177 - uses : actions/checkout@v6
@@ -109,33 +193,92 @@ jobs:
109193 errors=$((errors + 1))
110194 fi
111195 }
196+
197+ # Shell & Editor
112198 check "zshrc" "$HOME/.zshrc"
113199 check "gitconfig" "$HOME/.gitconfig"
114200 check "vimrc" "$HOME/.vimrc"
115201 check "vim" "$HOME/.vim"
116202 check "tmux.conf" "$HOME/.tmux.conf"
203+ check "tmux" "$HOME/.tmux"
204+
205+ # Network
117206 check "curlrc" "$HOME/.curlrc"
118207 check "wgetrc" "$HOME/.wgetrc"
208+ check "telnetrc" "$HOME/.telnetrc"
209+
210+ # Search & Input
119211 check "inputrc" "$HOME/.inputrc"
120212 check "ripgreprc" "$HOME/.ripgreprc"
213+ check "fdrc" "$HOME/.fdrc"
214+
215+ # Node.js
216+ check "npmrc" "$HOME/.npmrc"
217+ check "yarnrc" "$HOME/.yarnrc.yml"
218+ check "pnpmrc" "$HOME/.pnpmrc"
219+
220+ # Email
221+ check "muttrc" "$HOME/.muttrc"
222+ check "mutt" "$HOME/.mutt"
223+ check "mailcap" "$HOME/.mailcap"
224+
225+ # Security
226+ check "gnupg" "$HOME/.gnupg"
227+ check "ssh" "$HOME/.ssh"
228+
229+ # App configs
230+ check "htop" "$HOME/.config/htop/htoprc"
121231 check "ghostty" "$HOME/.config/ghostty"
232+ check "kitty" "$HOME/.config/kitty/kitty.conf"
122233 check "bat-config" "$HOME/.config/bat/config"
234+ check "bat-themes" "$HOME/.config/bat/themes"
123235 check "eza" "$HOME/.config/eza"
236+ check "cmus" "$HOME/.config/cmus/rc"
124237 check "yazi" "$HOME/.config/yazi"
238+ check "gh" "$HOME/.config/gh/config.yml"
239+ check "glab" "$HOME/.config/glab-cli/config.yml"
240+ check "tealdeer" "$HOME/.config/tealdeer/config.toml"
241+ check "bottom" "$HOME/.config/bottom/bottom.toml"
242+ check "lazygit" "$HOME/.config/lazygit/config.yml"
243+ check "lazydocker" "$HOME/.config/lazydocker/config.yml"
244+ check "k9s" "$HOME/.config/k9s/config.yml"
245+ check "k9s-skins" "$HOME/.config/k9s/skins"
246+
125247 exit $errors
126248
127249 - name : Verify Homebrew packages
128250 run : |
129251 set -euo pipefail
130252 eval "$(/opt/homebrew/bin/brew shellenv 2>/dev/null || /usr/local/bin/brew shellenv 2>/dev/null)"
131- for cmd in bat eza fzf fd rg delta git zsh tmux vim; do
253+ errors=0
254+ for cmd in bat eza fzf fd rg delta git zsh tmux vim gh node nvm bun pnpm; do
132255 if command -v "$cmd" >/dev/null 2>&1; then
133256 echo "OK: $cmd ($(command -v "$cmd"))"
134257 else
135258 echo "FAIL: $cmd not found"
136- exit 1
259+ errors=$((errors + 1))
260+ fi
261+ done
262+ exit $errors
263+
264+ - name : Verify Oh My Zsh
265+ run : |
266+ set -euo pipefail
267+ errors=0
268+ for dir in \
269+ "$HOME/.oh-my-zsh" \
270+ "$HOME/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting" \
271+ "$HOME/.oh-my-zsh/custom/plugins/zsh-completions" \
272+ "$HOME/.oh-my-zsh/custom/plugins/fzf-tab" \
273+ "$HOME/.oh-my-zsh/custom/themes/spaceship-prompt"; do
274+ if [ -d "$dir/.git" ]; then
275+ echo "OK: $(basename "$dir")"
276+ else
277+ echo "FAIL: $(basename "$dir") not found"
278+ errors=$((errors + 1))
137279 fi
138280 done
281+ exit $errors
139282
140283 - name : Verify permissions
141284 run : |
0 commit comments