1 Core Obsidian Shortcuts#

These are the most essential keys for building your homelab documentation rapidly.

Action Shortcut (Mac) Result
Quick Open Cmd + O Search for any note in your vault.
Insert Link Cmd + K Creates standard []( ) syntax.
Toggle Sidebar Cmd + S Hides/Shows the file explorer.
Search in Note Cmd + F Finds text within the current file.
Global Search Cmd + Shift + F Searches your entire vault.
Command Palette Cmd + P Access every feature (Templates, Plugins, etc).

Since we switched to Standard Markdown Links, use these to keep the “network” alive.

  • Internal Autocomplete: Type [[ even though Wikilinks are off. Select the note and hit Enter to get a Hugo-friendly link: [Note](<Note.md>).
  • Rapid External Link: Highlight a word and press Cmd + V (Paste) with a URL in your clipboard. It will wrap the word in a link automatically.

When Use [[Wikilinks]] is toggled OFF in Obsidian settings, you must use the [Label](Path.md#Heading) format. To avoid manually typing URL-encoded spaces (like %20), use the “Search & Convert” method.

2.1 The “Search & Convert” Method#

This method uses the [[ trigger as a temporary search tool. Obsidian will automatically convert your selection into a properly formatted Markdown link.

Step Action Keyboard Input
1 Trigger Search Type [[
2 Find Note Type the name of the note - DON’T PRESS ENTER
3 Search Headings Type # immediately after the note name
4 Select Heading Use arrow keys to select the heading and press Enter
5 Result Obsidian converts it to [Note > Heading](Note%20Name.md#Heading)

After Obsidian generates the long link, you can safely change the text inside the brackets [ ] to whatever you want (e.g., “See HP”) without breaking the link.

Generated Link: [HP Server Performance settings > Performance vs. Power Savings Comparison](HP%20Server%20Performance%20settings.md#Performance%20vs.%20Power%20Savings%20Comparison)

Your Edited Version: [See HP](HP%20Server%20Performance%20settings.md#Performance%20vs.%20Power%20Savings%20Comparison)


2.3 Critical Requirements#

  • Extension: The .md must remain inside the parentheses ( ).
  • Encoded Spaces: Spaces in the file path must be %20. The method above handles this automatically.
  • Settings: Verify Settings > Files & Links > Use [[Wikilinks]] is OFF to ensure the conversion happens upon pressing Enter.
  • Path Logic: If the file is in a folder, the path might look like Folder/File%20Name.md. Using the [[ trigger handles the pathing for you based on your “Default link format” setting.

3 Hugo Terminal Commands#

Run these in your terminal while inside /Users/marc/Obsidian/Homelab/.

  • Start Dev Server: hugo server -D (The -D includes drafts).
  • Create New Post: hugo new posts/my-new-note.md.
  • Build Site: hugo --gc --minify (Cleans up old files and shrinks the output).

5 Clone Vault settings to a new one#

# 1. Define paths
SOURCE="/Users/$(whoami)/Obsidian/Homelab"
TARGET="/Users/$(whoami)/Obsidian/NewVault"

# 2. Sync Core UI & Behavior
rsync -av "$SOURCE/.obsidian/app.json" "$TARGET/.obsidian/app.json"
rsync -av "$SOURCE/.obsidian/hotkeys.json" "$TARGET/.obsidian/hotkeys.json"
rsync -av "$SOURCE/.obsidian/appearance.json" "$TARGET/.obsidian/appearance.json"
rsync -av "$SOURCE/.obsidian/core-plugins.json" "$TARGET/.obsidian/core-plugins.json"

# 3. Sync Workflow Logic (Daily Notes, Templates, Pinned Commands)
rsync -av "$SOURCE/.obsidian/daily-notes.json" "$TARGET/.obsidian/daily-notes.json" 2>/dev/null
rsync -av "$SOURCE/.obsidian/templates.json" "$TARGET/.obsidian/templates.json" 2>/dev/null
rsync -av "$SOURCE/.obsidian/command-palette.json" "$TARGET/.obsidian/command-palette.json" 2>/dev/null

# 4. Sync Visuals (Themes & Snippets)
mkdir -p "$TARGET/.obsidian/themes" "$TARGET/.obsidian/snippets"
rsync -av "$SOURCE/.obsidian/themes/." "$TARGET/.obsidian/themes/"
rsync -av "$SOURCE/.obsidian/snippets/." "$TARGET/.obsidian/snippets/"
  • If some settings are not present, errors might be shown, but it’s OK

6 Clone all plugins to a new vault while preserving the one present#

Warning: The Self-Hosted LiveSync plugin will try to overwrite the vault when you activate it. The DB should be turned off during the fist start so you can modify it safely.

# 1. Define your paths
SOURCE="/Users/$(whoami)/Obsidian/Homelab"
TARGET="/Users/$(whoami)/Obsidian/NewVault"

# 2. Create the target plugins directory
mkdir -p "$TARGET/.obsidian/plugins"

# 3. Sync ALL plugin folders (The 'engine' and 'settings' for every plugin)
# We use -av to ensure we copy all subfolders (like obsidian-git, dataview, etc.)
rsync -av "$SOURCE/.obsidian/plugins/." "$TARGET/.obsidian/plugins/"

# 4. Sync the Copilot prompts folder (just in case they are needed)
if [ -d "$SOURCE/copilot" ]; then
    mkdir -p "$TARGET/copilot"
    rsync -av "$SOURCE/copilot/." "$TARGET/copilot/"
fi

# 5. Surgical Merge of the "Enabled" list
# This takes the list of plugins from SOURCE and adds them to TARGET
# without creating duplicates or deleting existing plugins in TARGET.
if [ ! -f "$TARGET/.obsidian/community-plugins.json" ]; then
    cp "$SOURCE/.obsidian/community-plugins.json" "$TARGET/.obsidian/community-plugins.json"
else
    tmp=$(mktemp)
    jq -s 'add | unique' "$SOURCE/.obsidian/community-plugins.json" "$TARGET/.obsidian/community-plugins.json" > "$tmp" && mv "$tmp" "$TARGET/.obsidian/community-plugins.json"
fi

# 6. Final Verification
cat "$TARGET/.obsidian/community-plugins.json"

7 Clone the Copilot AI plugin to a new vault#

# 1. Define your paths
SOURCE="/Users/$(whoami)/Obsidian/Homelab"
TARGET="/Users/$(whoami)/Obsidian/NewVault"

# 2. Create the internal directory structure (Crucial for a new vault)
mkdir -p "$TARGET/.obsidian/plugins/copilot"
mkdir -p "$TARGET/copilot/copilot-custom-prompts"

# 3. Sync the Copilot engine and your Gemini settings
# This moves the .js code and your API keys/model selection
rsync -av "$SOURCE/.obsidian/plugins/copilot/" "$TARGET/.obsidian/plugins/copilot/"

# 4. Sync your Custom Prompts
# This moves your Senior SysAdmin personas and Hugo logic
rsync -av "$SOURCE/copilot/copilot-custom-prompts/" "$TARGET/copilot/copilot-custom-prompts/"

# 5. Initialize the "Guest List" and add Copilot
# This creates the file if it's missing and adds the plugin name
if [ ! -f "$TARGET/.obsidian/community-plugins.json" ]; then
    echo '["copilot"]' > "$TARGET/.obsidian/community-plugins.json"
else
    tmp=$(mktemp)
    jq '. + ["copilot"] | unique' "$TARGET/.obsidian/community-plugins.json" > "$tmp" && mv "$tmp" "$TARGET/.obsidian/community-plugins.json"
fi

# 6. Final Verification
cat "$TARGET/.obsidian/community-plugins.json"
  • Reload Plugins (or activate the community plugins): Go to Settings > Community Plugins and toggle Copilot OFF and ON.
  • You might need to clean logs in the /Users/marc/Obsidian/NewVault/copilot
  • Verify Model: Check that gemini-3-flash-preview is selected.
  • Wipe the Ghost Index: Since the index is unique to the file content, run:
    • Cmd + P -> Copilot: Force Re-index Vault

8 Clone the Number Headings plugin to a new vault#

# 1. Define your paths
SOURCE="/Users/$(whoami)/Obsidian/Homelab"
TARGET="/Users/$(whoami)/Obsidian/NewVault"

# 2. Create the target folder (Folder name: number-headings-obsidian)
mkdir -p "$TARGET/.obsidian/plugins/number-headings-obsidian"

# 3. Sync the Number Headings engine and settings
# This ensures your specific heading formats move over
rsync -av "$SOURCE/.obsidian/plugins/number-headings-obsidian/" "$TARGET/.obsidian/plugins/number-headings-obsidian/"

# 4. Surgical Enable (Adds to list, ignores if already there)
if [ ! -f "$TARGET/.obsidian/community-plugins.json" ]; then
    echo '["number-headings-obsidian"]' > "$TARGET/.obsidian/community-plugins.json"
else
    tmp=$(mktemp)
    jq '. + ["number-headings-obsidian"] | unique' "$TARGET/.obsidian/community-plugins.json" > "$tmp" && mv "$tmp" "$TARGET/.obsidian/community-plugins.json"
fi

# 5. Final Verification
cat "$TARGET/.obsidian/community-plugins.json"

9 Copy vault and settings from MacStudio to another computer#

Copy the setting (.obisdian folder)

Warning: Obsidian should not be running on source and destination

# MacStudio to MacBook Air
rsync -avzhI --delete --progress /Users/marc/Obsidian/Homelab/.obsidian/ marc@10.1.2.5:/Users/marc/Obsidian/Homelab/.obsidian

Copy the full vault

Warning: Obsidian should not be running on source and destination - You will overwrite the full vault! This should not be used unless you want to create the vault to a new machine

# Homelab - MacStudio to MacBook Air
rsync -avzh --progress /Users/marc/Obsidian/Homelab/ marc@10.1.2.5:/Users/marc/Obsidian/Homelab/
# Homelab - MacStudio to MacBook Pro 15
rsync -avzh --progress /Users/marc/Obsidian/Homelab/ marc@10.1.2.31:/Users/marc/Obsidian/Homelab/
# Homelab - MacStudio to MacBook Pro 16
rsync -avzh --progress /Users/marc/Obsidian/Homelab/ marc@10.1.9.116:/Users/marc/Obsidian/Homelab/
# Peru - MacStudio to MacBook Air
rsync -avzh --progress /Users/marc/Obsidian/Peru/ marc@10.1.2.5:/Users/marc/Obsidian/Peru/

10 Fix Git pull error on target computer#

git fetch origin && git reset --hard origin/main