Add create-dotfiles-archive.sh for portable dotfiles

Creates a standalone tar.gz that can be extracted on any machine:
- Includes all dotfiles from chezmoi
- Includes Claude marketplaces
- Uses __HOME__ placeholder for paths
- Includes setup-dotfiles.sh that fixes paths on extraction
This commit is contained in:
Viktor Barzin 2026-02-03 21:07:56 +00:00
parent ef69a25e0f
commit f35635b42a
2 changed files with 53 additions and 0 deletions

BIN
- Normal file

Binary file not shown.

View file

@ -0,0 +1,53 @@
#!/bin/bash
# Create a portable dotfiles archive that can be extracted on any machine
# Usage: ./create-dotfiles-archive.sh [output.tar.gz]
set -e
OUTPUT="${1:-dotfiles-portable.tar.gz}"
TMPDIR="/tmp/dotfiles-archive-$$"
LOCAL_HOME="$HOME"
echo "Creating portable dotfiles archive..."
mkdir -p "$TMPDIR/.claude/plugins"
# Extract chezmoi dotfiles
chezmoi archive --output=- | tar -xzf - -C "$TMPDIR"
# Add marketplaces
cp -r ~/.claude/plugins/marketplaces "$TMPDIR/.claude/plugins/"
# Replace home path with placeholder in JSON files
for f in "$TMPDIR/.claude/plugins/installed_plugins.json" "$TMPDIR/.claude/plugins/known_marketplaces.json"; do
if [ -f "$f" ]; then
sed -i.bak "s|$LOCAL_HOME|__HOME__|g" "$f"
rm -f "$f.bak"
fi
done
# Create setup script
cat > "$TMPDIR/setup-dotfiles.sh" << 'SETUP'
#!/bin/bash
# Run this after extracting to fix paths for your home directory
set -e
cd ~
for f in ~/.claude/plugins/installed_plugins.json ~/.claude/plugins/known_marketplaces.json; do
if [ -f "$f" ]; then
sed -i.bak "s|__HOME__|$HOME|g" "$f"
rm -f "$f.bak"
fi
done
echo "Dotfiles setup complete!"
rm -f ~/setup-dotfiles.sh
SETUP
chmod +x "$TMPDIR/setup-dotfiles.sh"
# Create the archive
tar -czf "$OUTPUT" -C "$TMPDIR" .
rm -rf "$TMPDIR"
echo "Created: $OUTPUT"
echo ""
echo "To use on remote machine:"
echo " 1. Copy $OUTPUT to the remote"
echo " 2. cd ~ && tar -xzf $OUTPUT && ./setup-dotfiles.sh"