#!/bin/zsh # dotfiles installer # usage: ./install.zsh [dotfiles_dir] dotdir="${1:-$HOME/dotfiles}" files=(.zshrc .vimrc .tmux.conf .config/karabiner/karabiner.json) dirs=(.zsh .vim/plugin .tmux) # backup and symlink files for f in "${files[@]}"; do src="$dotdir/$f" dst="$HOME/$f" [ ! -f "$src" ] && continue mkdir -p "$(dirname "$dst")" if [ -e "$dst" ] && [ ! -L "$dst" ]; then mv "$dst" "${dst}.bak" echo "backup: $dst -> ${dst}.bak" fi ln -sf "$src" "$dst" echo "link: $dst -> $src" done # symlink directories for d in "${dirs[@]}"; do src="$dotdir/.${d#.}" dst="$HOME/.${d#.}" # handle nested dirs if [[ "$d" == */* ]]; then src="$dotdir/$d" dst="$HOME/$d" mkdir -p "$(dirname "$dst")" else src="$dotdir/$d" dst="$HOME/$d" fi [ ! -d "$src" ] && continue if [ -L "$dst" ]; then rm "$dst" elif [ -d "$dst" ]; then mv "$dst" "${dst}.bak" echo "backup: $dst -> ${dst}.bak" fi ln -s "$src" "$dst" echo "link: $dst -> $src" done # symlink individual files in .local/bin mkdir -p "$HOME/.local/bin" for f in "$dotdir/.local/bin/"*; do [ ! -f "$f" ] && continue ln -sf "$f" "$HOME/.local/bin/$(basename "$f")" echo "link: ~/.local/bin/$(basename "$f")" done # create vim undo dir mkdir -p "$HOME/.vim/undo" # install copilot.vim copilot_dir="$HOME/.vim/pack/github/start/copilot.vim" if [ ! -d "$copilot_dir" ]; then git clone https://github.com/github/copilot.vim.git "$copilot_dir" 2>/dev/null echo "copilot.vim: installed" fi # install font fonturl="https://git.syui.ai/ai/font/raw/branch/main/aifont.ttf" case "$(uname)" in Darwin) fontpath="$HOME/Library/Fonts/aifont.ttf" ;; *) fontpath="/usr/share/fonts/TTF/aifont.ttf" ;; esac if [ ! -f "$fontpath" ]; then mkdir -p "$(dirname "$fontpath")" if [ "$(uname)" = "Darwin" ]; then curl -sL -o "$fontpath" "$fonturl" else sudo curl -sL -o "$fontpath" "$fonturl" fc-cache -f 2>/dev/null fi echo "font: $fontpath" fi echo "done"