- Core structure with README, LICENSE, and .gitignore - Complete vault template with Goals, Daily Notes, Projects, and Templates - Cascading goal system (3-year → yearly → monthly → weekly) - Claude Code integration with custom slash commands - GitHub Actions workflow for mobile integration - Comprehensive documentation (setup, customization, workflows, troubleshooting) - Automation scripts for setup (Unix/Mac and Windows) - Example content showing system usage - Self-documenting templates with inline instructions Ready for users to clone and customize for their personal knowledge management needs.
631 lines
16 KiB
Bash
Executable File
631 lines
16 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Obsidian PKM Customization Helper
|
|
# This script helps you customize your PKM system interactively
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
MAGENTA='\033[0;35m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
# Banner
|
|
echo -e "${MAGENTA}"
|
|
echo "╔═══════════════════════════════════════════════════╗"
|
|
echo "║ PKM Customization Assistant ║"
|
|
echo "║ Personalize Your System ║"
|
|
echo "╚═══════════════════════════════════════════════════╝"
|
|
echo -e "${NC}"
|
|
|
|
# Find vault directory
|
|
if [ -f ".setup_complete" ]; then
|
|
VAULT_PATH="$(pwd)"
|
|
else
|
|
read -p "Enter path to your vault: " VAULT_PATH
|
|
VAULT_PATH="${VAULT_PATH/#\~/$HOME}"
|
|
fi
|
|
|
|
if [ ! -d "$VAULT_PATH" ]; then
|
|
echo -e "${RED}Error: Vault not found at $VAULT_PATH${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
cd "$VAULT_PATH"
|
|
|
|
# Function to show menu
|
|
show_menu() {
|
|
echo -e "\n${CYAN}What would you like to customize?${NC}"
|
|
echo "=================================="
|
|
echo "1. Personal Mission & Values"
|
|
echo "2. Goal System (3-year, yearly, monthly)"
|
|
echo "3. Daily Note Template"
|
|
echo "4. Weekly Review Process"
|
|
echo "5. Tag System"
|
|
echo "6. Time Blocks & Schedule"
|
|
echo "7. Project Templates"
|
|
echo "8. Claude Context (CLAUDE.md)"
|
|
echo "9. Folder Structure"
|
|
echo "10. Create Custom Command"
|
|
echo "0. Exit"
|
|
echo ""
|
|
read -p "Choose an option (0-10): " choice
|
|
}
|
|
|
|
# Function 1: Customize Mission
|
|
customize_mission() {
|
|
echo -e "\n${BLUE}Personal Mission & Values${NC}"
|
|
echo "=========================="
|
|
|
|
echo "Your personal mission statement guides your daily decisions."
|
|
echo "Example: 'Create value through technology while nurturing relationships'"
|
|
echo ""
|
|
read -p "Enter your mission statement: " MISSION
|
|
|
|
if [ -n "$MISSION" ]; then
|
|
# Update files with mission
|
|
for file in "CLAUDE.md" "Templates/Daily Template.md"; do
|
|
if [ -f "$file" ]; then
|
|
# Backup original
|
|
cp "$file" "$file.bak"
|
|
# Update mission (handling both macOS and Linux)
|
|
if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
sed -i '' "1s/.*/_$MISSION_/" "$file"
|
|
else
|
|
sed -i "1s/.*/_$MISSION_/" "$file"
|
|
fi
|
|
fi
|
|
done
|
|
echo -e "${GREEN}✓ Mission statement updated${NC}"
|
|
fi
|
|
|
|
echo -e "\n${BLUE}Core Values${NC}"
|
|
echo "What are your top 3 values?"
|
|
read -p "Value 1: " VALUE1
|
|
read -p "Value 2: " VALUE2
|
|
read -p "Value 3: " VALUE3
|
|
|
|
# Create values file
|
|
cat > "Values.md" << EOF
|
|
# My Core Values
|
|
|
|
## 1. $VALUE1
|
|
Why this matters to me:
|
|
|
|
## 2. $VALUE2
|
|
Why this matters to me:
|
|
|
|
## 3. $VALUE3
|
|
Why this matters to me:
|
|
|
|
---
|
|
*These values guide my decisions and priorities.*
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Values documented${NC}"
|
|
}
|
|
|
|
# Function 2: Customize Goals
|
|
customize_goals() {
|
|
echo -e "\n${BLUE}Goal System Setup${NC}"
|
|
echo "=================="
|
|
|
|
echo "Let's set up your cascading goals..."
|
|
echo ""
|
|
|
|
# 3-Year Vision
|
|
echo -e "${CYAN}3-Year Vision${NC}"
|
|
echo "Where do you want to be in 3 years?"
|
|
read -p "Career: " CAREER_3Y
|
|
read -p "Health: " HEALTH_3Y
|
|
read -p "Relationships: " RELATIONSHIP_3Y
|
|
read -p "Financial: " FINANCIAL_3Y
|
|
|
|
# Update 3-year goals file
|
|
cat > "Goals/0. Three Year Goals.md" << EOF
|
|
# Three Year Goals ($(date +%Y)-$(($(date +%Y)+3)))
|
|
|
|
## 🌟 Vision Statement
|
|
In three years, I will have achieved:
|
|
|
|
### 💼 Career & Professional Development
|
|
- $CAREER_3Y
|
|
|
|
### 🏃 Health & Wellness
|
|
- $HEALTH_3Y
|
|
|
|
### ❤️ Relationships & Family
|
|
- $RELATIONSHIP_3Y
|
|
|
|
### 💰 Financial Security
|
|
- $FINANCIAL_3Y
|
|
|
|
---
|
|
*Created: $(date +%Y-%m-%d)*
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ 3-year goals set${NC}"
|
|
|
|
# This Year's Focus
|
|
echo -e "\n${CYAN}This Year's Focus${NC}"
|
|
read -p "What's your ONE metric that matters this year? " ONE_METRIC
|
|
read -p "What's this year's theme word? " THEME
|
|
|
|
# Update yearly goals
|
|
YEAR=$(date +%Y)
|
|
sed -i.bak "s/\[CUSTOMIZE THIS:.*\]/$ONE_METRIC/" "Goals/1. Yearly Goals.md" 2>/dev/null || true
|
|
|
|
echo -e "${GREEN}✓ Yearly goals configured${NC}"
|
|
}
|
|
|
|
# Function 3: Customize Daily Template
|
|
customize_daily() {
|
|
echo -e "\n${BLUE}Daily Note Customization${NC}"
|
|
echo "========================"
|
|
|
|
echo "Let's customize your daily note structure..."
|
|
echo ""
|
|
|
|
# Time preferences
|
|
echo "When does your day typically start?"
|
|
read -p "Wake time (e.g., 6:00 AM): " WAKE_TIME
|
|
|
|
echo "When does your workday start?"
|
|
read -p "Work start (e.g., 9:00 AM): " WORK_START
|
|
|
|
echo "When does your workday end?"
|
|
read -p "Work end (e.g., 5:00 PM): " WORK_END
|
|
|
|
# Categories
|
|
echo -e "\n${CYAN}Task Categories${NC}"
|
|
echo "What categories do you want to track? (comma-separated)"
|
|
echo "Default: Work, Personal, Learning, Health"
|
|
read -p "Your categories: " CATEGORIES
|
|
CATEGORIES=${CATEGORIES:-"Work,Personal,Learning,Health"}
|
|
|
|
# Habits
|
|
echo -e "\n${CYAN}Daily Habits${NC}"
|
|
echo "What habits do you want to track? (comma-separated)"
|
|
echo "Example: Exercise, Meditation, Reading, Journaling"
|
|
read -p "Your habits: " HABITS
|
|
|
|
# Generate custom template
|
|
cat > "Templates/Daily Template - Custom.md" << EOF
|
|
---
|
|
date: {{date}}
|
|
tags: daily-note
|
|
---
|
|
|
|
# {{date:dddd, MMMM DD, YYYY}}
|
|
|
|
## 🎯 Today's Focus
|
|
**ONE Thing:**
|
|
|
|
## ⏰ Schedule
|
|
- **$WAKE_TIME - Morning Routine**
|
|
- **$WORK_START - Work Block**
|
|
- **12:00 PM - Lunch Break**
|
|
- **1:00 PM - Afternoon Work**
|
|
- **$WORK_END - End of Work**
|
|
- **Evening - Personal Time**
|
|
|
|
## ✅ Tasks
|
|
EOF
|
|
|
|
# Add categories
|
|
IFS=',' read -ra CATS <<< "$CATEGORIES"
|
|
for cat in "${CATS[@]}"; do
|
|
cat=$(echo "$cat" | xargs) # Trim whitespace
|
|
echo -e "\n### $cat\n- [ ] " >> "Templates/Daily Template - Custom.md"
|
|
done
|
|
|
|
# Add habits section
|
|
echo -e "\n## 🧘 Habits" >> "Templates/Daily Template - Custom.md"
|
|
IFS=',' read -ra HABS <<< "$HABITS"
|
|
for hab in "${HABS[@]}"; do
|
|
hab=$(echo "$hab" | xargs)
|
|
echo "- [ ] $hab" >> "Templates/Daily Template - Custom.md"
|
|
done
|
|
|
|
# Add reflection
|
|
cat >> "Templates/Daily Template - Custom.md" << EOF
|
|
|
|
## 💭 Notes & Ideas
|
|
|
|
|
|
## 🔍 End of Day Reflection
|
|
### What went well?
|
|
-
|
|
|
|
### What could be better?
|
|
-
|
|
|
|
### Tomorrow's priority:
|
|
-
|
|
|
|
---
|
|
*Day {{date:D}} of 365*
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Custom daily template created${NC}"
|
|
}
|
|
|
|
# Function 4: Customize Weekly Review
|
|
customize_weekly() {
|
|
echo -e "\n${BLUE}Weekly Review Customization${NC}"
|
|
echo "============================"
|
|
|
|
echo "When do you prefer to do your weekly review?"
|
|
echo "1. Sunday Evening"
|
|
echo "2. Monday Morning"
|
|
echo "3. Friday Afternoon"
|
|
echo "4. Saturday Morning"
|
|
read -p "Choose (1-4): " REVIEW_TIME
|
|
|
|
case $REVIEW_TIME in
|
|
1) REVIEW_DAY="Sunday Evening" ;;
|
|
2) REVIEW_DAY="Monday Morning" ;;
|
|
3) REVIEW_DAY="Friday Afternoon" ;;
|
|
4) REVIEW_DAY="Saturday Morning" ;;
|
|
*) REVIEW_DAY="Sunday Evening" ;;
|
|
esac
|
|
|
|
echo -e "\nHow long for your review?"
|
|
read -p "Minutes (default 30): " REVIEW_DURATION
|
|
REVIEW_DURATION=${REVIEW_DURATION:-30}
|
|
|
|
# Create custom weekly review
|
|
cat > "Templates/Weekly Review - Custom.md" << EOF
|
|
# Weekly Review - {{date:YYYY [Week] w}}
|
|
**Review Time:** $REVIEW_DAY ($REVIEW_DURATION minutes)
|
|
|
|
## 📊 Quick Metrics
|
|
- Tasks Completed: /
|
|
- Goals Progress: %
|
|
- Energy Average: /10
|
|
|
|
## 🔍 Last Week
|
|
|
|
### Top 3 Wins
|
|
1.
|
|
2.
|
|
3.
|
|
|
|
### Top 3 Challenges
|
|
1.
|
|
2.
|
|
3.
|
|
|
|
### Key Insight
|
|
-
|
|
|
|
## 📅 Next Week
|
|
|
|
### ONE Big Thing
|
|
If nothing else:
|
|
|
|
### Priority Projects
|
|
1.
|
|
2.
|
|
3.
|
|
|
|
### Scheduled Blocks
|
|
- Deep Work:
|
|
- Meetings:
|
|
- Personal:
|
|
|
|
## 🧹 Cleanup
|
|
- [ ] Process inbox
|
|
- [ ] Review calendar
|
|
- [ ] Update project status
|
|
- [ ] Archive old notes
|
|
- [ ] Plan time blocks
|
|
|
|
---
|
|
*Review completed in: ___ minutes*
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Weekly review customized for $REVIEW_DAY${NC}"
|
|
}
|
|
|
|
# Function 5: Customize Tags
|
|
customize_tags() {
|
|
echo -e "\n${BLUE}Tag System Setup${NC}"
|
|
echo "================="
|
|
|
|
echo "Let's create your personalized tag system..."
|
|
echo ""
|
|
|
|
echo "Choose tag style:"
|
|
echo "1. Hierarchical (#area/subarea/specific)"
|
|
echo "2. Flat (#area-specific)"
|
|
echo "3. Prefix-based (#p-project, #a-area)"
|
|
read -p "Style (1-3): " TAG_STYLE
|
|
|
|
echo -e "\nEnter your main life areas (comma-separated):"
|
|
echo "Example: work, personal, health, finance, learning"
|
|
read -p "Your areas: " AREAS
|
|
|
|
# Create tag reference
|
|
cat > "Tag System.md" << EOF
|
|
# My Tag System
|
|
|
|
## Structure
|
|
EOF
|
|
|
|
case $TAG_STYLE in
|
|
1)
|
|
echo "Hierarchical tags:" >> "Tag System.md"
|
|
IFS=',' read -ra AREA_ARRAY <<< "$AREAS"
|
|
for area in "${AREA_ARRAY[@]}"; do
|
|
area=$(echo "$area" | xargs)
|
|
echo "- #$area/" >> "Tag System.md"
|
|
echo " - #$area/active" >> "Tag System.md"
|
|
echo " - #$area/waiting" >> "Tag System.md"
|
|
echo " - #$area/someday" >> "Tag System.md"
|
|
done
|
|
;;
|
|
2)
|
|
echo "Flat tags:" >> "Tag System.md"
|
|
IFS=',' read -ra AREA_ARRAY <<< "$AREAS"
|
|
for area in "${AREA_ARRAY[@]}"; do
|
|
area=$(echo "$area" | xargs)
|
|
echo "- #$area" >> "Tag System.md"
|
|
echo "- #${area}-active" >> "Tag System.md"
|
|
echo "- #${area}-waiting" >> "Tag System.md"
|
|
done
|
|
;;
|
|
3)
|
|
echo "Prefix-based tags:" >> "Tag System.md"
|
|
echo "- #p- (projects)" >> "Tag System.md"
|
|
echo "- #a- (areas)" >> "Tag System.md"
|
|
echo "- #t- (topics)" >> "Tag System.md"
|
|
echo "- #s- (status)" >> "Tag System.md"
|
|
;;
|
|
esac
|
|
|
|
cat >> "Tag System.md" << EOF
|
|
|
|
## Status Tags
|
|
- #active - Currently working on
|
|
- #waiting - Blocked or waiting
|
|
- #someday - Future consideration
|
|
- #done - Completed
|
|
- #cancelled - No longer relevant
|
|
|
|
## Priority Tags
|
|
- #priority/high - Must do today
|
|
- #priority/medium - This week
|
|
- #priority/low - When possible
|
|
|
|
## Energy Tags
|
|
- #energy/high - Requires focus
|
|
- #energy/medium - Normal energy
|
|
- #energy/low - Can do when tired
|
|
|
|
## Quick Search Queries
|
|
- Find all active: tag:#active
|
|
- Today's priorities: tag:#priority/high
|
|
- Waiting items: tag:#waiting
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Tag system created${NC}"
|
|
}
|
|
|
|
# Function 6: Customize Time Blocks
|
|
customize_time_blocks() {
|
|
echo -e "\n${BLUE}Time Block Customization${NC}"
|
|
echo "========================"
|
|
|
|
echo "Let's set up your ideal time blocks..."
|
|
echo ""
|
|
|
|
echo "What type of schedule do you follow?"
|
|
echo "1. Traditional (9-5)"
|
|
echo "2. Early Bird (5am start)"
|
|
echo "3. Night Owl (work late)"
|
|
echo "4. Flexible/Remote"
|
|
echo "5. Shift Work"
|
|
read -p "Choose (1-5): " SCHEDULE_TYPE
|
|
|
|
case $SCHEDULE_TYPE in
|
|
1)
|
|
BLOCKS="6-7 AM: Morning Routine
|
|
7-8 AM: Planning & Email
|
|
8-9 AM: Commute
|
|
9-12 PM: Deep Work
|
|
12-1 PM: Lunch
|
|
1-3 PM: Meetings
|
|
3-5 PM: Admin Tasks
|
|
5-6 PM: Wrap Up
|
|
6-9 PM: Personal Time"
|
|
;;
|
|
2)
|
|
BLOCKS="5-6 AM: Morning Routine
|
|
6-8 AM: Deep Work
|
|
8-9 AM: Exercise
|
|
9-12 PM: Focused Work
|
|
12-1 PM: Lunch
|
|
1-3 PM: Meetings
|
|
3-5 PM: Project Time
|
|
5-7 PM: Family Time
|
|
7-9 PM: Personal Projects"
|
|
;;
|
|
3)
|
|
BLOCKS="8-9 AM: Slow Morning
|
|
9-10 AM: Exercise
|
|
10-12 PM: Admin Tasks
|
|
12-1 PM: Lunch
|
|
1-4 PM: Meetings
|
|
4-6 PM: Break/Personal
|
|
6-8 PM: Dinner
|
|
8-12 AM: Deep Work"
|
|
;;
|
|
4)
|
|
BLOCKS="7-8 AM: Morning Routine
|
|
8-10 AM: Deep Work Block 1
|
|
10-12 PM: Communication Block
|
|
12-1 PM: Lunch & Walk
|
|
1-3 PM: Deep Work Block 2
|
|
3-4 PM: Admin/Email
|
|
4-5 PM: Planning Tomorrow
|
|
5-7 PM: Personal Time
|
|
7-9 PM: Learning/Side Projects"
|
|
;;
|
|
5)
|
|
echo "Enter your shift schedule:"
|
|
read -p "Shift start: " SHIFT_START
|
|
read -p "Shift end: " SHIFT_END
|
|
BLOCKS="Custom shift: $SHIFT_START - $SHIFT_END"
|
|
;;
|
|
esac
|
|
|
|
# Create time block template
|
|
cat > "Time Blocks.md" << EOF
|
|
# My Ideal Time Blocks
|
|
|
|
## Default Schedule
|
|
$BLOCKS
|
|
|
|
## Deep Work Times
|
|
Best focus: [CUSTOMIZE]
|
|
Good focus: [CUSTOMIZE]
|
|
Low focus: [CUSTOMIZE]
|
|
|
|
## Rules
|
|
1. Protect deep work blocks
|
|
2. Batch similar tasks
|
|
3. Include breaks
|
|
4. End day with planning
|
|
|
|
## Weekly Variations
|
|
- Monday: Planning focus
|
|
- Tuesday-Thursday: Execution
|
|
- Friday: Review & wrap-up
|
|
|
|
---
|
|
*Adjust based on energy and priorities*
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Time blocks configured${NC}"
|
|
}
|
|
|
|
# Function 10: Create Custom Command
|
|
create_custom_command() {
|
|
echo -e "\n${BLUE}Create Custom Claude Command${NC}"
|
|
echo "============================="
|
|
|
|
read -p "Command name (e.g., 'report'): " CMD_NAME
|
|
read -p "Command description: " CMD_DESC
|
|
|
|
echo "What should this command do?"
|
|
echo "1. Create a specific type of note"
|
|
echo "2. Run a workflow/process"
|
|
echo "3. Generate a report"
|
|
echo "4. Perform maintenance"
|
|
read -p "Choose (1-4): " CMD_TYPE
|
|
|
|
# Create command file
|
|
cat > ".claude/commands/$CMD_NAME.md" << EOF
|
|
# $CMD_NAME Command
|
|
|
|
$CMD_DESC
|
|
|
|
## Usage
|
|
\`\`\`
|
|
claude code /$CMD_NAME
|
|
\`\`\`
|
|
|
|
## What This Command Does
|
|
EOF
|
|
|
|
case $CMD_TYPE in
|
|
1)
|
|
read -p "Note template name: " TEMPLATE
|
|
cat >> ".claude/commands/$CMD_NAME.md" << EOF
|
|
1. Creates a new note from template
|
|
2. Names it appropriately
|
|
3. Places in correct folder
|
|
|
|
## Configuration
|
|
const TEMPLATE_PATH = "Templates/$TEMPLATE.md";
|
|
const OUTPUT_FOLDER = "[CUSTOMIZE]";
|
|
EOF
|
|
;;
|
|
2)
|
|
cat >> ".claude/commands/$CMD_NAME.md" << EOF
|
|
1. Executes workflow steps
|
|
2. Updates relevant files
|
|
3. Generates output
|
|
|
|
## Workflow Steps
|
|
1. [Step 1]
|
|
2. [Step 2]
|
|
3. [Step 3]
|
|
EOF
|
|
;;
|
|
3)
|
|
cat >> ".claude/commands/$CMD_NAME.md" << EOF
|
|
1. Analyzes specified data
|
|
2. Generates formatted report
|
|
3. Saves to designated location
|
|
|
|
## Report Sections
|
|
- Summary
|
|
- Details
|
|
- Recommendations
|
|
EOF
|
|
;;
|
|
4)
|
|
cat >> ".claude/commands/$CMD_NAME.md" << EOF
|
|
1. Performs maintenance tasks
|
|
2. Cleans up files
|
|
3. Optimizes structure
|
|
|
|
## Tasks
|
|
- Archive old files
|
|
- Update indices
|
|
- Clean duplicates
|
|
EOF
|
|
;;
|
|
esac
|
|
|
|
echo -e "${GREEN}✓ Custom command '/$CMD_NAME' created${NC}"
|
|
}
|
|
|
|
# Main loop
|
|
while true; do
|
|
show_menu
|
|
|
|
case $choice in
|
|
1) customize_mission ;;
|
|
2) customize_goals ;;
|
|
3) customize_daily ;;
|
|
4) customize_weekly ;;
|
|
5) customize_tags ;;
|
|
6) customize_time_blocks ;;
|
|
7) echo "Project template customization coming soon..." ;;
|
|
8) echo "Edit CLAUDE.md directly for now..." ;;
|
|
9) echo "Folder structure customization coming soon..." ;;
|
|
10) create_custom_command ;;
|
|
0)
|
|
echo -e "\n${GREEN}Customization complete!${NC}"
|
|
echo "Your PKM system has been personalized."
|
|
|
|
# Commit changes
|
|
cd "$VAULT_PATH"
|
|
git add .
|
|
git commit -m "Customization updates - $(date +%Y-%m-%d)" 2>/dev/null || true
|
|
|
|
exit 0
|
|
;;
|
|
*) echo -e "${RED}Invalid option${NC}" ;;
|
|
esac
|
|
|
|
echo -e "\n${CYAN}Press Enter to continue...${NC}"
|
|
read
|
|
done |