Initial commit: Complete macOS dotfiles system
🖖 Features: - Master 'engage' script for one-command setup - 120+ CLI tools via Homebrew - 40+ Applications (casks + MAS apps) - Complete macOS system configuration - Security hardening and privacy settings - Obsidian knowledge vault setup - Comprehensive backup strategies - Automated symlink management Live long and prosper\! 🚀 🤖 Generated with Claude Code (https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Executable
+110
@@ -0,0 +1,110 @@
|
||||
#!/usr/bin/env bash
|
||||
# Symlink dotfiles to home directory
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
DOTFILES_DIR="$HOME/dotfiles"
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
echo -e "${BLUE}Creating symlinks for dotfiles...${NC}"
|
||||
|
||||
# Function to create symlink with backup
|
||||
link_file() {
|
||||
local source="$1"
|
||||
local target="$2"
|
||||
local backup_dir="$HOME/.dotfiles-backup/$(date +%Y%m%d_%H%M%S)"
|
||||
|
||||
# Create target directory if it doesn't exist
|
||||
mkdir -p "$(dirname "$target")"
|
||||
|
||||
# If target exists and is not a symlink, back it up
|
||||
if [ -e "$target" ] && [ ! -L "$target" ]; then
|
||||
echo -e "${YELLOW}Backing up existing $target${NC}"
|
||||
mkdir -p "$backup_dir"
|
||||
mv "$target" "$backup_dir/"
|
||||
fi
|
||||
|
||||
# Remove existing symlink
|
||||
[ -L "$target" ] && rm "$target"
|
||||
|
||||
# Create new symlink
|
||||
ln -sf "$source" "$target"
|
||||
echo -e "${GREEN}✓ Linked: $target -> $source${NC}"
|
||||
}
|
||||
|
||||
# Shell configurations
|
||||
echo -e "${YELLOW}Linking shell configurations...${NC}"
|
||||
link_file "$DOTFILES_DIR/.zshrc" "$HOME/.zshrc"
|
||||
link_file "$DOTFILES_DIR/.gitconfig" "$HOME/.gitconfig"
|
||||
link_file "$DOTFILES_DIR/.vimrc" "$HOME/.vimrc"
|
||||
link_file "$DOTFILES_DIR/.npmrc" "$HOME/.npmrc"
|
||||
|
||||
# SSH config (template only - user must customize)
|
||||
if [ -f "$DOTFILES_DIR/ssh/config.example" ] && [ ! -f "$HOME/.ssh/config" ]; then
|
||||
echo -e "${YELLOW}Creating SSH config from template...${NC}"
|
||||
mkdir -p "$HOME/.ssh"
|
||||
cp "$DOTFILES_DIR/ssh/config.example" "$HOME/.ssh/config"
|
||||
chmod 600 "$HOME/.ssh/config"
|
||||
echo -e "${YELLOW}⚠ Edit ~/.ssh/config with your actual values${NC}"
|
||||
fi
|
||||
|
||||
# Config directories
|
||||
echo -e "${YELLOW}Linking config directories...${NC}"
|
||||
mkdir -p "$HOME/.config"
|
||||
|
||||
# Link config subdirectories if they exist
|
||||
for config_dir in git iterm2 kitty karabiner; do
|
||||
if [ -d "$DOTFILES_DIR/config/$config_dir" ]; then
|
||||
link_file "$DOTFILES_DIR/config/$config_dir" "$HOME/.config/$config_dir"
|
||||
fi
|
||||
done
|
||||
|
||||
# Custom scripts
|
||||
echo -e "${YELLOW}Linking custom scripts...${NC}"
|
||||
mkdir -p "$HOME/bin"
|
||||
if [ -d "$DOTFILES_DIR/bin" ]; then
|
||||
for script in "$DOTFILES_DIR/bin"/*; do
|
||||
if [ -f "$script" ] && [ -x "$script" ]; then
|
||||
script_name=$(basename "$script")
|
||||
link_file "$script" "$HOME/bin/$script_name"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
# Git hooks
|
||||
echo -e "${YELLOW}Setting up global git hooks...${NC}"
|
||||
if [ -d "$DOTFILES_DIR/git/hooks" ]; then
|
||||
git config --global core.hooksPath "$DOTFILES_DIR/git/hooks"
|
||||
echo -e "${GREEN}✓ Global git hooks configured${NC}"
|
||||
fi
|
||||
|
||||
# Mackup configuration
|
||||
if [ -f "$DOTFILES_DIR/.mackup.cfg" ]; then
|
||||
link_file "$DOTFILES_DIR/.mackup.cfg" "$HOME/.mackup.cfg"
|
||||
fi
|
||||
|
||||
# Shell enhancements
|
||||
echo -e "${YELLOW}Setting up shell enhancements...${NC}"
|
||||
if [ -f "$DOTFILES_DIR/shell/history-sync.zsh" ]; then
|
||||
# Add source line to .zshrc if not already present
|
||||
if ! grep -q "history-sync.zsh" "$HOME/.zshrc" 2>/dev/null; then
|
||||
echo "" >> "$HOME/.zshrc"
|
||||
echo "# History sync and enhancements" >> "$HOME/.zshrc"
|
||||
echo "source $DOTFILES_DIR/shell/history-sync.zsh" >> "$HOME/.zshrc"
|
||||
echo -e "${GREEN}✓ Added history sync to .zshrc${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}Symlinks created successfully! 🔗${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Next steps:${NC}"
|
||||
echo "1. Edit ~/.ssh/config with your actual values"
|
||||
echo "2. Restart your shell or run: source ~/.zshrc"
|
||||
echo "3. Review and customize any linked configurations"
|
||||
Reference in New Issue
Block a user